Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Deskripsi Gambar saat ini tidak tersedia di Tiongkok.
Anda dapat menggunakan API Deskripsi Gambar untuk menghasilkan berbagai jenis deskripsi teks untuk gambar.
Untuk detail API, lihat API ref untuk fitur pencitraan AI.
Untuk detail moderasi konten, lihat Keamanan konten dengan API AI generatif.
Penting
Persyaratan Manifes Paket: Untuk menggunakan API pencitraan Windows AI, aplikasi Anda harus dikemas sebagai paket MSIX dengan kemampuan yang systemAIModels dideklarasikan dalam .Package.appxmanifest Selain itu, pastikan atribut manifes MaxVersionTested Anda diatur ke versi Windows terbaru (misalnya, 10.0.26226.0 atau yang lebih baru) untuk mendukung fitur Windows AI dengan benar. Menggunakan nilai yang lebih lama dapat menyebabkan kesalahan "Tidak dideklarasikan oleh aplikasi" saat memuat model.
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
</Dependencies>
Jenis deskripsi
Jenis deskripsi teks berikut ini didukung:
- Singkat - Menyediakan deskripsi yang cocok untuk bagan dan diagram.
- Terperinci - Memberikan deskripsi panjang.
- Diagram - Memberikan deskripsi singkat yang cocok untuk keterangan gambar. Pengaturan bawaan jika tidak ada nilai yang ditentukan.
- Dapat diakses - Memberikan deskripsi panjang dengan detail yang ditujukan untuk pengguna dengan kebutuhan aksesibilitas.
Keterbatasan
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.
Contoh Deskripsi Gambar
Contoh berikut menunjukkan cara mendapatkan deskripsi teks untuk gambar berdasarkan jenis deskripsi yang ditentukan (opsional) dan tingkat moderasi konten (opsional).
Nota
Gambar harus berupa objek ImageBuffer karena SoftwareBitmap saat ini tidak didukung (contoh ini menunjukkan cara mengonversi SoftwareBitmap ke ImageBuffer).
Pastikan model Deskripsi Gambar tersedia dengan memanggil metode GetReadyState lalu menunggu metode EnsureReadyAsync berhasil dikembalikan.
Setelah model Deskripsi Gambar tersedia, buat objek ImageDescriptionGenerator untuk mereferensikannya.
(Opsional) Buat objek ContentFilterOptions dan tentukan nilai pilihan Anda. Jika Anda memilih untuk menggunakan nilai default, Anda dapat meneruskan objek bertipe null.
Dapatkan deskripsi gambar (LanguageModelResponse.Response) dengan memanggil metode DescribeAsync yang menentukan gambar asli, ImageDescriptionKind (nilai opsional untuk jenis deskripsi pilihan), dan objek ContentFilterOptions (opsional).
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.Management.Deployment;
using Microsoft.Windows.AI;
using Microsoft.Windows.AI.ContentModeration;
using Windows.Storage.StorageFile;
using Windows.Storage.Streams;
using Windows.Graphics.Imaging;
if (ImageDescriptionGenerator.GetReadyState() == AIFeatureReadyState.NotReady)
{
var result = await ImageDescriptionGenerator.EnsureReadyAsync();
if (result.Status != AIFeatureReadyResultState.Success)
{
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.Imaging.h>
#include <winrt/Microsoft.Windows.AI.ContentSafety.h>
#include <winrt/Microsoft.Windows.AI.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;
using namespace winrt::Microsoft::Windows::AI::ContentSafety;
using namespace winrt::Microsoft::Windows::AI::Imaging;
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::GetReadyState() == AIFeatureReadyState::NotReady)
{
auto loadResult = ImageDescriptionGenerator::EnsureReadyAsync().get();
if (loadResult.Status() != AIFeatureReadyResultState::Success)
{
throw winrt::hresult_error(loadResult.ExtendedError());
}
}
ImageDescriptionGenerator imageDescriptionGenerator =
ImageDescriptionGenerator::CreateAsync().get();
// Convert already available softwareBitmap to ImageBuffer.
auto inputBuffer = Microsoft::Graphics::Imaging::ImageBuffer::CreateForSoftwareBitmap(softwareBitmap);
// Create content moderation thresholds object.
ContentFilterOptions contentFilter{};
contentFilter.PromptMaxAllowedSeverityLevel().Violent(SeverityLevel::Medium);
contentFilter.ResponseMaxAllowedSeverityLevel().Violent(SeverityLevel::Medium);
// Get text description.
auto response = imageDescriptionGenerator.DescribeAsync(inputBuffer, ImageDescriptionKind::BriefDescription, contentFilter).get();
string text = response.Description();