Prise en main de l’imagerie IA dans le SDK d’applications Windows
Importante
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 de la chaîne expérimentale font l'objet de révisions approfondies et de changements radicaux 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 description de l’image ne sont pas disponibles en Chine continentale.
- Les applications autonomes 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.
Prerequisites
- Un PC Copilot+ de Qualcomm, Intel ou AMD.
- Les PC Copilot+ basés sur AMD ne prennent pas actuellement 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 à 8 fois la valeur 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.Graphics.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 ?
Importante
La description de l’image n’est actuellement pas disponible en Chine continentale.
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.
Note
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'image 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 une image et un objet « indice » et renvoie un masque de l'objet identifié.
Les indices peuvent être fournis à partir de n’importe quelle combinaison des éléments suivants :
- Des coordonnées de points qui font partie de ce que vous voulez identifier.
- Des coordonnées de points qui ne font pas partie de ce que vous voulez identifier.
- Un rectangle de coordonnées qui entoure ce que vous voulez identifier.
Plus vous fournissez d’indices, plus le modèle sera précis. Suivez ces consignes d'indications pour minimiser les résultats inexacts ou les erreurs.
- Évitez d’utiliser plusieurs rectangles dans un même indice, au risque que le masque créé ne perde en précision.
- Évitez d’utiliser uniquement des points exclus, sans aucun point inclus ni rectangle.
- Le nombre maximum de coordonnées prises en charge est de 32, à raison de 1 coordonnée pour un point et 2 pour un rectangle. Au-delà, un message d'erreur apparaît.
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.Graphics.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écifiez des indices, sous forme de points inclus et de points 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écifiez des indices sous forme de 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}
},
{},
{}
);
IA 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.
Importante
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 associé
- Développer des applications et des fonctionnalités d'intelligence artificielle responsable sur Windows
- API ref pour les fonctionnalités d'imagerie soutenues par l'IA dans le SDK d'applications Windows
- Kit de développement logiciel (SDK) pour application Windows
- Dernières notes de version pour le SDK d'applications Windows