次の方法で共有


People タグ付けの概要

このトピックでは、新しい拡張メタデータ プラットフォーム (XMP) スキーマと、デジタル写真の個人のタグ付けを可能にする Windows 7 写真プロパティ System.Photo.PeopleNames について説明します。 このトピックでは、Windows Imaging Component (WIC) API を使用して、ユーザーのタグ付けに必要なメタデータの読み取りと書き込みの両方を行う方法についても説明します。

このトピックは、次のセクションで構成されています。

前提条件

このトピックを理解するには、「 Windows イメージング コンポーネントの概要」で説明されているように、WIC デコーダー インターフェイスとそれに関連するコンポーネント オブジェクト モデル (COM) コンポーネントについて理解している必要があります。 また、イメージング メタデータ (特に XMP) に関する一般的な知識を持つことも役立ちます。

はじめに

Microsoft は、デジタル 画像内のユーザーにタグを付ける新しい XMP スキーマを作成しました。 このスキーマを使用すると、アプリケーションは、イメージ内のメタデータとしてイメージに含まれる個人の名前と場所を格納できます。 新しいスキーマに加えて、新しい photo プロパティ System.Photo.PeopleNames は Windows 7 で使用できます。 この新しいプロパティを使用すると、アプリケーションはイメージ メタデータに格納されている個人の名前を読み取ります。 WIC では、アプリケーションがメタデータにタグ付けされたユーザーをデジタル写真に簡単に読み書きできるようにすることで、これらの新機能を利用します。

Peopleタグ付け

WIC は、イメージ データとイメージ メタデータを読み取る COM コンポーネントをアプリケーション開発者に提供します。 新しいユーザーのタグ付け機能などのメタデータの読み取りと書き込みのために、WIC は IWICMetadataQueryReader インターフェイスと IWICMetadataQueryWriter インターフェイスを 提供します。 これらのインターフェイスを使用すると、アプリケーションは メタデータ クエリ言語 を使用して、イメージの個々のフレームにメタデータを書き込みます。 次のセクションでは、WIC クエリ リーダーとライターを使用して、ユーザータグ付けメタデータを画像のメタデータに読み書きする方法を示します。

People名

ユーザータグ付け機能の一部は、画像内でタグ付けされたユーザーの名前を一覧表示する機能です。 この機能のこの部分は、 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" は、 プロパティのフレームに対してクエリを実行します。 people-tagging メタデータが存在し、ユーザーの名前が含まれている場合、 PROPVARIANT 値は VT_LPWSTR に設定され、データ値にはタグ付けされた名前の一覧が含まれます。 画像メタデータの読み取りの詳細については、「イメージ メタデータ の読み取りと書き込みの概要」を参照してください。

people names タグのクエリは、画像に実際にユーザータグ付けメタデータが含まれている場合にのみ役立ちます。 これを行うには、アプリケーションが最初にそれを書き込む必要があります。 ユーザー名のメタデータを書き込むには、 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 の代わりに明示的なクエリ パスが使用されることにも注意してください。

四角形のPeople

ただし、Peopleの名前は、ユーザータグ付け機能の一部にすぎません。 スキーマでは、メタデータにユーザーの名前を格納するだけでなく、ユーザーが画像に表示される特定の領域 (四角形) を識別するリージョン情報もサポートされています。

四角形の情報は、"0.25、0.25、0.25、0.25、0.25" などの 4 つのコンマ区切りの 10 進値で表されます。 最初の 2 つの値は左上の座標を指定します。最後の 2 つでは、四角形の高さと幅を指定します。 ユーザーの四角形を定義するための画像の寸法は 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) 仕様によって提供される規則が使用されます。 このトピックのスキーマ定義では、スキーマと優先スキーマ名前空間プレフィックスを識別する XML 名前空間 Uniform Resource Identifier (URI) と、スキーマに定義されているすべてのプロパティを一覧表示するテーブルを示します。 各テーブルには、次の列があります。

  • Property - 優先される名前空間プレフィックスを含む、プロパティの名前。

  • 値の型 - プロパティの値の型。 people-tagging サポート スキーマでは、可能な限り、Date や Text など、XMP 値型が使用されます。 配列型の前には、、、または seqのコンテナー型がaltbag付きます。

  • カテゴリ - スキーマ プロパティは内部または外部です。

    • 内部メタデータは、アプリケーションによって設定する必要があります。

    • 外部メタデータはユーザーが設定する必要があり、ドキュメントの内容とは無関係です。

  • 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 Date 外部 省略可能 : 最後のリージョンが作成された日付。
MPRI:Regions バッグ領域 外部 required : ユーザーのタグ付けリージョンを格納します。 次の「Microsoft Photo Region Schema」セクションを参照してください。

 

Microsoft Photo Region スキーマ

Microsoft Photo Region 1.2 スキーマは、イメージ領域のプロパティのセットを提供します。

  • スキーマ名前空間 URI は です https://ns.microsoft.com/photo/1.2/t/Region#
  • 推奨されるスキーマ名前空間プレフィックスは です MPReg
MPReg:Property 値の型 カテゴリ 説明
MPReg:PersonDisplayName Text 外部 required : 指定された四角形に人物の名前を格納します。
MPReg:Rectangle Text 外部 省略可能 : 写真内の人物を識別する四角形を格納します。 四角形は、4 つのコンマ区切りの 10 進値として格納されます。 最初の 2 つの値は左上の座標を指定します。最後の 2 つでは、四角形の高さと幅を指定します。 10 進値は 1 に正規化する必要があります。
MPReg:PersonEmailDigest Text 外部 省略可能 : ユーザーの Live 電子メール アドレスの SHA-1 で暗号化されたメッセージ ハッシュを格納します。
MPReg:PersonLiveIdCID Text 外部 optional :Live 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 Imaging コンポーネントの概要

WIC メタデータの概要

イメージ メタデータの読み取りと書き込みの概要

メタデータ クエリ言語の概要