Megosztás:


Kép Objektum Kivonó

Az Image Object Extractor használatával azonosíthatja a képek adott objektumait. A modell egy képet és egy "tippeket" tartalmazó objektumot is használ, és visszaadja az azonosított objektum maszkját.

Az API részleteiért tekintse meg az AI képalkotó funkciók API referenciáját.

A tartalommoderálási részletekérdekében lásd: Tartalombiztonság generatív AI API-kkal.

Fontos

Csomagjegyzékre vonatkozó követelmények: A Windows AI képalkotó API-k használatához az alkalmazást MSIX-csomagként kell csomagolni, a systemAIModels képességet a Package.appxmanifest-ben deklarálva. Emellett győződjön meg arról, hogy a jegyzék attribútuma MaxVersionTested a Windows AI-funkciók megfelelő támogatásához egy újabb Windows-verzióra (például 10.0.26226.0 vagy újabbra) van állítva. A régebbi értékek használata "Alkalmazás által nem deklarált" hibákat okozhat a modell betöltésekor.

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

Tippek megadása

Az alábbiak bármelyik kombinációjával adhat tippeket:

  • Azoknak a pontoknak a koordinátái, amelyeket azonosítani próbál.
  • Olyan pontok koordinátái, amelyek nem tartoznak az ön által azonosított pontokhoz.
  • Egy koordináta téglalap, amely magában foglalja az ön által azonosított elemet.

Minél több tippet ad meg, annál pontosabb lehet a modell. A pontatlan eredmények és hibák minimalizálása érdekében kövesse ezeket a tippeket.

  • Ne használjon több téglalapot egy tippben, mert pontatlan maszkot hozhat létre.
  • Ne használjon kizáró pontokat kizárólag anélkül, hogy beillesztési pontokat vagy téglalapot használna.
  • Ne adjon meg többet, mint a támogatott legfeljebb 32 koordinátát (1 pont, téglalap esetén 2), mert ez hibát ad vissza.

A visszaadott maszk szürkeárnyalatos-8 formátumú, és az azonosított objektum maszkjának képpontjai 255-ös értékkel rendelkeznek (minden másnak 0 az értéke).

Példa képobjektum-kinyerőre

Az alábbi példák egy objektum képen belüli azonosításának módjait mutatják be. A példák feltételezik, hogy már rendelkezik szoftveres bitképobjektummal (softwareBitmap) a bemenethez.

  1. A GetReadyState metódus meghívásával és a EnsureReadyAsync metódus sikeres visszatérésére várva győződjön meg arról, hogy a Képobjektum-kinyerő modell elérhető.

  2. Miután elérhető a Képobjektum-kinyerő modell, hozzon létre egy ImageObjectExtractor objektumot, hogy hivatkozzon rá.

  3. Adja át a képet a CreateWithSoftwareBitmapAsyncnek.

  4. Hozzon létre egy ImageObjectExtractorHint objektumot. A különböző bemenetekkel rendelkező tippobjektumok létrehozásának egyéb módjait később bemutatjuk.

  5. Küldje el a tippet a modellnek a GetSoftwareBitmapObjectMask metódussal, amely a végeredményt adja vissza.

using Microsoft.Graphics.Imaging;
using Microsoft.Windows.AI;
using Microsoft.Windows.Management.Deployment;
using Windows.Graphics.Imaging;

if (ImageObjectExtractor.GetReadyState() == AIFeatureReadyState.NotReady) 
{
    var result = await ImageObjectExtractor.EnsureReadyAsync();
    if (result.Status != AIFeatureReadyResultState.Success)
    {
        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);

Tippek megadása belefoglalt és kizárt szempontokkal

Ez a kódrészlet bemutatja, hogyan használható mind a belefoglalt, mind a kizárt pontok tippként.

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

Tippek megadása téglalappal

Ez a kódrészlet bemutatja, hogyan használható egy téglalap (a RectInt32 X, Y, Width, Height) tippként.

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

Lásd még