Sdílet prostřednictvím


Přehled označování osob

Toto téma představuje nové schéma XMP (Extensible Metadata Platform) a vlastnost fotografie systému Windows 7 System.Photo.PeopleNames, která umožňuje označování jednotlivců v digitální fotce. Toto téma také popisuje, jak používat rozhraní API wic (Windows Imaging Component) ke čtení i zápisu metadat potřebných pro označování osob.

Toto téma obsahuje následující části.

Požadavky

Abyste pochopili toto téma, měli byste být obeznámeni s rozhraními dekodéru WIC a jeho souvisejícími komponentami modelu COM (Component Object Model), jak je popsáno v Přehled komponent Windows Imaging. Pomáhá také obecně znát metadata obrázků, zejména XMP.

Úvod

Microsoft vytvořil nové schéma XMP pro označování lidí v rámci digitálního obrázku. Toto schéma umožňuje aplikacím ukládat jména a umístění jednotlivců, kteří jsou na obrázku jako metadata v rámci obrázku. Kromě nového schématu je nová vlastnost fotografie System.Photo.PeopleNames dostupná ve Windows 7. Tato nová vlastnost umožňuje aplikacím číst názvy jednotlivých uživatelů uložených v metadatech obrázků. Technologie WIC využívá tyto nové funkce tím, že umožňuje aplikacím snadno číst a zapisovat metadata značek lidí do digitálních fotek.

Označování osob

WIC poskytuje vývojářům aplikací COM komponenty, které čtou data obrazů i metadata obrazů. Pro čtení a zápis metadat, jako je například nová funkce označování osob, poskytuje WIC rozhraní IWICMetadataQueryReader a IWICMetadataQueryWriter rozhraní. Tato rozhraní umožňují aplikacím používat dotazovací jazyk metadat k zápisu metadat do jednotlivých snímků obrázku. Následující část ukazuje, jak číst a zapisovat metadata značek osob do metadat obrázku pomocí čtečky a zapisovačů dotazů WIC.

Jména lidí

Součástí funkce označování osob je možnost jednoduše získat seznam jmen osob označených na obrázku. Tato část funkce je podporována obslužnými rutinami metadat System.Photo.PeopleNames a obslužnými rutinami metadat WIC. Rozhraní IWICMetadataQueryReader spolu s vlastností System.Photo.PeopleNames slouží ke čtení jmen osob identifikovaných na obrázku a uložených v metadatech obrázku.

Následující příklad kódu ukazuje, jak získat čtečku pro dotazování metadat z rámečku obrázku, abyste mohli zjistit označené názvy u vlastnosti System.Photo.PeopleNames.

// Not shown: image decoding, retrieving an image frame. 
...
PROPVARIANT value;
IWICMetadataQueryReader *pQueryReader = NULL;
...
// Get the query reader.
if (SUCCEEDED(hr))
{
    hr = pFrameDecode->GetMetadataQueryReader(&pQueryReader);
}

// Query for the System.Photo.PeopleNames property.
if (SUCCEEDED(hr))
{
    // Get the property metadata by property name.
    hr = pQueryReader->GetMetadataByName(L"System.Photo.PeopleNames", &value);
}

Výraz dotazu „System.Photo.PeopleNames“ vyhledává rámec pro určení vlastnosti. Pokud metadata označování osob existují a obsahují jména lidí, bude hodnota PROPVARIANT nastavena na VT_LPWSTR a datová hodnota bude obsahovat seznam označených jmen. Další informace o čtení metadat obrázků najdete v tématu Přehled čtení a zápisu metadat obrázků.

Dotazování na značku jmen osob je užitečné jenom v případě, že obrázek skutečně obsahuje metadata označování osob. Aby k tomu mohlo dojít, musí ji aplikace nejprve napsat. Pokud chcete napsat metadata jmen osob, použijte IWICMetadataQueryWriter a explicitní cestu XMP metadat. Následující příklad kódu ukazuje použití zapisovače dotazu k zápisu názvu do cesty dotazu.

// Not shown: image encoding, retrieving/creating the image frame,
// creating the IWICImagingFactory 
...
IWICImagingFactory *pFactory = NULL;
IWICMetadataQueryWriter *pQueryWriter = NULL;
...
// Get the query writer from the image frame.
if (SUCCEEDED(hr))
{
    hr = pFrameEncode->GetMetadataQueryWriter(&pQueryWriter);
}

// A query writer specifically for this person's XMP struct
IWICMetadataQueryWriter *pXMPStructQueryWriter = NULL;

// Create a query writer specifically for an XMP Struct
hr = pFactory->CreateQueryWriter(
    GUID_MetadataFormatXMPStruct,
    NULL,
    &pXMPStructQueryWriter
    );

// Create a variant representing the structure created above
PROPVARIANT xmpStruct;
PropVariantInit(&xmpStruct);

// VT_UNKNOWN indicates that we're setting a COM object, in this case a XMPStruct
// which will hold the name and rectangle
xmpStruct.vt = VT_UNKNOWN; 
xmpStruct.punkVal = pXMPStructQueryWriter;

if(SUCCEEDED(hr))
{
    // WIC will automatically create the xmp base, the RegionInfo struct, and the Regions
    // bag (an unordered array) but structs within that bag need to be explicitly created.
    // The {ulong=0} in the query means to insert the new struct at the start of the bag,
    // {} could also be used to insert at the end of the bag.
    hr = pQueryWriter->SetMetadataByName(
        L"/xmp/<xmpstruct>MP:RegionInfo/<xmpbag>MPRI:Regions/{ulong=0}",
        &xmpStruct
        );
}

// Set up the PROPVARIANT with the name information
PROPVARIANT personName;
PropVariantInit(&personName);
personName.vt = VT_LPWSTR;
personName.pwszVal = L"John Doe";

if(SUCCEEDED(hr))
{
    // Set the name metadata
    hr = pQueryWriter->SetMetadataByName(
        L"/xmp/MP:RegionInfo/MPRI:Regions/{ulong=0}/MPReg:PersonDisplayName",
        &personName
        );  
}

Všimněte si kroku sestavení struktury XMP a jeho nastavení v MPRI:Regions/{ulong=0}. Bez tohoto kroku nemůže WIC určit, kam PersonDisplayName umístit později. Všimněte si také, že explicitní cesta dotazu se používá místo System.Photo.PeopleNames, jejíž zásady metadat nepodporují zápis metadat.

Lidské obdélníky

Jména lidí jsou ale jenom součástí funkce označování osob. Kromě ukládání jmen lidí do metadat podporuje schéma také informace o oblasti, které identifikují konkrétní oblast (obdélník), která osobu zobrazuje na obrázku.

Informace o obdélníku jsou reprezentovány čtyřmi desetinnými hodnotami oddělenými čárkami, například "0,25, 0,25, 0,25, 0,25". První dvě hodnoty určují souřadnici vlevo nahoře; Poslední dva určují výšku a šířku obdélníku. Rozměry obrázku pro účely definování obdélníků kolem osob jsou normalizovány na 1, což znamená, že v příkladu "0,25, 0,25, 0,25, 0,25" začíná obdélník 1/4 vzdálenosti od horního a 1/4 vzdálenosti od levého okraje obrázku. Výška a šířka obdélníku jsou 1/4 velikosti odpovídajících rozměrů obrázku.

Obdélníkové informace, které identifikují jednotlivce, se zapisují stejným způsobem jako jména lidí ve stejné struktuře. K zápisu metadat obdélníku použijte IWICMetadataQueryWriter a explicitní cestu XMP metadat. Následující příklad kódu pokračuje v předchozím příkladu a přidá obdélník představující John Doe do metadat obrázku. Všimněte si, že k přidružení tohoto obdélníku k johnu Doe používá stejný index {ulong=0}.

// Set up the PROPVARIANT with the rectangle information
PROPVARIANT rectangle;
PropVariantInit(&rectangle);
rectangle.vt = VT_LPWSTR;
rectangle.pwszVal = L"0.0,0.0,0.25,0.25";

if(SUCCEEDED(hr))
{
    // Set the rectangle metadata
    hr = pQueryWriter->SetMetadataByName(
        L"/xmp/MP:RegionInfo/MPRI:Regions/{ulong=0}/MPReg:Rectangle",
        &rectangle
        );
}

Referenční schéma

Schémata Microsoft XMP pro označování osob definují sadu vlastností pro označování jednotlivců v digitálních fotografiích.

Následující části obsahují definice schématu potřebné pro označování osob. Kdykoli je to možné, definice schématu používají konvence poskytované specifikacemi Extensible Metadata Platform (XMP) společnosti Adobe . Definice schématu v tomto tématu zobrazují identifikátor URI (Uniform Resource Identifier) oboru názvů XML, který identifikuje schéma a upřednostňovanou předponu oboru názvů schématu, za kterou následuje tabulka, která obsahuje všechny vlastnosti definované pro schéma. Každá tabulka má následující sloupce:

  • Vlastnost – název vlastnosti, včetně upřednostňované předpony jmenného prostoru.

  • Typ hodnoty – typ hodnoty vlastnosti. Schémata podporující označování osob používají typy hodnot XMP, kdykoli je to možné, včetně data a textu. Typům polí předchází typ kontejneru: alt, bagnebo seq.

  • kategorie – vlastnosti schématu jsou interní nebo externí:

    • Aplikace musí nastavit interní metadata.

    • Externí metadata musí nastavit uživatel a je nezávislá na obsahu dokumentu.

  • Popis – popis vlastnosti.

Schéma Microsoft Photo 1.2

Schéma Microsoft Photo 1.2 poskytuje sadu vlastností pro oblasti obrázků.

  • Identifikátor URI oboru názvů schématu je https://ns.microsoft.com/photo/1.2/.
  • Upřednostňovaná předpona oboru názvů schématu je MP.
Vlastnost Typ hodnoty Kategorie Popis
MP:RegionInfo RegionInfo Interní požadované: Ukládá kořen metadat označování osob. Podívejte se na část Schéma Microsoft Photo RegionInfo, která následuje.

 

Schéma Microsoft Photo RegionInfo

Schéma Microsoft Photo RegionInfo 1.2 poskytuje sadu vlastností pro informace o oblasti.

  • Identifikátor URI oboru názvů schématu je https://ns.microsoft.com/photo/1.2/t/RegionInfo#.
  • Upřednostňovaná předpona oboru názvů schématu je MPRI.
Nemovitost Typ hodnoty Kategorie Popis
MPRI:DateRegionsValid Datum Externí nepovinný: Datum vytvoření poslední oblasti.
MPRI:Regions taška Region Externí požadované: Ukládá oblasti označování osob. Podívejte se na část Schéma oblasti fotek společnosti Microsoft, která následuje.

 

Schéma aplikace Microsoft Photo Region

Schéma Microsoft Photo Region 1.2 poskytuje sadu vlastností pro oblasti obrázků.

  • Identifikátor URI oboru názvů schématu je https://ns.microsoft.com/photo/1.2/t/Region#.
  • Upřednostňovaná předpona oboru názvů schématu je MPReg.
MPReg:Vlastnost Typ hodnoty Kategorie Popis
MPReg:Jméno osoby pro zobrazení Text Externí požadované: Uloží jméno osoby v daném obdélníku.
MPReg:Rectangle Text Externí volitelné: Uloží obdélník, který identifikuje osobu na fotce. Obdélník je uložen jako čtyři desetinné hodnoty oddělené čárkami. První dvě hodnoty určují levou horní souřadnici; Poslední dva určují výšku a šířku obdélníku. Desetinné hodnoty musí být normalizovány na 1.
MPReg:SeznamE-mailůOsoby Text Externí volitelné: Ukládá šifrovanou hash zprávy SHA-1 e-mailové adresy osoby na Live.
MPReg:PersonLiveIdCID Text Externí nepovinný :Ukládá podepsanou desetinnou reprezentaci Live CID osoby, 64bitového celého čísla, které veřejně identifikuje Live identitu.

 

Ukázková metadata

Následuje reprezentace metadat XMP pro označování osob.

<rdf:Description rdf:about="" xmlns:MP="https://ns.microsoft.com/photo/1.2/">
<MP:RegionInfo> 
<rdf:Description xmlns:MPRI="https://ns.microsoft.com/photo/1.2/t/RegionInfo#">
   <MPRI:Regions> 
       <rdf:Bag> 
          <rdf:li> 
       <rdf:Description xmlns:MPReg="https://ns.microsoft.com/photo/1.2/t/Region#"> 
           <MPReg:Rectangle>0.790650, 0.441734, 0.209350, 0.279133
           </MPReg:Rectangle>
           <MPReg:PersonDisplayName>John Doe</MPReg:PersonDisplayName> 
           <MPReg:PersonEmailDigest>2FD4E1C67A2D28FCED849EE1BB76E7391B93EB13</MPReg:PersonEmailDigest> 
           <MPReg:PersonLiveIdCID>1234567890123456789</MPReg:PersonLiveIdCID> 
       </rdf:Description> 
         </rdf:li> 
         <rdf:li>
             <rdf:Description xmlns:MPReg="https://ns.microsoft.com/photo/1.2/t/Region#">
                  <MPReg:Rectangle>0.222656, 0.302083, 0.378906, 0.505208</MPReg:Rectangle> 
                  <MPReg:PersonDisplayName>Jane Doe</MPReg:PersonDisplayName> 
              </rdf:Description> 
         </rdf:li> 
<!-- Addition Regions --> ... 
<rdf:li>...
</rdf:li> 
</rdf:Bag> 
</MPRI:Regions> </rdf:Description> </MP:RegionInfo> </rdf:Description>

koncepční

Přehled komponent Windows Imaging

přehled metadat WIC

Přehled čtení a zápisu metadat obrázků

Přehled jazyka Metadata Query