사람 태그 지정 개요

이 항목에서는 디지털 사진에서 개인의 태그를 지정할 수 있는 새로운 XMP(Extensible Metadata Platform) 스키마와 Windows 7 사진 속성 System.Photo.PeopleNames 를 소개합니다. 이 항목에서는 WIC(Windows 이미징 구성 요소) API를 사용하여 사용자 태그 지정에 필요한 메타데이터를 읽고 쓰는 방법에 대해서도 설명합니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

사전 요구 사항

이 항목을 이해하려면 Windows 이미징 구성 요소 개요에 설명된 대로 WIC 디코더 인터페이스 및 관련 COM(구성 요소 개체 모델) 구성 요소에 대해 잘 알고 있어야 합니다. 또한 이미징 메타데이터, 특히 XMP에 대한 일반적인 지식을 갖도록 도와줍니다.

소개

Microsoft는 디지털 이미지 내에서 사용자에 태그를 지정하기 위한 새 XMP 스키마를 만들었습니다. 이 스키마를 사용하면 애플리케이션에서 이미지에 있는 개인의 이름과 위치를 이미지 내의 메타데이터로 저장할 수 있습니다. 새 스키마 외에도 새 사진 속성 System.Photo.PeopleNames 는 Windows 7에서 사용할 수 있습니다. 이 새 속성을 사용하면 애플리케이션이 이미지 메타데이터에 저장된 개인의 이름을 읽을 수 있습니다. WIC는 애플리케이션이 메타데이터를 디지털 사진에 태그 지정하는 사람을 쉽게 읽고 쓸 수 있도록 하여 이러한 새로운 기능을 활용합니다.

사람 태그 지정

WIC는 이미지 데이터와 이미지 메타데이터를 읽는 COM 구성 요소를 애플리케이션 개발자에게 제공합니다. 새 사용자 태그 지정 기능과 같은 메타데이터를 읽고 쓰기 위해 WIC는 IWICMetadataQueryReaderIWICMetadataQueryWriter 인터페이스를 제공합니다. 이러한 인터페이스를 사용하면 애플리케이션이 메타데이터 쿼리 언어 를 사용하여 이미지의 개별 프레임에 메타데이터를 쓸 수 있습니다. 다음 섹션에서는 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, 0.25"와 같이 쉼표로 구분된 10진수 값 4개로 표시됩니다. 처음 두 값은 왼쪽 위 좌표를 지정합니다. 마지막 두 사각형의 높이와 너비를 지정합니다. 사람 사각형을 정의하기 위한 이미지의 차원은 1로 정규화됩니다. 즉, "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 스키마는 디지털 사진의 개인에 태그를 지정하는 속성 집합을 정의합니다.

다음 섹션에서는 사용자 태그 지정에 필요한 스키마 정의를 제공합니다. 가능한 경우 스키마 정의는 Adobe의 XMP(Extensible Metadata Platform) 사양에서 제공하는 규칙을 사용합니다. 이 항목의 스키마 정의는 스키마 및 기본 스키마 네임스페이스 접두사를 식별하는 XML 네임스페이스 URI(Uniform Resource Identifier)와 스키마에 대해 정의된 모든 속성을 나열하는 테이블을 보여 줍니다. 각 테이블에는 다음 열이 있습니다.

  • Property - 기본 네임스페이스 접두사를 포함하여 속성의 이름입니다.

  • 값 형식 - 속성의 값 형식입니다. 사용자 태그 지정 지원 스키마는 가능하면 날짜 및 텍스트를 포함하여 XMP 값 형식을 사용합니다. 배열 형식 앞에 컨테이너 형식 alt( , bag또는 seq)이 있습니다.

  • 범주 - 스키마 속성은 내부 또는 외부입니다.

    • 내부 메타데이터는 애플리케이션에서 설정해야 합니다.

    • 외부 메타데이터는 사용자가 설정해야 하며 문서의 내용과 독립적이어야 합니다.

  • 설명 - 속성에 대한 설명입니다.

Microsoft Photo 1.2 스키마

Microsoft Photo 1.2 스키마는 이미지 영역에 대한 속성 집합을 제공합니다.

  • 스키마 네임스페이스 URI는 입니다 https://ns.microsoft.com/photo/1.2/.
  • 기본 스키마 네임스페이스 접두사는 입니다 MP.
속성 값 형식 범주 설명
MP:RegionInfo Regioninfo 내부 필수 : 사용자 태그 지정 메타데이터의 루트를 저장합니다. 다음 Microsoft 사진 지역인포 스키마 섹션을 참조하세요.

 

Microsoft Photo RegionInfo 스키마

Microsoft Photo RegionInfo 1.2 스키마는 지역 정보에 대한 속성 집합을 제공합니다.

  • 스키마 네임스페이스 URI는 입니다 https://ns.microsoft.com/photo/1.2/t/RegionInfo#.
  • 기본 스키마 네임스페이스 접두사는 입니다 MPRI.
속성 값 형식 범주 설명
MPRI:DateRegionsValid Date 외부 선택 사항 : 마지막 지역을 만든 날짜입니다.
MPRI:지역 bag 지역 외부 필수 : 사용자 태그 지정 지역을 저장합니다. 다음 Microsoft 사진 영역 스키마 섹션을 참조하세요.

 

Microsoft 사진 영역 스키마

Microsoft 사진 영역 1.2 스키마는 이미지 영역에 대한 속성 집합을 제공합니다.

  • 스키마 네임스페이스 URI는 입니다 https://ns.microsoft.com/photo/1.2/t/Region#.
  • 기본 스키마 네임스페이스 접두사는 입니다 MPReg.
MPReg:Property 값 형식 범주 Description
MPReg:PersonDisplayName 텍스트 외부 필수 : 지정된 사각형에 사람의 이름을 저장합니다.
MPReg:Rectangle 텍스트 외부 선택 사항 : 사진 내에 사람을 식별하는 사각형을 저장합니다. 사각형은 쉼표로 구분된 10진수 값 4개로 저장됩니다. 처음 두 값은 왼쪽 위 좌표를 지정합니다. 마지막 두 사각형의 높이와 너비를 지정합니다. 10진수 값은 1로 정규화되어야 합니다.
MPReg:PersonEmailDigest 텍스트 외부 선택 사항 : 사용자의 라이브 전자 메일 주소에 대한 SHA-1 암호화된 메시지 해시를 저장합니다.
MPReg:PersonLiveIdCID 텍스트 외부 선택 사항 : 라이브 ID를 공개적으로 식별하는 64비트 정수인 사람의 Live CID에 대한 서명된 10진수 표현을 저장합니다.

 

샘플 메타데이터

다음은 태그를 지정하는 사용자에 대한 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 메타데이터 개요

이미지 메타데이터 읽기 및 쓰기 개요

메타데이터 쿼리 언어 개요