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
- Úvod
- Označování osob
- Referenční schématu
- související témata
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
,bag
neboseq
.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>
Související témata
-
koncepční