Bagikan melalui


Mulai menggunakan pencitraan AI di SDK Aplikasi Windows

Penting

Tersedia dalam rilis saluran eksperimental terbaru dari Windows App SDK.

Saluran eksperimental Windows App SDK mencakup API dan fitur pada tahap awal pengembangan. Semua API di saluran eksperimental tunduk pada revisi yang luas dan melanggar perubahan dan dapat dihapus dari rilis berikutnya kapan saja. Fitur eksperimental tidak didukung untuk digunakan di lingkungan produksi dan aplikasi yang menggunakannya tidak dapat diterbitkan ke Microsoft Store.

  • Fitur Deskripsi Gambar tidak tersedia di Tiongkok daratan.
  • Aplikasi mandiri tidak didukung.

Fitur pencitraan disediakan oleh Windows App SDK melalui serangkaian API, didukung oleh kecerdasan buatan (AI), yang mendukung kemampuan berikut:

  • Resolusi Gambar Super: memperbesar dan mempertajam gambar
  • Deskripsi Gambar: menghasilkan teks yang menjelaskan gambar
  • Segmentasi Gambar: mengidentifikasi objek dalam gambar

Untuk detail API , lihat API ref untuk fitur pencitraan AI di Windows App SDK.

Untuk detail moderasi konten , lihat keamanan konten dengan API AI generatif.

Tip

Berikan umpan balik mengenai API dan fungsionalitasnya dengan membuat Issue baru di repositori GitHub Windows App SDK (sertakan Pencitraan dalam judul) atau dengan menanggapi issue yang ada.

Prasyarat

Apa yang bisa saya lakukan dengan Image Super Resolution?

API Super Resolusi Gambar di dalam Windows App SDK memungkinkan penajaman dan penskalakan gambar.

Penskalaan terbatas pada faktor maksimum 8x. Faktor skala yang lebih tinggi dapat memperkenalkan artefak dan membahayakan akurasi gambar. Jika lebar akhir atau tinggi lebih besar dari 8x nilai aslinya, pengecualian akan dilemparkan.

Contoh berikut menunjukkan cara mengubah skala (targetWidth, targetHeight) dari gambar bitmap perangkat lunak yang ada (softwareBitmap) dan meningkatkan ketajaman gambar (untuk meningkatkan ketajaman tanpa menskalakan gambar, cukup tentukan lebar dan tinggi gambar yang ada) menggunakan objek ImageScaler.

  1. Pastikan model Resolusi Super Gambar tersedia dengan memanggil metode ImageScaler.IsAvailable lalu menunggu metode ImageScaler.MakeAvailableAsync berhasil dikembalikan.

  2. Setelah model Resolusi Super Gambar tersedia, buat objek ImageScaler untuk mereferensikannya.

  3. Dapatkan versi yang dipertajam dan diskalakan dari gambar yang ada dengan meneruskan gambar yang ada dan lebar dan tinggi yang diinginkan ke model menggunakan metode 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);

Apa yang bisa saya lakukan dengan Deskripsi Gambar?

Penting

Deskripsi Gambar saat ini tidak tersedia di Tiongkok daratan.

API Deskripsi Gambar di Windows App SDK menyediakan kemampuan untuk menghasilkan berbagai jenis deskripsi teks untuk gambar.

Jenis deskripsi teks berikut ini didukung:

  • Aksesibilitas - Memberikan deskripsi panjang dengan detail yang ditujukan untuk pengguna dengan kebutuhan aksesibilitas.
  • Keterangan - Memberikan deskripsi singkat yang cocok untuk keterangan gambar. Pengaturan bawaan jika tidak ada nilai yang ditentukan.
  • DetailedNarration - Memberikan deskripsi panjang.
  • OfficeCharts - Menyediakan deskripsi yang cocok untuk bagan dan diagram.

Karena API ini menggunakan model Pembelajaran Mesin (ML), kesalahan sesekali dapat terjadi di mana teks tidak menggambarkan gambar dengan benar. Oleh karena itu, kami tidak menyarankan penggunaan API ini untuk gambar dalam skenario berikut:

  • Di mana gambar berisi konten yang berpotensi sensitif dan deskripsi yang tidak akurat bisa kontroversial, seperti bendera, peta, glob, simbol budaya, atau simbol agama.
  • Ketika deskripsi yang akurat sangat penting, seperti untuk saran medis atau diagnosis, konten hukum, atau dokumen keuangan.

Mendapatkan deskripsi teks dari gambar

API Deskripsi Gambar mengambil gambar, jenis deskripsi teks yang diinginkan (opsional), dan tingkat moderasi konten yang ingin Anda gunakan (opsional) untuk melindungi dari penggunaan berbahaya.

Contoh berikut menunjukkan cara mendapatkan deskripsi teks untuk gambar.

Catatan

Gambar harus menjadi objek ImageBuffer karena SoftwareBitmap saat ini tidak didukung. Contoh ini menunjukkan cara mengonversi SoftwareBitmap ke ImageBuffer.

  1. Pastikan model Resolusi Super Gambar tersedia dengan memanggil metode ImageDescriptionGenerator.IsAvailable lalu menunggu metode ImageDescriptionGenerator.MakeAvailableAsync berhasil dikembalikan.

  2. Setelah model Resolusi Super Gambar tersedia, buat objek ImageDescriptionGenerator untuk mereferensikannya.

  3. (Opsional) Buat objek ContentFilterOptions dan tentukan nilai pilihan Anda. Jika Anda memilih untuk menggunakan nilai default, Anda dapat meneruskan objek bertipe null.

  4. Dapatkan deskripsi gambar (LanguageModelResponse.Response) dengan memanggil metode ImageDescriptionGenerator.DescribeAsync dengan gambar asli, enum untuk jenis deskripsi pilihan (opsional), dan objek ContentFilterOptions (opsional).

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();

Apa yang dapat saya lakukan dengan Segmentasi Gambar?

Segmentasi Gambar dapat digunakan untuk mengidentifikasi objek tertentu dalam gambar. Model mengambil gambar dan objek "petunjuk" dan mengembalikan mask objek yang diidentifikasi.

Petunjuk dapat disediakan melalui kombinasi apa pun dari yang berikut:

  • Koordinat untuk titik yang termasuk dalam apa yang Anda identifikasi.
  • Koordinat untuk titik yang bukan milik apa yang Anda identifikasi.
  • Persegi panjang koordinat yang mencakup apa yang Anda identifikasi.

Semakin banyak petunjuk yang Anda berikan, semakin tepat modelnya. Ikuti panduan petunjuk ini untuk meminimalkan hasil atau kesalahan yang tidak akurat.

  • Hindari menggunakan beberapa persegi panjang dengan petunjuk karena dapat menghasilkan masker yang tidak akurat.
  • Hindari menggunakan titik pengecualian secara eksklusif tanpa menyertakan titik atau persegi panjang.
  • Jangan tentukan lebih dari maksimum 32 koordinat yang didukung (1 untuk titik, 2 untuk persegi panjang) karena ini akan mengembalikan kesalahan.

Masker yang dikembalikan dalam format greyscale-8 dengan piksel masker untuk objek yang diidentifikasi memiliki nilai 255 (yang lainnya memiliki nilai 0).

Mengidentifikasi objek dalam gambar

Contoh berikut menunjukkan cara untuk mengidentifikasi objek dalam gambar. Contoh mengasumsikan bahwa Anda sudah memiliki objek bitmap perangkat lunak (softwareBitmap) untuk input.

  1. Pastikan model Segmentasi Gambar tersedia dengan memanggil metode IsAvailable dan menunggu metode MakeAvailableAsync berhasil dikembalikan.

  2. Setelah model Segmentasi Gambar tersedia, buat objek ImageObjectExtractor untuk mereferensikannya.

  3. Teruskan gambar ke ImageObjectExtractor.CreateWithSoftwareBitmapAsync.

  4. Buat objek ImageObjectExtractorHint. Cara lain untuk membuat objek petunjuk dengan input yang berbeda ditunjukkan nanti.

  5. Kirim petunjuk ke model menggunakan metode GetSoftwareBitmapObjectMask, yang mengembalikan hasil akhir.

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);

Tentukan petunjuk dengan poin yang disertakan dan dikecualikan

Cuplikan kode ini menunjukkan cara menggunakan poin yang disertakan dan dikecualikan sebagai petunjuk.

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}
    }
);

Tentukan petunjuk dengan persegi panjang

Cuplikan kode ini menunjukkan cara menggunakan persegi panjang (RectInt32 X, Y, Width, Height) sebagai petunjuk.

ImageObjectExtractorHint hint(
    includeRects: 
        new List<RectInt32> {new RectInt32(370, 278, 285, 126)},
    includePoints: null,
    excludePoints: null ); 
ImageObjectExtractorHint hint(
    { 
        RectInt32{370, 278, 285, 126}
    }, 
    {},
    {}
);

AI yang bertanggung jawab

API pencitraan ini memberi pengembang model yang kuat dan dapat dipercaya untuk membangun aplikasi dengan pengalaman AI yang aman dan aman. Kami telah menggunakan kombinasi langkah-langkah berikut untuk memastikan API pencitraan ini dapat dipercaya, aman, dan dibangun secara bertanggung jawab. Sebaiknya tinjau praktik terbaik yang dijelaskan dalam Pengembangan AI Generatif yang Bertanggung Jawab di Windows saat menerapkan fitur AI di aplikasi Anda.

  • Pengujian dan evaluasi menyeluruh dari kualitas model untuk mengidentifikasi dan mengurangi potensi risiko.
  • Peluncuran inkremental dari rilis eksperimental API pencitraan. Setelah rilis eksperimental akhir, peluncuran akan diperluas ke aplikasi yang ditandatangani untuk memastikan bahwa pemindaian malware telah diterapkan ke aplikasi dengan kemampuan model lokal.
  • Berikan model AI lokal untuk moderasi konten yang mengidentifikasi dan memfilter konten berbahaya dalam input dan output yang dihasilkan AI dari API apa pun yang menggunakan model AI generatif. Model kon mode tenda rasi lokal ini didasarkan pada model Azure AI Content Safety untuk moderasi teks dan memberikan performa yang sama.

Penting

Tidak ada sistem keamanan konten yang sempurna dan kesalahan sesekali dapat terjadi, jadi kami sarankan untuk mengintegrasikan alat dan praktik Responsible AI (RAI) tambahan. Untuk detail selengkapnya, lihat Pengembangan AI Generatif yang Bertanggung Jawab di Windows.