Prise en main de l’imagerie IA dans le Kit de développement logiciel (SDK) d’application Windows
Important
Disponible dans la dernière version de la chaîne expérimentale du SDK d’applications Windows.
Le canal expérimental du Kit de développement logiciel (SDK) d’application Windows inclut des API et des fonctionnalités au début du développement. Toutes les API du canal expérimental font l’objet de révisions approfondies et de changements cassants et peuvent être supprimées des versions ultérieures à tout moment. Les fonctionnalités expérimentales ne sont pas prises en charge pour une utilisation dans les environnements de production et les applications qui les utilisent ne peuvent pas être publiées dans le Microsoft Store.
- Les fonctionnalités d’imagerie ne sont pas disponibles en Chine.
- Les applications non empaquetées ne sont pas prises en charge.
Les fonctionnalités d’imagerie sont fournies par le SDK d’application Windows via un ensemble d’API, soutenues par l’intelligence artificielle (IA), qui prennent en charge les fonctionnalités suivantes :
- Super résolution d'images: mise à l’échelle et amélioration de la netteté des images
- Description de l’image: production de texte décrivant l’image
- segmentation d’image : identification d’objets au sein d’une image
Pour plus de détails sur l'API, consultez la réf. API pour les fonctionnalités d'imagerie IA dans le SDK d'applications Windows.
Pour plus de détails sur la modération du contenu, voir Sécurité du contenu avec les API d’IA générative.
Conseil
Fournissez des commentaires sur ces API et leurs fonctionnalités en créant un nouveau problème dans le dépôt GitHub du Kit de développement logiciel (SDK) d’application Windows (inclure Imaging dans le titre) ou en répondant à un problème existant.
Prérequis
- Un PC CoPilot+ de Qualcomm, Intel ou AMD.
- Les PC CoPilot+ basés sur AMD ne prennent actuellement pas en charge la super résolution d’images.
- Arm64EC (compatible avec l’émulation) n’est actuellement pas pris en charge.
- Windows 11 Insider Preview Build 26120.3073 (Canaux dev et bêta) ou version ultérieure doivent être installés sur votre appareil.
Que puis-je faire avec la super résolution d’images ?
Les API de super résolution d’images dans le SDK (Kit de développement logiciel) d’application Windows permettent l’affinement et la mise à l’échelle des images.
La mise à l’échelle est limitée à un facteur maximal de 8x. Des facteurs d’échelle plus élevés peuvent introduire des artefacts et compromettre la précision de l’image. Si la largeur ou la hauteur finale est supérieure à 8x leurs valeurs d’origine, une exception est levée.
L’exemple suivant montre comment modifier l’échelle (targetWidth
, targetHeight
) d’une image bitmap logicielle existante (softwareBitmap
) et améliorer la netteté de l’image (pour améliorer la netteté sans mettre à l’échelle l’image, spécifiez simplement la largeur et la hauteur de l’image existante) à l’aide d’un objet ImageScaler
.
Vérifiez que le modèle de super résolution d’images est disponible en appelant la méthode
ImageScaler.IsAvailable
, puis en attendant que la méthodeImageScaler.MakeAvailableAsync
retourne avec succès.Une fois le modèle de super-résolution d'image disponible, créez un objet
ImageScaler
pour le référencer.Obtenez une version aiguisée et mise à l’échelle de l’image existante en passant l’image existante et la largeur et la hauteur souhaitées au modèle à l’aide de la méthode
ScaleSoftwareBitmap
.
using Microsoft.Windows.Imaging;
using Microsoft.Windows.Management.Deployment;
using Windows.Graphics.Imaging;
if (!ImageScaler.IsAvailable())
{
var result = await ImageScaler.MakeAvailableAsync();
if (result.Status != PackageDeploymentStatus.CompletedSuccess)
{
throw result.ExtendedError;
}
}
ImageScaler imageScaler = await ImageScaler.CreateAsync();
SoftwareBitmap finalImage = imageScaler.ScaleSoftwareBitmap(softwareBitmap, targetWidth, targetHeight);
#include <winrt/Microsoft.Graphics.Imaging.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Graphics.Imaging.h>
using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::Graphics::Imaging;
if (!ImageScaler::IsAvailable())
{
winrt::PackageDeploymentResult result = ImageScaler::MakeAvailableAsync().get();
if (result.Status() != PackageDeploymentStatus::CompletedSuccess)
{
throw result.ExtendedError();
}
}
ImageScaler imageScaler = ImageScaler::CreateAsync().get();
SoftwareBitmap finalImage = imageScaler.ScaleSoftwareBitmap(softwareBitmap, targetWidth, targetHeight);
Que puis-je faire avec la description de l’image ?
Important
La description de l’image n’est pas disponible en Chine.
Les API Description d’image dans le Kit de développement logiciel (SDK) d’application Windows permettent de générer différents types de descriptions de texte pour une image.
Les types de descriptions de texte suivants sont pris en charge :
- - Accessibilité : fournit une description détaillée destinée aux utilisateurs ayant des besoins spécifiques en matière d'accessibilité.
- Légende - Fournit une courte description adaptée à une légende d'image. Valeur par défaut si aucune valeur n’est spécifiée.
- DetailedNarration - Fournit une description longue.
- OfficeCharts : fournit une description adaptée aux graphiques et diagrammes.
Étant donné que ces API utilisent des modèles Machine Learning (ML), des erreurs occasionnelles peuvent se produire lorsque le texte ne décrit pas correctement l’image. Par conséquent, nous vous déconseillons d’utiliser ces API pour les images dans les scénarios suivants :
- Lorsque les images contiennent du contenu potentiellement sensible et des descriptions inexactes peuvent être controversées, telles que des drapeaux, des cartes, des globes, des symboles culturels ou des symboles religieux.
- Lorsque des descriptions précises sont essentielles, comme pour les conseils médicaux ou le diagnostic, le contenu juridique ou les documents financiers.
Obtenir une description de texte à partir d’une image
L’API Description d’image prend une image, le type de description de texte souhaité (facultatif) et le niveau de modération de contenu que vous souhaitez utiliser (facultatif) pour vous protéger contre l’utilisation dangereuse.
L’exemple suivant montre comment obtenir une description de texte pour une image.
Remarque
L’image doit être un objet ImageBuffer
, car SoftwareBitmap
n’est pas prise en charge actuellement. Cet exemple montre comment convertir SoftwareBitmap
en ImageBuffer
.
Vérifiez que le modèle de Super-Résolution d'Images est disponible en appelant la méthode
ImageDescriptionGenerator.IsAvailable
, puis en attendant que la méthodeImageDescriptionGenerator.MakeAvailableAsync
retourne avec succès.Une fois le modèle de super-résolution d’images disponible, créez un objet
ImageDescriptionGenerator
pour le référencer.(Facultatif) Créez un objet
ContentFilterOptions
et spécifiez vos valeurs préférées. Si vous choisissez d’utiliser des valeurs par défaut, vous pouvez passer un objet Null.Obtenez la description de l’image (
LanguageModelResponse.Response
) en appelant la méthodeImageDescriptionGenerator.DescribeAsync
avec l’image d’origine, une énumération pour le type de description préféré (facultatif) et l’objetContentFilterOptions
(facultatif).
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.Management.Deployment;
using Microsoft.Windows.AI.Generative;
using Microsoft.Windows.AI.ContentModeration;
using Windows.Storage.StorageFile;
using Windows.Storage.Streams;
using Windows.Graphics.Imaging;
if (!ImageDescriptionGenerator.IsAvailable())
{
var result = await ImageDescriptionGenerator.MakeAvailableAsync();
if (result.Status != PackageDeploymentStatus.CompletedSuccess)
{
throw result.ExtendedError;
}
}
ImageDescriptionGenerator imageDescriptionGenerator = await ImageDescriptionGenerator.CreateAsync();
// Convert already available softwareBitmap to ImageBuffer.
ImageBuffer inputImage = ImageBuffer.CreateCopyFromBitmap(softwareBitmap);
// Create content moderation thresholds object.
ContentFilterOptions filterOptions = new ContentFilterOptions();
filterOptions.PromptMinSeverityLevelToBlock.ViolentContentSeverity = SeverityLevel.Medium;
filterOptions.ResponseMinSeverityLevelToBlock.ViolentContentSeverity = SeverityLevel.Medium;
// Get text description.
LanguageModelResponse languageModelResponse = await imageDescriptionGenerator.DescribeAsync(inputImage, ImageDescriptionScenario.Caption, filterOptions);
string response = languageModelResponse.Response;
#include <winrt/Microsoft.Graphics.Imaging.h>
#include <winrt/Microsoft.Windows.AI.ContentModeration.h>
#include <winrt/Microsoft.Windows.AI.Generative.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Graphics.Imaging.h>
#include <winrt/Windows.Storage.Streams.h>
#include <winrt/Windows.Storage.StorageFile.h>
using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Microsoft::Windows::AI::ContentModeration;
using namespace winrt::Microsoft::Windows::AI::Generative;
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::Graphics::Imaging;
using namespace winrt::Windows::Storage::Streams;
using namespace winrt::Windows::Storage::StorageFile;
if (!ImageDescriptionGenerator::IsAvailable())
{
winrt::PackageDeploymentResult result = ImageDescriptionGenerator::MakeAvailableAsync().get();
if (result.Status() != PackageDeploymentStatus::CompletedSuccess)
{
throw result.ExtendedError();
}
}
ImageDescriptionGenerator imageDescriptionGenerator = ImageDescriptionGenerator::CreateAsync().get();
// Convert already available softwareBitmap to ImageBuffer.
auto inputBuffer = ImageBuffer::CreateCopyFromBitmap(softwareBitmap);
// Create content moderation thresholds object.
ContentFilterOptions contentFilter{};
contentFilter.PromptMinSeverityLevelToBlock().ViolentContentSeverity(SeverityLevel::Medium);
contentFilter.ResponseMinSeverityLevelToBlock().ViolentContentSeverity(SeverityLevel::Medium);
// Get text description.
LanguageModelResponse languageModelResponse = imageDescriptionGenerator.DescribeAsync(inputImage, ImageDescriptionScenario::Caption, contentFilter).get();
string text = languageModelResponse.Response();
Que puis-je faire avec la segmentation d’images ?
La segmentation d’image peut être utilisée pour identifier des objets spécifiques dans une image. Le modèle prend à la fois une image et un objet « hints » et retourne un masque de l’objet identifié.
Les indicateurs peuvent être fournis via n’importe quelle combinaison des éléments suivants :
- Coordonnées pour les points qui appartiennent à ce que vous identifiez.
- Coordonnées pour les points qui n’appartiennent pas à ce que vous identifiez.
- Rectangle de coordonnées qui entoure ce que vous identifiez.
Plus vous fournissez d’indicateurs, plus le modèle peut être précis. Suivez ces consignes d'indications pour minimiser les résultats inexacts ou les erreurs.
- Évitez d’utiliser plusieurs rectangles dans un indicateur, car ils peuvent produire un masque incorrect.
- Évitez d’utiliser des points d’exclusion exclusivement sans inclure de points ou de rectangle.
- Ne spécifiez pas plus que le maximum pris en charge de 32 coordonnées (1 pour un point, 2 pour un rectangle), car cela renvoie une erreur.
Le masque retourné est au format grisscale-8 avec les pixels du masque pour l’objet identifié ayant une valeur de 255 (toutes les autres ayant une valeur de 0).
Identifier un objet dans une image
Les exemples suivants montrent comment identifier un objet dans une image. Les exemples supposent que vous disposez déjà d’un objet bitmap logiciel (softwareBitmap
) pour l’entrée.
Vérifiez que le modèle de segmentation d’image est disponible en appelant la méthode
IsAvailable
et en attendant que la méthodeMakeAvailableAsync
retourne correctement.Une fois le modèle de segmentation d’image disponible, créez un objet
ImageObjectExtractor
pour le référencer.Passez l’image à
ImageObjectExtractor.CreateWithSoftwareBitmapAsync
.Créez un objet
ImageObjectExtractorHint
. D’autres façons de créer un objet hint avec différentes entrées sont illustrées ultérieurement.Envoyez l’indicateur au modèle à l’aide de la méthode
GetSoftwareBitmapObjectMask
, qui retourne le résultat final.
using Microsoft.Windows.Imaging;
using Microsoft.Windows.Management.Deployment;
using Windows.Graphics.Imaging;
if (!ImageObjectExtractor.IsAvailable())
{
var result = await ImageObjectExtractor.MakeAvailableAsync();
if (result.Status != PackageDeploymentStatus.CompletedSuccess)
{
throw result.ExtendedError;
}
}
ImageObjectExtractor imageObjectExtractor = await ImageObjectExtractor.CreateWithSoftwareBitmapAsync(softwareBitmap);
ImageObjectExtractorHint hint = new ImageObjectExtractorHint{
includeRects: null,
includePoints:
new List<PointInt32> { new PointInt32(306, 212),
new PointInt32(216, 336)},
excludePoints: null};
SoftwareBitmap finalImage = imageObjectExtractor.GetSoftwareBitmapObjectMask(hint);
#include <winrt/Microsoft.Graphics.Imaging.h>
#include <winrt/Windows.Graphics.Imaging.h>
#include <winrt/Windows.Foundation.h>
using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Windows::Graphics::Imaging;
using namespace winrt::Windows::Foundation;
if (!ImageObjectExtractor::IsAvailable())
{
winrt::PackageDeploymentResult result = ImageObjectExtractor::MakeAvailableAsync().get();
if (result.Status() != PackageDeploymentStatus::CompletedSuccess)
{
throw result.ExtendedError();
}
}
ImageObjectExtractor imageObjectExtractor = ImageObjectExtractor::CreateWithSoftwareBitmapAsync(softwareBitmap).get();
ImageObjectExtractorHint hint(
{},
{
PointInt32{306, 212},
PointInt32{216, 336}
},
{}
);
SoftwareBitmap finalImage = imageObjectExtractor.GetSoftwareBitmapObjectMask(hint);
Spécifier des indicateurs avec des points inclus et exclus
Cet extrait de code montre comment utiliser des points inclus et exclus en tant qu’indicateurs.
ImageObjectExtractorHint hint(
includeRects: null,
includePoints:
new List<PointInt32> { new PointInt32(150, 90),
new PointInt32(216, 336),
new PointInt32(550, 330)},
excludePoints:
new List<PointInt32> { new PointInt32(306, 212) });
ImageObjectExtractorHint hint(
{},
{
PointInt32{150, 90},
PointInt32{216, 336},
PointInt32{550, 330}
},
{
PointInt32{306, 212}
}
);
Spécifier des indicateurs avec rectangle
Cet extrait de code montre comment utiliser un rectangle (RectInt32 est X, Y, Width, Height
) comme indicateur.
ImageObjectExtractorHint hint(
includeRects:
new List<RectInt32> {new RectInt32(370, 278, 285, 126)},
includePoints: null,
excludePoints: null );
ImageObjectExtractorHint hint(
{
RectInt32{370, 278, 285, 126}
},
{},
{}
);
Intelligence artificielle responsable
Ces API d’imagerie fournissent aux développeurs des modèles puissants et fiables pour la création d’applications avec des expériences d’INTELLIGENCE artificielle sécurisées et sécurisées. Nous avons utilisé une combinaison des étapes suivantes pour garantir que ces API d’imagerie sont fiables, sécurisées et générées de manière responsable. Nous vous recommandons de consulter les meilleures pratiques décrites dans développement d’IA responsable sur Windows lors de l’implémentation de fonctionnalités IA dans votre application.
- Test et évaluation approfondis de la qualité du modèle pour identifier et atténuer les risques potentiels.
- Déploiement incrémentiel des versions expérimentales de l’API d’imagerie. Après la dernière version expérimentale, le déploiement s’étend aux applications signées pour s’assurer que les analyses de programmes malveillants ont été appliquées aux applications avec des fonctionnalités de modèle local.
- Fournissez un modèle IA local pour la modération du contenu qui identifie et filtre le contenu dangereux dans la sortie générée par l’entrée et l’IA de toutes les API qui utilisent des modèles IA génératifs. Ce modèle de modération de contenu local est basé sur le modèle Azure AI Content Safety pour la modération de texte et fournit des performances similaires.
Important
Aucun système de sécurité du contenu n’est infaillible et des erreurs occasionnelles peuvent se produire. Nous vous recommandons donc d’intégrer des outils et pratiques supplémentaires d’IA responsable (RAI). Pour plus de détails, voir Développement responsable d'IA générative sous Windows.
Contenu connexe
- Développer des applications et des fonctionnalités d'intelligence artificielle responsable sur Windows
- Référence d’API pour les fonctionnalités d’imagerie basées sur l’IA dans le Kit de développement logiciel (SDK) d’application Windows
- Kit de développement logiciel (SDK) pour application Windows
- Notes de la dernière version pour le SDK d'application Windows