Översikt över persontaggning
Det här avsnittet introducerar det nya XMP-schemat (Extensible Metadata Platform) och windows 7-fotoegenskapen System.Photo.PeopleNames som möjliggör taggning av individer i ett digitalt foto. Det här avsnittet beskriver också hur du använder Windows Imaging Component (WIC) API för att både läsa och skriva de metadata som behövs för persontaggning.
Det här avsnittet innehåller följande avsnitt.
Förutsättningar
För att förstå det här avsnittet bör du känna till gränssnitt för WIC-avkodning och relaterade komponenter i Component Object Model (COM), enligt beskrivningen i Översikt över Windows Imaging-komponenten. Det hjälper också att ha en allmän förtrogenhet med bildmetadata, särskilt XMP.
Introduktion
Microsoft har skapat ett nytt XMP-schema för att tagga personer i en digital bild. Det här schemat gör det möjligt för program att lagra namn och platser för personer som finns i bilden som metadata i bilden. Förutom det nya schemat är den nya fotoegenskapen System.Photo.PeopleNames tillgänglig i Windows 7. Med den här nya egenskapen kan program läsa individens namn som lagras i bildmetadata. WIC använder dessa nya funktioner genom att göra det möjligt för program att enkelt läsa och skriva personer som taggar metadata till digitala foton.
Personmärkning
WIC ger programutvecklare COM-komponenter som läser bilddata samt bildmetadata. WIC tillhandahåller gränssnitten IWICMetadataQueryReader och IWICMetadataQueryWriter för att läsa och skriva metadata, såsom den nya personer taggningsfunktionen. Dessa gränssnitt gör det möjligt för program att använda frågespråket metadata för att skriva metadata till de enskilda bildrutorna i en bild. Följande avsnitt visar hur du läser och skriver metadata för persontaggning till en bilds metadata med hjälp av WIC-frågeläsare och skribenter.
Namn på personer
En del av funktionen för persontaggning är möjligheten att helt enkelt hämta en lista över namnen på de personer som taggas i bilden. Den här delen av funktionen stöds av System.Photo.PeopleNames och WIC:s metadatahanterare. Gränssnittet IWICMetadataQueryReader, tillsammans med egenskapen System.Photo.PeopleNames, används för att läsa namnen på personer som identifieras i en bild och lagras i bildmetadata.
I följande kodexempel visas en frågeläsare som hämtats från en bildram för att fråga en bilds metadata efter taggade namn på egenskapen 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);
}
Frågeuttrycket "System.Photo.PeopleNames" frågar efter egenskapens ram. Om metadata för persontaggning finns och innehåller personers namn anges värdet PROPVARIANT till VT_LPWSTR och datavärdet innehåller listan med taggade namn. Mer information om hur du läser bildmetadata finns i Översikt över att läsa och skriva bildmetadata.
Att fråga efter taggen personnamn är bara användbart om bilden faktiskt innehåller metadata för persontaggning. För att detta ska inträffa måste ett program först ha skrivit det. Om du vill skriva metadata för personnamn använder du en IWICMetadataQueryWriter- och den explicita XMP-sökvägen för metadata. Följande kodexempel visar hur du använder en frågeskrivare för att skriva ett namn till frågesökvägen.
// 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
);
}
Observera steget för att konstruera XMP-strukturen och ställa in den under MPRI:Regions/{ulong=0}
. Utan det här steget kan WIC inte identifiera var PersonDisplayName
ska placeras senare. Observera också att den explicita frågesökvägen används i stället för System.Photo.PeopleNames, vars metadataprincip inte stöder skrivning av metadata.
Människorektanglar
Personers namn är dock bara en del av funktionen för persontaggning. Förutom att lagra personers namn i metadata stöder schemat även regioninformation som identifierar det specifika området (en rektangel) som personen visas i bilden.
Rektangelinformationen representeras av fyra kommaavgränsade decimalvärden, till exempel "0,25, 0,25, 0,25, 0,25". De två första värdena anger koordinaten överst till vänster. de sista två anger rektangelns höjd och bredd. Bildens dimensioner för att definiera personers rektanglar normaliseras till 1, vilket innebär att rektangeln i exemplet "0.25, 0.25, 0.25, 0.25" startar 1/4 av avståndet uppifrån och 1/4 av avståndet från vänster om bilden. Både rektangelns höjd och bredd är 1/4 av storleken på respektive bilddimension.
Rektangelinformationen som identifierar individer skrivs på samma sätt som personers namn skrivs inom samma struktur. Om du vill skriva rektangelmetadata ska du använda en IWICMetadataQueryWriter- och den explicita XMP-sökvägen för metadata. Följande kodexempel fortsätter i föregående exempel och lägger till en rektangel som representerar "John Doe" i bildens metadata. Observera att den använder samma {ulong=0}
index för att associera den här rektangeln med "John Doe".
// 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
);
}
Schemareferens
Microsoft XMP-scheman för personer som taggar definierar en uppsättning egenskaper för att tagga individer i digitala foton.
Följande avsnitt innehåller de schemadefinitioner som behövs för persontaggning. När det är möjligt använder schemadefinitionerna de konventioner som tillhandahålls av Adobes XMP-specifikationer (Extensible Metadata Platform). Schemadefinitionerna i det här avsnittet visar XML-namnområdets enhetliga resursidentifierare (URI) som identifierar schemat och det föredragna schemanamnområdesprefixet följt av en tabell som visar alla egenskaper som definierats för schemat. Varje tabell har följande kolumner:
Egenskap – Namnet på egenskapen, inklusive det föredragna namnområdesprefixet.
Värdetyp – egenskapens värdetyp. Stödscheman för persontaggning använder XMP-värdetyperna när det är möjligt, inklusive Datum och Text. Matristyper föregås av containertypen:
alt
,bag
ellerseq
.Kategori – Schemaegenskaper är interna eller externa:
Interna metadata måste anges av programmet.
Externa metadata måste anges av användaren och är oberoende av innehållet i dokumentet.
Description – Beskrivningen av fastigheten.
Microsoft Photo 1.2-schema
Microsoft Photo 1.2-schemat innehåller en uppsättning egenskaper för bildregioner.
- Schemanamnområdes-URI:n är
https://ns.microsoft.com/photo/1.2/
. - Det föredragna schemanamnområdesprefixet är
MP
.
Egenskap | Värdetyp | Kategori | Beskrivning |
---|---|---|---|
MP:RegionInformation | RegionInfo | Inre | krävs : Lagrar roten för metadata för persontaggning. Se avsnittet Microsoft Photo RegionInfo Schema som följer. |
Microsoft Photo RegionInfo-schema
Microsoft Photo RegionInfo 1.2-schemat innehåller en uppsättning egenskaper för regioninformation.
- Schemanamnområdes-URI:n är
https://ns.microsoft.com/photo/1.2/t/RegionInfo#
. - Det föredragna schemanamnområdesprefixet är
MPRI
.
Egenskap | Värdetyp | Kategori | Beskrivning |
---|---|---|---|
MPRI:DateRegionsValid | Datum | Extern | valfritt : Datum då den senaste regionen skapades. |
MPRI:Regions | väska område | Extern | krävs : Lagrar de personer som taggar regioner. Se avsnittet Microsoft Photo Region Schema som följer. |
Microsoft Foto Regionschema
Microsoft Photo Region 1.2-schemat innehåller en uppsättning egenskaper för bildregioner.
- Schemanamnområdes-URI:n är
https://ns.microsoft.com/photo/1.2/t/Region#
. - Det föredragna schemanamnområdesprefixet är
MPReg
.
MPReg:Egenskap | Värdetyp | Kategori | Beskrivning |
---|---|---|---|
MPReg:PersonDisplayName | Text | Extern | krävs : Lagrar namnet på personen i den angivna rektangeln. |
MPReg:Rektangel | Text | Extern | valfri : Lagrar rektangeln som identifierar personen i fotot. Rektangeln lagras som fyra kommaavgränsade decimalvärden. De två första värdena anger den övre vänstra koordinaten. de sista två anger rektangelns höjd och bredd. Decimalvärdena måste normaliseras till 1. |
MPReg:PersonEpostSammanställning | Text | Extern | valfritt : Lagrar SHA-1-krypterad meddelandehash för personens Live-e-postadress. |
MPReg:PersonLiveIdCID | Text | Extern | valfri :Lagrar den signerade decimalrepresentationen av personens Live CID, ett 64-bitars heltal som offentligt identifierar en liveidentitet. |
Exempelmetadata
Följande är en representation av XMP-metadata för persontaggning.
<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>
Relaterade ämnen
-
konceptuell
-
Översikt över WIC-metadata