Общие сведения о Люди расстановки тегов
В этом разделе представлена новая схема 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>
Связанные темы
-
Основные понятия