Condividi tramite


Panoramica dell'assegnazione di tag Persone

Questo argomento introduce il nuovo schema Extensible Metadata Platform (XMP) e la proprietà foto di Windows 7 System.Photo.PeopleNames che consente l'assegnazione di tag di singoli utenti in una foto digitale. Questo argomento illustra anche come usare l'API WiC (Windows Imaging Component) per leggere e scrivere i metadati necessari per gli utenti.

In questo argomento sono contenute le sezioni seguenti.

Prerequisiti

Per comprendere questo argomento, è necessario avere familiarità con le interfacce del decodificatore WIC e i relativi componenti COM (Component Object Model), come descritto in Panoramica del componente di Creazione immagini di Windows. Consente inoltre di avere una familiarità generale con i metadati dell'immagine, soprattutto XMP.

Introduzione

Microsoft ha creato un nuovo schema XMP per contrassegnare le persone all'interno di un'immagine digitale. Questo schema consente alle applicazioni di archiviare i nomi e le posizioni di individui che si trovano nell'immagine come metadati all'interno dell'immagine. Oltre al nuovo schema, la nuova proprietà foto System.Photo.PeopleNames è disponibile in Windows 7. Questa nuova proprietà consente alle applicazioni di leggere i nomi dell'utente archiviati nei metadati dell'immagine. WIC usa queste nuove funzionalità consentendo alle applicazioni di leggere e scrivere facilmente metadati di tag per le foto digitali.

Persone tag

WIC offre agli sviluppatori di applicazioni componenti COM che leggeno i dati delle immagini e i metadati delle immagini. Per la lettura e la scrittura di metadati, ad esempio la nuova funzionalità di assegnazione di tag, WIC fornisce le interfacce IWICMetadataQueryReader e IWICMetadataQueryWriter . Queste interfacce consentono alle applicazioni di usare il linguaggio di query dei metadati per scrivere metadati nei singoli frame di un'immagine. La sezione seguente illustra come leggere e scrivere i metadati di assegnazione dei tag di persone nei metadati di un'immagine usando i lettori e i writer di query WIC.

nomi Persone

Parte della funzionalità di assegnazione di tag persone è la possibilità di ottenere semplicemente un elenco dei nomi delle persone contrassegnate all'interno dell'immagine. Questa parte della funzionalità è supportata dai gestori di metadati System.Photo.PeopleNames e WIC. L'interfaccia IWICMetadataQueryReader , insieme alla proprietà System.Photo.PeopleNames, viene usata per leggere i nomi delle persone identificate in un'immagine e archiviate nei metadati dell'immagine.

Nell'esempio di codice seguente viene illustrato un lettore di query ottenuto da un frame di immagine per eseguire query sui metadati di un'immagine per i nomi contrassegnati della proprietà 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'espressione di query "System.Photo.PeopleNames" esegue una query sul frame per la proprietà. Se i metadati di assegnazione dei tag di persone esistono e contengono i nomi degli utenti, il valore PROPVARIANT verrà impostato su VT_LPWSTR e il valore dei dati conterrà l'elenco dei nomi contrassegnati. Per altre informazioni sulla lettura dei metadati dell'immagine, vedere Panoramica della lettura e della scrittura dei metadati dell'immagine.

L'esecuzione di query per il tag dei nomi delle persone è utile solo se l'immagine contiene effettivamente i metadati di assegnazione dei tag di persone. Affinché ciò si verifichi, un'applicazione deve prima averla scritta. Per scrivere i metadati dei nomi delle persone, usare un oggetto IWICMetadataQueryWriter e il percorso XMP esplicito dei metadati. Nell'esempio di codice seguente viene illustrato l'uso di un writer di query per scrivere un nome nel percorso della query.

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

Prendere nota del passaggio che costruisce la struttura XMP e impostarla in MPRI:Regions/{ulong=0}. Senza questo passaggio, wic non è in grado di identificare dove posizionare l'oggetto PersonDisplayName in un secondo momento. Si noti anche che il percorso di query esplicito viene usato anziché System.Photo.PeopleNames, il cui criterio di metadati non supporta la scrittura di metadati.

rettangoli Persone

i nomi di Persone sono tuttavia solo parte della funzionalità di assegnazione dei tag persone. Oltre a archiviare i nomi degli utenti nei metadati, lo schema supporta anche le informazioni sull'area che identificano l'area specifica (un rettangolo) visualizzata nell'immagine.

Le informazioni sul rettangolo sono rappresentate da quattro valori decimali delimitati da virgole, ad esempio "0,25, 0,25, 0,25, 0,25". I primi due valori specificano la coordinata superiore sinistra; le ultime due specificano l'altezza e la larghezza del rettangolo. Le dimensioni dell'immagine ai fini della definizione dei rettangoli di persone vengono normalizzate su 1, il che significa che nella "0,25, 0,25, 0,25, 0,25" esempio, il rettangolo inizia 1/4 della distanza dalla parte superiore e 1/4 della distanza dalla sinistra dell'immagine. Sia l'altezza che la larghezza del rettangolo sono 1/4 delle dimensioni delle rispettive dimensioni dell'immagine.

Le informazioni sul rettangolo che identificano i singoli utenti vengono scritte nello stesso modo in cui i nomi degli utenti vengono scritti, all'interno della stessa struttura. Per scrivere i metadati del rettangolo, usare un oggetto IWICMetadataQueryWriter e il percorso XMP esplicito dei metadati. L'esempio di codice seguente continua l'esempio precedente e aggiunge un rettangolo che rappresenta "John Doe" ai metadati dell'immagine. Si noti che usa lo stesso {ulong=0} indice per associare questo rettangolo a "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
        );
}

Riferimenti agli schemi

Gli schemi Microsoft XMP per gli utenti che tagging definiscono un set di proprietà per contrassegnare singoli utenti nelle foto digitali.

Le sezioni seguenti forniscono le definizioni dello schema necessarie per l'assegnazione di tag agli utenti. Se possibile, le definizioni dello schema usano le convenzioni fornite dalle specifiche XMP (Extensible Metadata Platform). Le definizioni dello schema in questo argomento mostrano l'URI (Uniform Resource Identifier) dello spazio dei nomi XML che identifica lo schema e il prefisso dello schema preferito, seguito da una tabella che elenca tutte le proprietà definite per lo schema. Ogni tabella include le colonne seguenti:

  • Proprietà : nome della proprietà, incluso il prefisso dello spazio dei nomi preferito.

  • Tipo valore : tipo di valore della proprietà. Gli schemi di supporto per gli utenti tagging usano i tipi di valore XMP ogni volta che è possibile, tra cui Data e Testo. I tipi di matrice sono preceduti dal tipo di contenitore: alt, bago seq.

  • Categoria : le proprietà dello schema sono interne o esterne:

    • I metadati interni devono essere impostati dall'applicazione.

    • I metadati esterni devono essere impostati dall'utente e sono indipendenti dal contenuto del documento.

  • Descrizione: Descrizione della proprietà.

Microsoft Photo 1.2 Schema

Lo schema di Microsoft Photo 1.2 fornisce un set di proprietà per le aree dell'immagine.

  • L'URI dello spazio dei nomi dello schema è https://ns.microsoft.com/photo/1.2/.
  • Il prefisso dello schema preferito è MP.
Proprietà Tipo di valore Category Descrizione
MP:RegionInfo Regioninfo Interno obbligatorio : archivia la radice dei metadati di assegnazione dei tag di persone. Vedere la sezione Schema di Microsoft Photo RegionInfo che segue.

 

Microsoft Photo RegionInfo Schema

Lo schema Microsoft Photo RegionInfo 1.2 fornisce un set di proprietà per le informazioni sull'area.

  • L'URI dello spazio dei nomi dello schema è https://ns.microsoft.com/photo/1.2/t/RegionInfo#.
  • Il prefisso dello schema preferito è MPRI.
Proprietà Tipo di valore Category Descrizione
MPRI:DateRegionsValid Data Esterno facoltativo : data di creazione dell'ultima area.
MPRI:Regions area del sacchetto Esterno obbligatorio : archivia le aree di assegnazione dei tag agli utenti. Vedere la sezione Schema area foto Microsoft che segue.

 

Schema area foto Microsoft

Lo schema di Microsoft Photo Region 1.2 fornisce un set di proprietà per le aree dell'immagine.

  • L'URI dello spazio dei nomi dello schema è https://ns.microsoft.com/photo/1.2/t/Region#.
  • Il prefisso dello schema preferito è MPReg.
MPReg:, proprietà Tipo di valore Category Descrizione
MPReg:PersonDisplayName Testo Esterno obbligatorio : archivia il nome della persona nel rettangolo specificato.
MPReg:Rectangle Testo Esterno facoltativo : archivia il rettangolo che identifica la persona all'interno della foto. Il rettangolo viene archiviato come quattro valori decimali delimitati da virgole. I primi due valori specificano la coordinata superiore sinistra; le ultime due specificano l'altezza e la larghezza del rettangolo. I valori decimali devono essere normalizzati a 1.
MPReg:PersonEmailDigest Testo Esterno facoltativo : archivia l'hash del messaggio crittografato SHA-1 dell'indirizzo di posta elettronica Live della persona.
MPReg:PersonLiveIdCID Testo Esterno facoltativo :Archivia la rappresentazione decimale firmata del CID live della persona, un intero a 64 bit che identifica pubblicamente un'identità live.

 

Metadati di esempio

Di seguito è riportata una rappresentazione dei metadati XMP per l'assegnazione di tag agli utenti.

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

Informazioni concettuali

Panoramica del componente Di creazione immagini di Windows

Panoramica dei metadati WIC

Panoramica della lettura e della scrittura dei metadati dell'immagine

Panoramica del linguaggio di query dei metadati