Compartir a través de


Información general sobre el etiquetado de Personas

En este tema se presenta el nuevo esquema de plataforma de metadatos extensible (XMP) y la propiedad de fotos de Windows 7 System.Photo.PeopleNames que permite el etiquetado de personas en una foto digital. En este tema también se describe cómo usar la API de Componente de creación de imágenes de Windows (WIC) para leer y escribir los metadatos necesarios para el etiquetado de personas.

En este tema se incluyen las siguientes secciones.

Prerrequisitos

Para comprender este tema, debe estar familiarizado con las interfaces de descodificador wiC y sus componentes relacionados del modelo de objetos componentes (COM), como se describe en información general del componente de creación de imágenes de Windows. También ayuda a tener una familiaridad general con los metadatos de creación de imágenes, especialmente XMP.

Introducción

Microsoft ha creado un nuevo esquema XMP para etiquetar personas dentro de una imagen digital. Este esquema permite a las aplicaciones almacenar los nombres y ubicaciones de las personas que están en la imagen como metadatos dentro de la imagen. Además del nuevo esquema, la nueva propiedad photo System.Photo.PeopleNames está disponible en Windows 7. Esta nueva propiedad permite a las aplicaciones leer los nombres del individuo almacenados en los metadatos de la imagen. WIC utiliza estas nuevas características al permitir que las aplicaciones lean y escriban fácilmente metadatos de etiquetado de personas en fotos digitales.

etiquetado de Personas

WIC proporciona a los desarrolladores de aplicaciones componentes COM que leen datos de imagen, así como metadatos de imagen. Para leer y escribir metadatos, como la nueva característica de etiquetado de personas, WIC proporciona las interfaces IWICMetadataQueryReader e IWICMetadataQueryWriter . Estas interfaces permiten a las aplicaciones usar el lenguaje de consulta de metadatos para escribir metadatos en los fotogramas individuales de una imagen. En la sección siguiente se muestra cómo leer y escribir los metadatos de etiquetado de personas en los metadatos de una imagen mediante lectores y escritores de consultas WIC.

nombres de Personas

Parte de la característica de etiquetado de personas es la capacidad de obtener simplemente una lista de los nombres de las personas etiquetadas dentro de la imagen. Esta parte de la característica es compatible con los controladores de metadatos de System.Photo.PeopleNames y WIC. La interfaz IWICMetadataQueryReader , junto con la propiedad System.Photo.PeopleNames, se usan para leer los nombres de las personas identificadas en una imagen y almacenadas en los metadatos de la imagen.

En el ejemplo de código siguiente se muestra un lector de consultas obtenido de un marco de imagen para consultar los metadatos de una imagen para los nombres etiquetados de la propiedad 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);
}

La expresión de consulta "System.Photo.PeopleNames" consulta el marco de la propiedad . Si los metadatos de etiquetado de personas existen y contienen nombres de personas, el valor PROPVARIANT se establecerá en VT_LPWSTR y el valor de datos contendrá la lista de nombres etiquetados. Para obtener más información sobre la lectura de metadatos de imagen, consulte Introducción a la lectura y escritura de metadatos de imagen.

La consulta de la etiqueta de nombres de personas solo es útil si la imagen contiene realmente los metadatos de etiquetado de personas. Para que esto ocurra, una aplicación debe haberla escrito primero. Para escribir los metadatos de nombres de personas, use IWICMetadataQueryWriter y la ruta de acceso XMP explícita de los metadatos. En el ejemplo de código siguiente se muestra el uso de un escritor de consultas para escribir un nombre en la ruta de acceso de la consulta.

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

Observe el paso que construye la estructura XMP y la establece en MPRI:Regions/{ulong=0}. Sin este paso, el WIC no puede identificar dónde colocarlo PersonDisplayName más adelante. Tenga en cuenta también que la ruta de acceso de consulta explícita se usa en lugar de System.Photo.PeopleNames, cuya directiva de metadatos no admite la escritura de metadatos.

rectángulos de Personas

sin embargo, los nombres de Personas solo forman parte de la característica de etiquetado de personas. Además de almacenar los nombres de las personas en los metadatos, el esquema también admite información de región que identifica el área específica (un rectángulo) que la persona se muestra en la imagen.

La información del rectángulo se representa mediante cuatro valores decimales delimitados por comas, como "0,25, 0,25, 0,25, 0,25". Los dos primeros valores especifican la coordenada superior izquierda; los dos últimos especifican el alto y el ancho del rectángulo. Las dimensiones de la imagen para definir rectángulos de personas se normalizan en 1, lo que significa que en el ejemplo "0,25, 0,25, 0,25, 0,25", el rectángulo comienza 1/4 de la distancia desde la parte superior y 1/4 de la distancia desde la izquierda de la imagen. Tanto el alto como el ancho del rectángulo son 1/4 del tamaño de sus dimensiones de imagen respectivas.

La información del rectángulo que identifica a los individuos se escribe de la misma manera que los nombres de las personas, dentro de la misma estructura. Para escribir los metadatos del rectángulo, use un IWICMetadataQueryWriter y la ruta de acceso XMP explícita de los metadatos. En el ejemplo de código siguiente se continúa el ejemplo anterior y se agrega un rectángulo que representa "John Doe" a los metadatos de la imagen. Tenga en cuenta que usa el mismo {ulong=0} índice para asociar este rectángulo 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
        );
}

Referencia de esquemas

Los esquemas XMP de Microsoft para el etiquetado de personas definen un conjunto de propiedades para etiquetar usuarios en fotos digitales.

En las secciones siguientes se proporcionan las definiciones de esquema necesarias para el etiquetado de personas. Siempre que sea posible, las definiciones de esquema usan las convenciones proporcionadas por las especificaciones de la Plataforma de metadatos extensibles (XMP) de Adobe. Las definiciones de esquema de este tema muestran el identificador uniforme de recursos (URI) del espacio de nombres XML que identifica el esquema y el prefijo de espacio de nombres de esquema preferido, seguido de una tabla que enumera todas las propiedades definidas para el esquema. Cada tabla tiene las columnas siguientes:

  • Propiedad : el nombre de la propiedad, incluido el prefijo de espacio de nombres preferido.

  • Tipo de valor: el tipo de valor de la propiedad. Los esquemas de compatibilidad con el etiquetado de personas usan los tipos de valor XMP siempre que sea posible, incluidos Date y Text. Los tipos de matriz van precedidos por el tipo de contenedor: alt, bago seq.

  • Categoría : las propiedades de esquema son internas o externas:

    • La aplicación debe establecer metadatos internos.

    • El usuario debe establecer metadatos externos y es independiente del contenido del documento.

  • Descripción : descripción de la propiedad.

Esquema de Microsoft Photo 1.2

El esquema Microsoft Photo 1.2 proporciona un conjunto de propiedades para las regiones de imagen.

  • El URI del espacio de nombres de esquema es https://ns.microsoft.com/photo/1.2/.
  • El prefijo de espacio de nombres de esquema preferido es MP.
Propiedad Tipo de valor Category Descripción
MP:RegionInfo RegionInfo Interno obligatorio : almacena la raíz de los metadatos de etiquetado de personas. Consulte la sección Microsoft Photo RegionInfo Schema (Esquema de Microsoft Photo RegionInfo) que se muestra a continuación.

 

Esquema de Microsoft Photo RegionInfo

El esquema Microsoft Photo RegionInfo 1.2 proporciona un conjunto de propiedades para la información de la región.

  • El URI del espacio de nombres de esquema es https://ns.microsoft.com/photo/1.2/t/RegionInfo#.
  • El prefijo de espacio de nombres de esquema preferido es MPRI.
Propiedad Tipo de valor Category Descripción
MPRI:DateRegionsValid Fecha Externo opcional : fecha en la que se creó la última región.
MPRI:Regions región de contenedor Externo obligatorio : almacena las regiones de etiquetado de personas. Consulte la sección Esquema de región de fotos de Microsoft que se indica a continuación.

 

Esquema de región de fotos de Microsoft

El esquema Región de fotos de Microsoft 1.2 proporciona un conjunto de propiedades para las regiones de imagen.

  • El URI del espacio de nombres de esquema es https://ns.microsoft.com/photo/1.2/t/Region#.
  • El prefijo de espacio de nombres de esquema preferido es MPReg.
MPReg:Property Tipo de valor Category Descripción
MPReg:PersonDisplayName Texto Externo obligatorio : almacena el nombre de la persona en el rectángulo especificado.
MPReg:Rectangle Texto Externo opcional : almacena el rectángulo que identifica a la persona dentro de la foto. El rectángulo se almacena como cuatro valores decimales delimitados por comas. Los dos primeros valores especifican la coordenada superior izquierda; los dos últimos especifican el alto y el ancho del rectángulo. Los valores decimales deben normalizarse en 1.
MPReg:PersonEmailDigest Texto Externo opcional : almacena el hash de mensaje cifrado SHA-1 de la dirección de correo electrónico activa de la persona.
MPReg:PersonLiveIdCID Texto Externo opcional : almacena la representación decimal firmada del CID activo de la persona, un entero de 64 bits que identifica públicamente una identidad activa.

 

Metadatos de ejemplo

A continuación se muestra una representación de los metadatos XMP para el etiquetado de personas.

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

Conceptual

Información general sobre el componente de creación de imágenes de Windows

Introducción a los metadatos de WIC

Información general sobre la lectura y escritura de metadatos de imagen

Introducción al lenguaje de consulta de metadatos