Поделиться через


Общие сведения о Люди расстановки тегов

В этом разделе представлена новая схема XMP и свойство фотографий Windows 7 System.Photo.PeopleNames , которое позволяет помечать людей в цифровой фотографии. В этом разделе также рассматривается использование API компонента образов Windows (WIC) для чтения и записи метаданных, необходимых для добавления тегов.

В этом разделе содержатся следующие подразделы.

Предварительные требования

Чтобы понять эту статью, необходимо ознакомиться с интерфейсами декодера WIC и связанными с ними компонентами модели COM, как описано в статье Общие сведения о компоненте обработки образов Windows. Это также помогает иметь общее представление о метаданных изображений, особенно XMP.

Введение

Корпорация Майкрософт создала новую схему XMP для добавления тегов к людям в цифровом изображении. Эта схема позволяет приложениям хранить имена и расположения пользователей, которые находятся на изображении в виде метаданных в изображении. В дополнение к новой схеме в Windows 7 доступно новое свойство photo System.Photo.PeopleNames . Это новое свойство позволяет приложениям считывать имена пользователя, хранящиеся в метаданных изображения. WIC использует эти новые функции, позволяя приложениям легко читать и записывать метаданные людей в цифровые фотографии.

добавление тегов Люди

WIC предоставляет разработчикам приложений com-компоненты, которые считывают данные изображений, а также метаданные изображений. Для чтения и записи метаданных, таких как новая функция добавления тегов людей, WIC предоставляет интерфейсы IWICMetadataQueryReader и IWICMetadataQueryWriter . Эти интерфейсы позволяют приложениям использовать язык запросов метаданных для записи метаданных в отдельные кадры изображения. В следующем разделе показано, как считывать и записывать метаданные с тегами людей в метаданные изображения с помощью средств чтения и записи запросов WIC.

Имена Люди

Часть функции добавления тегов к людям — это возможность просто получить список имен людей, помеченных на изображении. Эта часть функции поддерживается обработчиками метаданных System.Photo.PeopleNames и WIC. Интерфейс IWICMetadataQueryReader в сочетании со свойством System.Photo.PeopleNames используется для чтения имен людей, идентифицированных на изображении и хранящихся в метаданных изображения.

В следующем примере кода демонстрируется средство чтения запросов, полученное из кадра изображения для запроса метаданных изображения на наличие помеченных имен свойства 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);
}

Выражение запроса System.Photo.PeopleNames запрашивает кадр для свойства . Если метаданные тегов людей существуют и содержат имена людей, то для параметра PROPVARIANT будет задано значение VT_LPWSTR, а значение данных будет содержать список имен с тегами. Дополнительные сведения о чтении метаданных изображения см. в статье Общие сведения о чтении и записи метаданных изображения.

Запрос тега имен людей полезен только в том случае, если изображение действительно содержит метаданные тегов людей. Для этого приложение должно сначала написать его. Чтобы записать метаданные имен людей, используйте IWICMetadataQueryWriter и явный путь XMP к метаданным. В следующем примере кода показано использование модуля записи запросов для записи имени в путь запроса.

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

Обратите внимание на этап создания структуры XMP и ее установки в разделе MPRI:Regions/{ulong=0}. Без этого шага WIC не сможет определить, где разместить более позднюю версию PersonDisplayName . Также обратите внимание, что вместо System.Photo.PeopleNames используется явный путь запроса, политика метаданных которого не поддерживает запись метаданных.

прямоугольники Люди

Однако имена Люди являются лишь частью функции добавления тегов к людям. Помимо хранения имен людей в метаданных, схема также поддерживает сведения о регионе, определяющие конкретную область (прямоугольник), которая отображается на изображении.

Данные прямоугольника представлены четырьмя десятичными значениями с разделителями-запятыми, такими как "0,25, 0,25, 0,25, 0,25". Первые два значения указывают верхнюю левую координату; Последние два указывают высоту и ширину прямоугольника. Размеры изображения для определения прямоугольников людей нормализуются до 1. Это означает, что в примере "0,25, 0,25, 0,25, 0,25, 0,25" прямоугольник начинается на 1/4 расстояния от верхней части и 1/4 от расстояния слева от изображения. Высота и ширина прямоугольника равны 1/4 размера соответствующего размера изображения.

Прямоугольная информация, которая идентифицирует отдельных лиц, записывается так же, как имена людей, в одной структуре. Чтобы записать метаданные прямоугольника, используйте IWICMetadataQueryWriter и явный путь XMP к метаданным. Следующий пример кода продолжает предыдущий пример и добавляет прямоугольник, представляющий "John Doe" в метаданные изображения. Обратите внимание, что он использует тот же {ulong=0} индекс для связи этого прямоугольника с "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
        );
}

Справочник по схеме

Схемы Microsoft XMP для тегов людей определяют набор свойств, которые помечают людей на цифровых фотографиях.

В следующих разделах приведены определения схемы, необходимые для добавления тегов. Везде, где это возможно, определения схемы используют соглашения, предоставляемые спецификациями XMP от Adobe. Определения схемы в этом разделе показывают универсальный код ресурса (URI) пространства имен XML, который идентифицирует схему, и префикс предпочтительного пространства имен схемы, а затем таблицу со списком всех свойств, определенных для схемы. Каждая таблица содержит следующие столбцы:

  • Свойство — имя свойства, включая предпочтительный префикс пространства имен.

  • Тип значения — тип значения свойства. Схемы поддержки тегов людей по возможности используют типы значений XMP, включая Date и Text. Типы массивов предшествуют типу контейнера: alt, bagили seq.

  • Категория — свойства схемы являются внутренними или внешними:

    • Внутренние метаданные должны быть заданы приложением.

    • Внешние метаданные должны быть заданы пользователем и не зависят от содержимого документа.

  • Description — описание свойства.

Схема Microsoft Photo 1.2

Схема Microsoft Photo 1.2 предоставляет набор свойств для областей изображений.

  • URI пространства имен схемы — https://ns.microsoft.com/photo/1.2/.
  • Предпочтительный префикс пространства имен схемы — MP.
Свойство Тип значения Категория Описание
MP:RegionInfo Regioninfo Внутренние обязательный : хранит корень метаданных тегов людей. См. раздел Схема Microsoft Photo RegionInfo, который приведен ниже.

 

Схема Microsoft Photo RegionInfo

Схема Microsoft Photo RegionInfo 1.2 предоставляет набор свойств для сведений о регионе.

  • URI пространства имен схемы — https://ns.microsoft.com/photo/1.2/t/RegionInfo#.
  • Предпочтительный префикс пространства имен схемы — MPRI.
Свойство Тип значения Категория Описание
MPRI:DateRegionsValid Дата Внешняя Необязательный : дата создания последнего региона.
MPRI:Regions область сумки Внешняя обязательный : хранит людей, которые помечают регионы. См. раздел Схема фоторегионирования (Майкрософт) ниже.

 

Схема фоторегионирования (Майкрософт)

Схема Microsoft Photo Region 1.2 предоставляет набор свойств для областей изображений.

  • URI пространства имен схемы — https://ns.microsoft.com/photo/1.2/t/Region#.
  • Предпочтительный префикс пространства имен схемы — MPReg.
MPReg:Property Тип значения Категория Описание
MPReg:PersonDisplayName Текст Внешняя обязательный : сохраняет имя человека в заданном прямоугольнике.
MPReg:Rectangle Текст Внешняя необязательно : хранит прямоугольник, который идентифицирует человека на фотографии. Прямоугольник хранится в виде четырех десятичных значений с разделителями-запятыми. Первые два значения указывают верхнюю левую координату; Последние два указывают высоту и ширину прямоугольника. Десятичные значения должны быть нормализованы до 1.
MPReg:PersonEmailDigest Текст Внешняя Необязательный . Хранит хэш зашифрованного сообщения SHA-1 для динамического адреса электронной почты пользователя.
MPReg:PersonLiveIdCID Текст Внешняя необязательный . Хранит десятичное представление динамического идентификатора пользователя, 64-разрядное целое число, которое открыто идентифицирует динамическое удостоверение.

 

Пример метаданных

Ниже представлено представление метаданных XMP для людей, расставляющих теги.

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

Основные понятия

Общие сведения о компоненте обработки образов Windows

Общие сведения о метаданных WIC

Общие сведения о чтении и записи метаданных изображения

Общие сведения о языке запросов метаданных