Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows AI Foundry'deki görüntüleme özellikleri aşağıdaki özellikleri destekler:
- Görüntü Süper Çözünürlüğü: Bir görüntüyü ölçeklendirme ve keskinleştirme.
- Resim Açıklaması: Bir görüntüyü açıklayan metin oluşturma.
- Görüntü Segmentasyonu: Görüntü içindeki nesneleri tanımlama.
- Nesne Silme: Görüntüden nesneleri kaldırma.
API ayrıntıları için bkz. Yapay zeka görüntüleme özellikleri için API başvurusu.
İçerik denetimi ayrıntıları için bkz. Üretken yapay zeka API'leriyle içerik güvenliği.
Önemli
Aşağıda, şu anda desteklendiği Windows AI özelliklerinin ve Windows Uygulama SDK'sı sürümünün listesi yer alır.
Sürüm 1.8 Deneysel (1.8.0-deneysel1) - Nesne Silme, Phi Silika, Phi Silika için LoRA ince ayarı, Konuşma Özetlemesi (Metin Zekası)
Özel önizleme - AnlamSal Arama
Sürüm 1.7.1 (1.7.250401001) - Diğer tüm API'ler
Bu API'ler yalnızca 7 Mayıs güncelleştirmesini alan Windows Insider Preview (WIP) cihazlarında çalışır. 28-29 Mayıs'ta WIP olmayan cihazlara isteğe bağlı bir güncelleştirme ve ardından 10 Haziran güncelleştirmesi yayımlanacaktır. Bu güncelleştirme, Windows AI API'lerinin çalışması için gereken yapay zeka modellerini de beraberinde getirecektir. Bu güncelleştirmeler, Windows AI API'lerini kullanan tüm uygulamaların çalışma zamanında paket kimliği verilene kadar bunu yapamamasını da gerektirir.
Görüntü Süper Çözünürlüğü ile ne yapabilirim?
Görüntü Süper Çözünürlük API'leri, görüntü keskinleştirme ve ölçeklendirmeyi etkinleştirir.
Daha yüksek ölçek faktörleri yapaylık oluşturup görüntü doğruluğunu bozabileceği için ölçeklendirme en fazla 8 kat ile sınırlandırılmıştır. Son genişlik veya yükseklik özgün değerlerinin 8 katını aşıyorsa, bir özel durum oluşturulur.
Görüntü Ölçeklendiricisi hakkında daha fazla ayrıntı
Aşağıdaki örnekte, mevcut bir yazılım bit eşlem görüntüsünün (targetWidth
) ölçeğini (targetHeight
, softwareBitmap
) değiştirme ve ImageScaler
nesnesi kullanarak görüntü keskinliğini geliştirme (görüntüyü ölçeklendirmeden netliği geliştirmek için mevcut görüntü genişliğini ve yüksekliğini belirtmeniz yeterlidir) gösterilmektedir.
ImageScaler.GetReadyState yöntemini çağırıp ImageScaler.EnsureReadyAsync yönteminin başarıyla döndürülmesini bekleyerek Görüntü Süper Çözünürlük modelinin kullanılabilir olduğundan emin olun.
Görüntü Süper Çözünürlük modeli kullanılabilir duruma geldikten sonra, referans almak için bir ImageScaler nesnesi oluşturun.
ScaleSoftwareBitmap yöntemini kullanarak mevcut görüntüyü ve istenen genişlik ve yüksekliği modele geçirerek mevcut görüntünün keskinleştirilmiş ve ölçeklendirilmiş bir sürümünü alın.
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.Management.Deployment;
using Microsoft.Windows.AI;
using Windows.Graphics.Imaging;
if (ImageScaler.GetReadyState() == AIFeatureReadyState.EnsureNeeded)
{
var result = await ImageScaler.EnsureReadyAsync();
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/Microsoft.Windows.AI.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Graphics.Imaging.h>
using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Microsoft::Windows::AI;
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::Graphics::Imaging;
if (ImageScaler::GetReadyState() == AIFeatureReadyState::NotReady)
{
auto loadResult = ImageScaler::EnsureReadyAsync().get();
if (loadResult.Status() != AIFeatureReadyResultState::Success)
{
throw winrt::hresult_error(loadResult.ExtendedError());
}
}
int targetWidth = 100;
int targetHeight = 100;
ImageScaler imageScaler = ImageScaler::CreateAsync().get();
Windows::Graphics::Imaging::SoftwareBitmap finalImage =
imageScaler.ScaleSoftwareBitmap(softwareBitmap, targetWidth, targetHeight);
Resim Açıklaması ile ne yapabilirim?
Önemli
Resim Açıklaması şu anda Çin'de kullanılamıyor.
Görüntü Açıklaması API'leri, bir görüntü için çeşitli türlerde metin açıklamaları oluşturma olanağı sağlar.
Aşağıdaki metin açıklaması türleri desteklenir:
- erişilebilirlik - Erişilebilirlik gereksinimleri olan kullanıcılara yönelik ayrıntıları içeren uzun bir açıklama sağlar.
- Resim Yazısı - Resim yazısı için uygun kısa bir açıklama sağlar. Değer belirtilmezse varsayılan değerdir.
- DetailedNarration - Uzun bir açıklama sağlar.
- OfficeCharts - Grafikler ve diyagramlar için uygun bir açıklama sağlar.
Bu API'ler Machine Learning (ML) modellerini kullandığından, metnin görüntüyü doğru şekilde açıklamadığı durumlarda zaman zaman hatalar oluşabilir. Bu nedenle, aşağıdaki senaryolarda görüntüler için bu API'lerin kullanılmasını önermeyiz:
- Görüntülerin hassas olabilecek içerik içerdiği yerlerde ve bayraklar, haritalar, küreler, kültürel simgeler veya dini simgeler gibi yanlış açıklamalar tartışmalı olabilir.
- Tıbbi tavsiye veya tanılama, yasal içerik veya finansal belgeler gibi doğru açıklamalar kritik olduğunda.
Resimden metin açıklaması alma
Görüntü Açıklaması API'sinde bir görüntü, istenen metin açıklaması türü (isteğe bağlı) ve zararlı kullanıma karşı korumak için kullanmak istediğiniz içerik denetimi düzeyi (isteğe bağlı) alınır.
Aşağıdaki örnekte, bir resim için metin açıklamasının nasıl alınacakları gösterilmektedir.
Dikkat
SoftwareBitmap şu anda desteklenmediğinden görüntünün bir ImageBuffer nesnesi olması gerekir. Bu örnekte SoftwareBitmap'inImageBuffer'a nasıl dönüştürüldüğü gösterilmektedir.
ImageDescriptionGenerator.GetReadyState yöntemini çağırıp ImageDescriptionGenerator.EnsureReadyAsync yönteminin başarıyla döndürülmesini bekleyerek Görüntü Süper Çözünürlük modelinin kullanılabilir olduğundan emin olun.
Görüntü Süper Çözünürlük modeli kullanılabilir olduğunda, ona başvurmak için bir ImageDescriptionGenerator nesnesi oluşturun.
(İsteğe bağlı) ContentFilterOptions nesnesi oluşturun ve tercih ettiğiniz değerleri belirtin. Varsayılan değerleri kullanmayı seçerseniz, null bir nesne geçirebilirsiniz.
ImageDescriptionGenerator.DescribeAsync yöntemini, özgün görüntüyü, isteğe bağlı olarak tercih edilen açıklama türü için bir numaralandırmayı ve ContentFilterOptions nesnesini kullanarak çağırarak görüntü açıklamasını (LanguageModelResponse.Response) alın.
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.EnsureNeeded)
{
var result = await ImageDescriptionGenerator.EnsureReadyAsync();
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.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();
auto loadResult = ImageScaler::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(bitmap); (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(inputImage, ImageDescriptionKind::BriefDescription, contentFilter).get();
string text = response.Description();
Görüntü Segmentasyonu ile ne yapabilirim?
Görüntü Segmentasyonu, bir görüntüdeki belirli nesneleri tanımlamak için kullanılabilir. Model hem bir görüntü hem de "ipuçları" nesnesi alır ve tanımlanan nesnenin maskesini geri döndürür.
İpuçları, aşağıdakilerin herhangi bir bileşimi aracılığıyla sağlanabilir:
- Tanımladığınız noktaya ait noktaların koordinatları.
- Tanımladığınız şeye ait olmayan noktaların koordinatları.
- Tanımladığınız şeyi kapsayan koordinat dikdörtgeni.
Ne kadar çok ipucu sağlarsanız, model o kadar kesin olabilir. Yanlış sonuçları veya hataları en aza indirmek için bu ipucu yönergelerini izleyin.
- Doğru olmayan bir maske üretebilecekleri için ipucu olarak birden çok dikdörtgen kullanmaktan kaçının.
- Hariç tutma noktalarını, dahil etme noktaları veya bir dikdörtgen olmadan kullanmaktan kaçının.
- Desteklenen en fazla 32 koordinattan (bir nokta için 1, dikdörtgen için 2) daha fazlasını belirtmeyin çünkü bu bir hata döndürür.
Döndürülen maske gri tonlamalı-8 biçimindedir ve tanımlanan nesnenin pikselleri 255 değerine sahiptir (diğer tümlerinde 0 değeri vardır).
Görüntü içindeki bir nesneyi tanımlama
Aşağıdaki örneklerde, görüntü içindeki bir nesneyi tanımlamanın yolları gösterilmektedir. Örneklerde, giriş için zaten bir yazılım bit eşlem nesnesine (softwareBitmap
) sahip olduğunuz varsayılır.
GetReadyState yöntemini çağırıp EnsureReadyAsync yönteminin başarıyla döndürülmesini bekleyerek Görüntü Kesimleme modelinin kullanılabilir olduğundan emin olun.
Görüntü Segmentasyonu modeli kullanılabilir olduğunda, referans olarak kullanmak üzere bir ImageObjectExtractor nesnesi oluşturun.
Görüntüyü ImageObjectExtractor.CreateWithSoftwareBitmapAsync'e geçirin.
ImageObjectExtractorHint nesnesi oluşturun. Farklı girişlere sahip bir ipucu nesnesi oluşturmanın diğer yolları daha sonra gösterilir.
Son sonucu döndüren GetSoftwareBitmapObjectMask yöntemini kullanarak modele ipucunu gönderin.
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.AI;
using Microsoft.Windows.Management.Deployment;
using Windows.Graphics.Imaging;
if (ImageObjectExtractor::GetReadyState() == AIFeatureReadyState.EnsureNeeded)
{
var result = await ImageObjectExtractor.EnsureReadyAsync();
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/Microsoft.Windows.AI.Imaging.h>
#include <winrt/Windows.Graphics.Imaging.h>
#include <winrt/Windows.Foundation.h>
using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Microsoft::Windows::AI.Imaging;
using namespace winrt::Windows::Graphics::Imaging;
using namespace winrt::Windows::Foundation;
if (ImageObjectExtractor::GetReadyState() == AIFeatureReadyState::NotReady)
{
auto loadResult = ImageObjectExtractor::EnsureReadyAsync().get();
if (loadResult.Status() != AIFeatureReadyResultState::Success)
{
throw winrt::hresult_error(loadResult.ExtendedError());
}
}
ImageObjectExtractor imageObjectExtractor = ImageObjectExtractor::CreateWithSoftwareBitmapAsync(softwareBitmap).get();
ImageObjectExtractorHint hint(
{},
{
Windows::Graphics::PointInt32{306, 212},
Windows::Graphics::PointInt32{216, 336}
},
{}
);
Windows::Graphics::Imaging::SoftwareBitmap finalImage = imageObjectExtractor.GetSoftwareBitmapObjectMask(hint);
Dahil edilen ve dışlanan noktalara sahip ipuçları belirtme
Bu kod parçacığı, ipuçları olarak hem dahil edilen hem de dışlanan noktaların nasıl kullanılacağını gösterir.
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}
}
);
Dikdörtgenle ipuçları belirtme
Bu kod parçacığı, ipucu olarak dikdörtgenin (RectInt32 X, Y, Width, Height
) nasıl kullanılacağını gösterir.
ImageObjectExtractorHint hint(
includeRects:
new List<RectInt32> {new RectInt32(370, 278, 285, 126)},
includePoints: null,
excludePoints: null );
ImageObjectExtractorHint hint(
{
RectInt32{370, 278, 285, 126}
},
{},
{}
);
Nesne Silme ile ne yapabilirim?
Nesne Silme, resimlerden nesneleri kaldırmak için kullanılabilir. Model, kaldırılacak nesneyi belirten hem görüntü hem de gri tonlamalı bir maske alır, maskelenmiş alanı görüntüden siler ve silinen alanı görüntü arka planıyla değiştirir.
Görüntüden İstenmeyen Nesneleri Kaldırma
Aşağıdaki örnekte bir nesnenin görüntüden nasıl kaldırılacağı gösterilmektedir. Örnekte hem görüntü hem de maske için yazılım bit eşlem nesneleriniz (softwareBitmap
) olduğu varsayılır. Maske, kaldırılacak alanın her pikseli 255 ve diğer tüm piksellerin 0 olarak ayarlandığı Gri8 biçiminde olmalıdır.
- GetReadyState yöntemini çağırıp EnsureReadyAsync yönteminin başarıyla döndürülmesini bekleyerek Görüntü Kesimleme modelinin kullanılabilir olduğundan emin olun.
- Nesne Silme modeli kullanılabilir olduğunda, başvurmak için bir ImageObjectRemover nesnesi oluşturun.
- Son olarak, son sonucu döndüren RemoveFromSoftwareBitmap yöntemini kullanarak görüntüyü ve maskeyi modele gönderin.
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.AI;
using Microsoft.Windows.Management.Deployment;
using Windows.Graphics.Imaging;
if (ImageObjectRemover::GetReadyState() == AIFeatureReadyState.EnsureNeeded)
{
var result = await ImageObjectRemover.EnsureReadyAsync();
if (result.Status != PackageDeploymentStatus.CompletedSuccess)
{
throw result.ExtendedError;
}
}
ImageObjectRemover imageObjectRemover = await ImageObjectRemover.CreateAsync();
SoftwareBitmap finalImage = imageObjectRemover.RemoveFromSoftwareBitmap(imageBitmap, maskBitmap); // Insert your own imagebitmap and maskbitmap
#include <winrt/Microsoft.Graphics.Imaging.h>
#include <winrt/Microsoft.Windows.AI.Imaging.h>
#include <winrt/Windows.Graphics.Imaging.h>
#include <winrt/Windows.Foundation.h>
using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Microsoft::Windows::AI.Imaging;
using namespace winrt::Windows::Graphics::Imaging;
using namespace winrt::Windows::Foundation;
if (ImageObjectRemover::GetReadyState() == AIFeatureReadyState::NotReady)
{
auto loadResult = ImageObjectRemover::EnsureReadyAsync().get();
if (loadResult.Status() != AIFeatureReadyResultState::Success)
{
throw winrt::hresult_error(loadResult.ExtendedError());
}
}
ImageObjectRemover imageObjectRemover = ImageObjectRemover::CreateAsync().get();
// Insert your own imagebitmap and maskbitmap
Windows::Graphics::Imaging::SoftwareBitmap buffer =
imageObjectRemover.RemoveFromSoftwareBitmap(imageBitmap, maskBitmap);
Sorumlu yapay zeka
Bu görüntüleme API'lerinin güvenilir, güvenli ve sorumlu bir şekilde oluşturulduğundan emin olmak için aşağıdaki adımların bir bileşimini kullandık. Uygulamanızda yapay zeka özelliklerini uygularken Windows Sorumlu Üretken Yapay Zeka Geliştirme bölümünde açıklanan en iyi yöntemleri gözden geçirmenizi öneririz.