Aracılığıyla paylaş


Windows Uygulama SDK'sında yapay zeka görüntülemeyi kullanmaya başlama

Önemli

Windows Uygulama SDK'sının en son deneysel kanal sürümünde kullanılabilir.

Windows Uygulama SDK'sı deneysel kanalı, geliştirmenin erken aşamalarında API'leri ve özellikleri içerir. Deneysel kanaldaki tüm API'ler kapsamlı düzeltmelere ve hataya neden olan değişikliklere tabidir ve herhangi bir zamanda sonraki sürümlerden kaldırılabilir. Deneysel özellikler üretim ortamlarında kullanılmak üzere desteklenmez ve bunları kullanan uygulamalar Microsoft Store'da yayımlanamaz.

  • Bağımsız uygulamalar desteklenmez.

Görselleştirme özellikleri, yapay zeka (AI) destekli olarak aşağıdaki yetenekleri destekleyen bir dizi API aracılığıyla Windows Uygulama SDK'sı tarafından sağlanır.

  • Görüntü Süper Çözünürlüğü: görüntüleri ölçeklendirme ve keskinleştirme
  • Resim Açıklaması: görüntüyü açıklayan metin oluşturma
  • Görüntü Segmentasyonu: görüntü içindeki nesneleri tanımlama

Windows Uygulama SDK'sında yapay zeka görüntüleme özellikleri için API ayrıntılarına,API referansına bakın.

içerik denetimi ayrıntıları için bkz. Üretici yapay zeka API'leri ile içerik güvenliği.

Bahşiş

Windows Uygulama SDK'sı GitHub deposunda (başlığa Imaging dahil) yeni bir Sorun oluşturarak veya mevcutbir soruna yanıt vererek bu API'ler ve işlevleri hakkında geri bildirim sağlayın.

Önkoşullar

Görüntü Süper Çözünürlüğü ile ne yapabilirim?

Windows Uygulama SDK'sında Görüntü Süper Çözünürlük API'leri görüntü keskinleştirme ve ölçeklendirmeyi etkinleştirir.

Ölçeklendirme, en fazla 8 kat faktörle sınırlıdır. Daha yüksek ölçek faktörleri görüntüde bozulmalara yol açabilir ve doğruluğunu tehlikeye atabilir. Son genişlik veya yükseklik özgün değerlerinin 8 katını aşıyorsa, bir özel durum oluşturulur.

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.

  1. ImageScaler.IsAvailable yöntemini çağırıp ImageScaler.MakeAvailableAsync 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.

  2. Görüntü Süper Çözünürlük modeli kullanılabilir duruma geldikten sonra, referans almak için bir ImageScaler nesnesi oluşturun.

  3. ScaleSoftwareBitmap yöntemini kullanarak mevcut görüntüyü ve istenen genişlik ve yüksekliği modele geçirerek var olan 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 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);

Resim Açıklaması ile ne yapabilirim?

Önemli

Resim Açıklaması şu anda Çin anakarasında kullanılamıyor.

Windows Uygulama SDK'sı'ndaki 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

ImageBuffer şu anda desteklenmediğinden görüntünün bir SoftwareBitmap nesnesi olması gerekir. Bu örnekte, SoftwareBitmapImageBuffernasıl dönüştürüldüğü gösterilmektedir.

  1. ImageDescriptionGenerator.IsAvailable yöntemini çağırıp ImageDescriptionGenerator.MakeAvailableAsync 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.

  2. Görüntü Süper Çözünürlük modeli kullanılabilir duruma geldikten sonra, referans almak için bir ImageDescriptionGenerator nesnesi oluşturun.

  3. (İsteğe bağlı) bir ContentFilterOptions nesnesi oluşturun ve tercih ettiğiniz değerleri belirtin. Varsayılan değerleri kullanmayı seçerseniz, null bir nesne geçirebilirsiniz.

  4. Orijinal görüntü, tercih edilen açıklama türü için bir numaralandırma (isteğe bağlı) ve LanguageModelResponse.Response nesnesi (isteğe bağlı) ile ImageDescriptionGenerator.DescribeAsync yöntemini çağırarak görüntü açıklamasını (ContentFilterOptions) alın.

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

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.

  1. IsAvailable yöntemini çağırıp MakeAvailableAsync yönteminin başarıyla döndürülmesini bekleyerek Görüntü Segmentasyonu modelinin kullanılabilir olduğundan emin olun.

  2. Görüntü Segmentasyonu modeli kullanılabilir olduğunda, referans almak için bir ImageObjectExtractor nesnesi oluşturun.

  3. Görüntüyü ImageObjectExtractor.CreateWithSoftwareBitmapAsync'a geçirin.

  4. bir ImageObjectExtractorHint nesnesi oluşturun. Farklı girişlere sahip bir ipucu nesnesi oluşturmanın diğer yolları daha sonra gösterilir.

  5. son sonucu döndüren GetSoftwareBitmapObjectMask yöntemini kullanarak ipucunu modele gönderin.

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

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

Sorumlu yapay zeka

Bu görüntüleme API'leri, geliştiricilere güvenli ve güvenli yapay zeka deneyimleriyle uygulama oluşturmak için güçlü, güvenilir modeller sağlar. 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.

  • Olası riskleri belirlemek ve azaltmak için model kalitesinin kapsamlı bir şekilde test edilmesi ve değerlendirilmesi.
  • Görüntüleme API'sinin deneysel sürümlerinin artımlı dağıtımı. Son deneysel sürümün ardından dağıtım, yerel model özelliklerine sahip uygulamalara kötü amaçlı yazılım taramalarının uygulandığından emin olmak için imzalı uygulamalara genişletilecektir.
  • Oluşturucu yapay zeka modellerini kullanan api'lerin hem girişinde hem de yapay zeka tarafından oluşturulan çıkışında zararlı içeriği tanımlayan ve filtreleyen içerik denetimi için yerel bir yapay zeka modeli sağlayın. Bu yerel içerik denetleme modeli, metin denetimi için Azure AI content Safety modelini temel alır ve benzer performans sağlar.

Önemli

İçerik güvenliği sistemi hatalı değildir ve ara sıra hatalar oluşabilir, bu nedenle ek Sorumlu Yapay Zeka (RAI) araçlarını ve uygulamalarını tümleştirmenizi öneririz. Daha fazla ayrıntı için bkz. Windows'da Sorumlu Üretken Yapay Zeka Geliştirme.

  • Windows'da Sorumlu Üretken Yapay Zeka Uygulamaları ve Özellikleri Geliştirme
  • Windows App SDK'de yapay zeka destekli görüntüleme özellikleri için API referansı
  • Windows Uygulama SDK'sı
  • Windows Uygulama SDK'sının en son sürüm notları