Freigeben über


Personen Tagging– Übersicht

In diesem Thema werden das neue XMP-Schema (Extensible Metadata Platform) und die Windows 7-Fotoeigenschaft System.Photo.PeopleNames vorgestellt, die das Tagging von Personen in einem digitalen Foto ermöglicht. In diesem Thema wird auch erläutert, wie Sie die WIC-API (Windows Imaging Component) verwenden, um die Metadaten zu lesen und zu schreiben, die für das Tagging von Personen erforderlich sind.

Dieses Thema enthält folgende Abschnitte:

Voraussetzungen

Um dieses Thema zu verstehen, sollten Sie mit den WIC-Decoderschnittstellen und den zugehörigen COM-Komponenten (Component Object Model) vertraut sein, wie in der Übersicht über Windows-Imagingkomponenten beschrieben. Es hilft auch, allgemeine Kenntnisse mit Bildmetadaten, insbesondere XMP, zu haben.

Einführung

Microsoft hat ein neues XMP-Schema zum Markieren von Personen in einem digitalen Image erstellt. Dieses Schema ermöglicht es Anwendungen, die Namen und Speicherorte von Personen, die sich im Bild befinden, als Metadaten innerhalb des Images zu speichern. Zusätzlich zum neuen Schema ist die neue Fotoeigenschaft System.Photo.PeopleNames in Windows 7 verfügbar. Mit dieser neuen Eigenschaft können Anwendungen die namen der Person lesen, die in den Bildmetadaten gespeichert sind. WIC nutzt diese neuen Features, indem anwendungen das einfache Lesen und Schreiben von Personen ermöglichen, die Metadaten auf digitale Fotos markieren.

Personen Tagging

WIC stellt Anwendungsentwicklern COM-Komponenten zur Verfügung, die Bilddaten und Bildmetadaten lesen. Zum Lesen und Schreiben von Metadaten, z. B. dem neuen Feature zum Markieren von Personen, stellt WIC die Schnittstellen IWICMetadataQueryReader und IWICMetadataQueryWriter bereit. Mithilfe dieser Schnittstellen können Anwendungen die Metadatenabfragesprache verwenden, um Metadaten in die einzelnen Frames eines Bilds zu schreiben. Im folgenden Abschnitt wird das Lesen und Schreiben der Personentagungsmetadaten in die Metadaten eines Bilds mithilfe von WIC-Abfragelesern und -Autoren veranschaulicht.

Personen Namen

Ein Teil der Funktion zum Markieren von Personen ist die Möglichkeit, einfach eine Liste der Namen der personen abzurufen, die innerhalb des Bilds markiert sind. Dieser Teil des Features wird von den Metadatenhandlern System.Photo.PeopleNames und WIC unterstützt. Die IWICMetadataQueryReader-Schnittstelle in Verbindung mit der System.Photo.PeopleNames-Eigenschaft wird verwendet, um die Namen von Personen zu lesen, die in einem Bild identifiziert und in den Bildmetadaten gespeichert sind.

Das folgende Codebeispiel veranschaulicht einen Abfrageleser, der aus einem Bildrahmen abgerufen wird, um die Metadaten eines Bilds nach getaggten Namen der System.Photo.PeopleNames-Eigenschaft abzufragen.

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

Der Abfrageausdruck "System.Photo.PeopleNames" fragt den Frame nach der -Eigenschaft ab. Wenn die Metadaten zum Markieren von Personen vorhanden sind und die Namen von Personen enthalten, wird der PROPVARIANT-Wert auf VT_LPWSTR festgelegt, und der Datenwert enthält die Liste der markierten Namen. Weitere Informationen zum Lesen von Bildmetadaten finden Sie unter Übersicht über das Lesen und Schreiben von Bildmetadaten.

Das Abfragen nach dem Personennamen-Tag ist nur nützlich, wenn das Image tatsächlich die Metadaten zum Markieren von Personen enthält. Damit dies geschieht, muss es zuerst von einer Anwendung geschrieben worden sein. Verwenden Sie zum Schreiben der Personennamenmetadaten einen IWICMetadataQueryWriter und den expliziten XMP-Pfad der Metadaten. Im folgenden Codebeispiel wird die Verwendung eines Abfrageschreibers veranschaulicht, um einen Namen in den Abfragepfad zu schreiben.

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

Beachten Sie den Schritt, in dem die XMP-Struktur erstellt und unter MPRI:Regions/{ulong=0}festgelegt wird. Ohne diesen Schritt kann die WIC nicht ermitteln, wo sie PersonDisplayName sich später platzieren soll. Beachten Sie außerdem, dass der explizite Abfragepfad anstelle von System.Photo.PeopleNames verwendet wird, dessen Metadatenrichtlinie das Schreiben von Metadaten nicht unterstützt.

Personen Rechtecke

die Namen von Personen sind jedoch nur Teil der Funktion zum Markieren von Personen. Zusätzlich zum Speichern der Namen von Personen in den Metadaten unterstützt das Schema auch Regionsinformationen, die den spezifischen Bereich (ein Rechteck) identifizieren, den die Person im Bild zeigt.

Die Rechteckinformationen werden durch vier kommagetrennte Dezimalwerte wie "0.25, 0.25, 0.25, 0.25, 0.25" dargestellt. Die ersten beiden Werte geben die koordinate oben links an. die beiden letzten geben die Höhe und Breite des Rechtecks an. Die Dimensionen des Bilds zum Definieren von Personenrechtecken werden auf 1 normalisiert. Dies bedeutet, dass im Beispiel "0.25, 0.25, 0.25, 0.25" das Rechteck 1/4 des Abstands von oben und 1/4 des Abstands von links vom Bild beginnt. Sowohl die Höhe als auch die Breite des Rechtecks sind 1/4 der Größe der jeweiligen Bilddimensionen.

Die Rechteckinformationen, die Personen identifizieren, werden auf die gleiche Weise geschrieben, wie die Namen von Personen in derselben Struktur geschrieben werden. Verwenden Sie zum Schreiben der Rechteckmetadaten einen IWICMetadataQueryWriter und den expliziten XMP-Pfad der Metadaten. Das folgende Codebeispiel setzt das vorherige Beispiel fort und fügt den Metadaten des Bilds ein Rechteck hinzu, das "John Doe" darstellt. Beachten Sie, dass es denselben {ulong=0} Index verwendet, um dieses Rechteck "John Doe" zuzuordnen.

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

Schemareferenz

Die Microsoft XMP-Schemas für Personentagging definieren eine Reihe von Eigenschaften zum Taggen von Personen in digitalen Fotos.

In den folgenden Abschnitten werden die Schemadefinitionen bereitgestellt, die für das Tagging von Personen erforderlich sind. Die Schemadefinitionen verwenden nach Möglichkeit die Konventionen der XMP-Spezifikationen (Extensible Metadata Platform) von Adobe. Die Schemadefinitionen in diesem Thema zeigen den URI (Uniform Resource Identifier) des XML-Namespaces, der das Schema und das bevorzugte Schemanamespacepräfix identifiziert, gefolgt von einer Tabelle, die alle für das Schema definierten Eigenschaften auflistet. Jede Tabelle enthält die folgenden Spalten:

  • Eigenschaft : Der Name der Eigenschaft, einschließlich des präfixierten Namespaces.

  • Werttyp : Der Werttyp der Eigenschaft. Die Personentaggingunterstützungsschemas verwenden nach Möglichkeit die XMP-Werttypen, einschließlich Datum und Text. Arraytypen sind dem Containertyp vorangestellt: alt, bagoder seq.

  • Kategorie : Schemaeigenschaften sind intern oder extern:

    • Interne Metadaten müssen von der Anwendung festgelegt werden.

    • Externe Metadaten müssen vom Benutzer festgelegt werden und sind unabhängig vom Inhalt des Dokuments.

  • Beschreibung : Die Beschreibung der Eigenschaft.

Microsoft Photo 1.2 Schema

Das Microsoft Photo 1.2-Schema stellt eine Reihe von Eigenschaften für Bildbereiche bereit.

  • Der Schemanamespace-URI ist https://ns.microsoft.com/photo/1.2/.
  • Das bevorzugte Schemanamespacepräfix ist MP.
Eigenschaft Werttyp Category BESCHREIBUNG
MP:RegionInfo Regioninfo Intern erforderlich : Speichert den Stamm der Metadaten zum Markieren von Personen. Weitere Informationen finden Sie im Folgenden im Abschnitt Microsoft Photo RegionInfo Schema.

 

Microsoft Photo RegionInfo-Schema

Das Microsoft Photo RegionInfo 1.2-Schema stellt eine Reihe von Eigenschaften für Regionsinformationen bereit.

  • Der Schemanamespace-URI ist https://ns.microsoft.com/photo/1.2/t/RegionInfo#.
  • Das bevorzugte Schemanamespacepräfix ist MPRI.
Eigenschaft Werttyp Category BESCHREIBUNG
MPRI:DateRegionsValid Date Extern optional : Datum, an dem die letzte Region erstellt wurde.
MPRI:Regionen Bag Region Extern erforderlich : Speichert die Personenmarkierungsregionen. Weitere Informationen finden Sie im folgenden Abschnitt zum Schema des Microsoft-Fotobereichs.

 

Microsoft-Fotobereichsschema

Das Microsoft Photo Region 1.2-Schema stellt eine Reihe von Eigenschaften für Bildbereiche bereit.

  • Der Schemanamespace-URI ist https://ns.microsoft.com/photo/1.2/t/Region#.
  • Das bevorzugte Schemanamespacepräfix ist MPReg.
MPReg:Property Werttyp Category BESCHREIBUNG
MPReg:PersonDisplayName Text Extern erforderlich : Speichert den Namen der Person im angegebenen Rechteck.
MPReg:Rechteck Text Extern optional : Speichert das Rechteck, das die Person im Foto identifiziert. Das Rechteck wird als vier kommagetrennte Dezimalwerte gespeichert. Die ersten beiden Werte geben die obere linke Koordinate an; Die letzten beiden geben die Höhe und Breite des Rechtecks an. Die Dezimalwerte müssen auf 1 normalisiert werden.
MPReg:PersonEmailDigest Text Extern optional : Speichert den SHA-1-verschlüsselten Nachrichtenhash der Live-E-Mail-Adresse der Person.
MPReg:PersonLiveIdCID Text Extern optional : Speichert die signierte Dezimaldarstellung der Live-CID der Person, eine 64-Bit-Ganzzahl, die eine Live-Identität öffentlich identifiziert.

 

Beispielmetadaten

Im Folgenden ist eine Darstellung der XMP-Metadaten für die Personenmarkierung dargestellt.

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

Konzept

Übersicht über die Windows-Imageerstellungskomponente

Übersicht über WIC-Metadaten

Übersicht über das Lesen und Schreiben von Bildmetadaten

Übersicht über die Metadaten-Abfragesprache