Vue d’ensemble de l’étiquetage Personnes

Cette rubrique présente le nouveau schéma XMP (Extensible Metadata Platform) et la propriété de photo Windows 7 System.Photo.PeopleNames qui permet l’étiquetage d’individus dans une photo numérique. Cette rubrique explique également comment utiliser l’API Windows Imaging Component (WIC) pour lire et écrire les métadonnées nécessaires à l’étiquetage des personnes.

Cette rubrique contient les sections suivantes.

Prérequis

Pour comprendre cette rubrique, vous devez être familiarisé avec les interfaces du décodeur WIC et ses composants COM (Component Object Model) associés, comme décrit dans la Vue d’ensemble du composant d’acquisition d’images Windows. Il est également utile d’avoir une connaissance générale des métadonnées d’imagerie, en particulier XMP.

Introduction

Microsoft a créé un nouveau schéma XMP pour l’étiquetage des personnes dans une image numérique. Ce schéma permet aux applications de stocker les noms et les emplacements des personnes qui se trouvent dans l’image en tant que métadonnées dans l’image. En plus du nouveau schéma, la nouvelle propriété photo System.Photo.PeopleNames est disponible dans Windows 7. Cette nouvelle propriété permet aux applications de lire les noms de l’individu stockés dans les métadonnées de l’image. WIC utilise ces nouvelles fonctionnalités en permettant aux applications de lire et d’écrire facilement des personnes qui étiquetent des métadonnées sur des photos numériques.

étiquetage Personnes

WIC fournit aux développeurs d’applications des composants COM qui lisent les données d’image ainsi que les métadonnées d’image. Pour la lecture et l’écriture de métadonnées, telles que la fonctionnalité d’étiquetage des nouvelles personnes, WIC fournit les interfaces IWICMetadataQueryReader et IWICMetadataQueryWriter . Ces interfaces permettent aux applications d’utiliser le langage de requête de métadonnées pour écrire des métadonnées dans les trames individuelles d’une image. La section suivante montre comment lire et écrire les métadonnées d’étiquetage de personnes dans les métadonnées d’une image à l’aide de lecteurs de requêtes wic et de rédacteurs.

noms de Personnes

Une partie de la fonctionnalité d’étiquetage des personnes est la possibilité d’obtenir simplement une liste des noms des personnes étiquetées dans l’image. Cette partie de la fonctionnalité est prise en charge par les gestionnaires de métadonnées de System.Photo.PeopleNames et WIC. L’interface IWICMetadataQueryReader, conjointement avec la propriété System.Photo.PeopleNames, permet de lire les noms des personnes identifiées dans une image et stockées dans les métadonnées de l’image.

L’exemple de code suivant illustre un lecteur de requête obtenu à partir d’un frame d’image pour interroger les métadonnées d’une image pour les noms balisés de la propriété 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);
}

L’expression de requête « System.Photo.PeopleNames » interroge le cadre pour la propriété . Si les métadonnées d’étiquetage des personnes existent et contiennent des noms de personnes, la valeur PROPVARIANT est définie sur VT_LPWSTR et la valeur de données contient la liste des noms balisés. Pour plus d’informations sur la lecture des métadonnées d’image, consultez Vue d’ensemble de la lecture et de l’écriture de métadonnées d’image.

L’interrogation de la balise de noms de personnes n’est utile que si l’image contient réellement les métadonnées d’étiquetage des personnes. Pour cela, une application doit d’abord l’avoir écrite. Pour écrire les métadonnées de noms de personnes, utilisez un IWICMetadataQueryWriter et le chemin XMP explicite des métadonnées. L’exemple de code suivant illustre l’utilisation d’un enregistreur de requêtes pour écrire un nom dans le chemin de la requête.

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

Notez l’étape de construction de la structure XMP et de sa définition sous MPRI:Regions/{ulong=0}. Sans cette étape, le WIC ne peut pas identifier où placer le PersonDisplayName par la suite. Notez également que le chemin de requête explicite est utilisé à la place de System.Photo.PeopleNames, dont la stratégie de métadonnées ne prend pas en charge l’écriture de métadonnées.

rectangles Personnes

Toutefois, les noms de Personnes ne font qu’une partie de la fonctionnalité d’étiquetage des personnes. En plus de stocker les noms des personnes dans les métadonnées, le schéma prend également en charge les informations de région qui identifient la zone spécifique (un rectangle) de la personne affichée dans l’image.

Les informations de rectangle sont représentées par quatre valeurs décimales séparées par des virgules, telles que « 0.25, 0.25, 0.25, 0.25 ». Les deux premières valeurs spécifient la coordonnée en haut à gauche ; les deux derniers spécifient la hauteur et la largeur du rectangle. Les dimensions de l’image pour définir des rectangles de personnes sont normalisées à 1, ce qui signifie que dans l’exemple « 0,25, 0,25, 0,25, 0,25 », le rectangle commence 1/4 de la distance du haut et 1/4 de la distance à partir de la gauche de l’image. La hauteur et la largeur du rectangle représentent 1/4 de la taille de leurs dimensions d’image respectives.

Les informations de rectangle qui identifient les individus sont écrites de la même façon que les noms des personnes, dans la même structure. Pour écrire les métadonnées de rectangle, utilisez un IWICMetadataQueryWriter et le chemin XMP explicite des métadonnées. L’exemple de code suivant poursuit l’exemple précédent et ajoute un rectangle représentant « John Doe » aux métadonnées de l’image. Notez qu’il utilise le même {ulong=0} index pour associer ce rectangle à « 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
        );
}

Référence du schéma

Les schémas Microsoft XMP pour l’étiquetage des personnes définissent un ensemble de propriétés permettant d’étiqueter des individus dans des photos numériques.

Les sections suivantes fournissent les définitions de schéma nécessaires pour l’étiquetage des personnes. Dans la mesure du possible, les définitions de schéma utilisent les conventions fournies par les spécifications XMP (Extensible Metadata Platform) d’Adobe. Les définitions de schéma de cette rubrique affichent l’URI (Uniform Resource Identifier) de l’espace de noms XML qui identifie le schéma et le préfixe d’espace de noms de schéma par défaut, suivis d’un tableau qui répertorie toutes les propriétés définies pour le schéma. Chaque table comporte les colonnes suivantes :

  • Propriété : nom de la propriété, y compris le préfixe d’espace de noms préféré.

  • Type de valeur : type valeur de la propriété. Les schémas de marquage de personnes utilisent les types de valeur XMP chaque fois que possible, y compris Date et Texte. Les types de tableaux sont précédés du type de conteneur : alt, bagou seq.

  • Catégorie : les propriétés de schéma sont internes ou externes :

    • Les métadonnées internes doivent être définies par l’application.

    • Les métadonnées externes doivent être définies par l’utilisateur et sont indépendantes du contenu du document.

  • Description : description de la propriété.

Schéma Microsoft Photo 1.2

Le schéma Microsoft Photo 1.2 fournit un ensemble de propriétés pour les régions d’image.

  • L’URI de l’espace de noms de schéma est https://ns.microsoft.com/photo/1.2/.
  • Le préfixe d’espace de noms de schéma préféré est MP.
Propriété Type de valeur Category Description
MP:RegionInfo Regioninfo Interne obligatoire : stocke la racine des métadonnées d’étiquetage des personnes. Consultez la section Microsoft Photo RegionInfo Schema qui suit.

 

Schéma Microsoft Photo RegionInfo

Le schéma Microsoft Photo RegionInfo 1.2 fournit un ensemble de propriétés pour les informations de région.

  • L’URI de l’espace de noms de schéma est https://ns.microsoft.com/photo/1.2/t/RegionInfo#.
  • Le préfixe d’espace de noms de schéma préféré est MPRI.
Propriété Type de valeur Category Description
MPRI :DateRegionsValid Date Externe facultatif : date à laquelle la dernière région a été créée.
MPRI :Régions bag Region Externe obligatoire : stocke les régions d’étiquetage des personnes. Consultez la section Microsoft Photo Region Schema qui suit.

 

Schéma de région photo Microsoft

Le schéma Microsoft Photo Region 1.2 fournit un ensemble de propriétés pour les régions d’image.

  • L’URI de l’espace de noms de schéma est https://ns.microsoft.com/photo/1.2/t/Region#.
  • Le préfixe d’espace de noms de schéma préféré est MPReg.
MPReg:Property Type de valeur Category Description
MPReg:PersonDisplayName Texte Externe obligatoire : stocke le nom de la personne dans le rectangle donné.
MPReg:Rectangle Texte Externe facultatif : stocke le rectangle qui identifie la personne dans la photo. Le rectangle est stocké sous forme de quatre valeurs décimales délimitées par des virgules. Les deux premières valeurs spécifient la coordonnée supérieure gauche ; les deux derniers spécifient la hauteur et la largeur du rectangle. Les valeurs décimales doivent être normalisées à 1.
MPReg:PersonEmailDigest Texte Externe facultatif : stocke le hachage de message chiffré SHA-1 de l’adresse de messagerie dynamique de la personne.
MPReg:PersonLiveIdCID Texte Externe facultatif : stocke la représentation décimale signée du CID live de la personne, un entier 64 bits qui identifie publiquement une identité live.

 

Exemples de métadonnées

Voici une représentation des métadonnées XMP pour l’étiquetage des personnes.

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

Conceptuel

Vue d’ensemble du composant d’acquisition d’images Windows

Vue d’ensemble des métadonnées WIC

Vue d’ensemble de la lecture et de l’écriture de métadonnées d’image

Vue d’ensemble du langage de requête de métadonnées