Bagikan melalui


Gambaran Umum Pemberian Tag Orang

Topik ini memperkenalkan skema Extensible Metadata Platform (XMP) baru dan properti foto Windows 7 System.Photo.PeopleNames yang memungkinkan penandaan individu dalam foto digital. Topik ini juga membahas cara menggunakan API Komponen Pencitraan Windows (WIC) untuk membaca dan menulis metadata yang diperlukan untuk penandaan orang.

Topik ini berisi bagian berikut.

Prasyarat

Untuk memahami topik ini, Anda harus terbiasa dengan antarmuka dekoder WIC dan komponen Model Objek Komponen (COM) terkait, seperti yang dijelaskan dalam Gambaran Umum Komponen Pencitraan Windows. Ini juga membantu memiliki keakraban umum dengan metadata pencitraan, terutama XMP.

Pengantar

Microsoft telah membuat skema XMP baru untuk menandai orang dalam gambar digital. Skema ini memungkinkan aplikasi untuk menyimpan nama dan lokasi individu yang berada dalam gambar sebagai metadata dalam gambar. Selain skema baru, properti foto baru System.Photo.PeopleNames tersedia di Windows 7. Properti baru ini memungkinkan aplikasi untuk membaca nama individu yang disimpan dalam metadata gambar. WIC menggunakan fitur baru ini dengan memungkinkan aplikasi untuk dengan mudah membaca dan menulis metadata penandaan orang ke foto digital.

Pemberian Tag Orang

WIC menyediakan komponen COM kepada pengembang aplikasi yang membaca data gambar serta metadata gambar. Untuk membaca dan menulis metadata, seperti fitur penandaan orang baru, WIC menyediakan antarmuka IWICMetadataQueryReader dan IWICMetadataQueryWriter . Antarmuka ini memungkinkan aplikasi untuk menggunakan bahasa kueri metadata untuk menulis metadata ke masing-masing bingkai gambar. Bagian berikut menunjukkan cara membaca dan menulis metadata pemberian tag orang ke dalam metadata gambar dengan menggunakan pembaca dan penulis kueri WIC.

Nama Orang

Bagian dari fitur pemberian tag orang adalah kemampuan untuk hanya mendapatkan daftar nama orang yang ditandai dalam gambar. Bagian fitur ini didukung oleh penangan metadata System.Photo.PeopleNames dan WIC. Antarmuka IWICMetadataQueryReader , bersama dengan properti System.Photo.PeopleNames, digunakan untuk membaca nama orang yang diidentifikasi dalam gambar dan disimpan dalam metadata gambar.

Contoh kode berikut menunjukkan pembaca kueri yang diperoleh dari bingkai gambar untuk mengkueri metadata gambar untuk nama yang ditandai dari properti 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);
}

Ekspresi kueri "System.Photo.PeopleNames" mengkueri bingkai untuk properti . Jika metadata pemberian tag orang ada dan berisi nama orang, nilai PROPVARIANT akan diatur ke VT_LPWSTR dan nilai data akan berisi daftar nama yang diberi tag. Untuk informasi selengkapnya tentang membaca metadata gambar, lihat Gambaran Umum Membaca dan Menulis Metadata Gambar.

Mengkueri tag nama orang hanya berguna jika gambar benar-benar berisi metadata pemberian tag orang. Agar ini terjadi, aplikasi harus terlebih dahulu menulisnya. Untuk menulis metadata nama orang, gunakan IWICMetadataQueryWriter dan jalur XMP eksplisit metadata. Contoh kode berikut menunjukkan penggunaan penulis kueri untuk menulis nama ke jalur kueri.

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

Perhatikan langkah membangun struktur XMP dan mengaturnya di bawah MPRI:Regions/{ulong=0}. Tanpa langkah ini, WIC tidak dapat mengidentifikasi di mana menempatkan nanti PersonDisplayName . Perhatikan juga bahwa jalur kueri eksplisit digunakan alih-alih System.Photo.PeopleNames, yang kebijakan metadatanya tidak mendukung penulisan metadata.

Persegi Orang

Namun, nama Orang hanyalah bagian dari fitur pemberian tag orang. Selain menyimpan nama orang dalam metadata, skema ini juga mendukung informasi wilayah yang mengidentifikasi area tertentu (persegi panjang) orang tersebut ditampilkan dalam gambar.

Informasi persegi diwakili oleh empat nilai desimal yang dibatasi koma, seperti "0,25, 0,25, 0,25, 0,25". Dua nilai pertama menentukan koordinat kiri atas; dua terakhir menentukan tinggi dan lebar persegi panjang. Dimensi gambar untuk tujuan menentukan persegi panjang orang dinormalisasi menjadi 1, yang berarti bahwa dalam contoh "0,25, 0,25, 0,25, 0,25", persegi panjang mulai 1/4 dari jarak dari atas dan 1/4 dari jarak dari kiri gambar. Tinggi dan lebar persegi panjang adalah 1/4 dari ukuran dimensi gambar masing-masing.

Informasi persegi panjang yang mengidentifikasi individu ditulis dengan cara yang sama nama orang ditulis, dalam struktur yang sama. Untuk menulis metadata persegi panjang, gunakan IWICMetadataQueryWriter dan jalur XMP eksplisit metadata. Contoh kode berikut melanjutkan contoh sebelumnya dan menambahkan persegi panjang yang mewakili 'John Doe' ke metadata gambar. Perhatikan bahwa ia menggunakan indeks yang sama {ulong=0} untuk mengaitkan persegi panjang ini dengan '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
        );
}

Referensi Skema

Skema Microsoft XMP untuk penandaan orang menentukan sekumpulan properti untuk menandai individu dalam foto digital.

Bagian berikut ini menyediakan definisi skema yang diperlukan untuk penandaan orang. Jika memungkinkan, definisi skema menggunakan konvensi yang disediakan oleh Spesifikasi Extensible Metadata Platform (XMP) Adobe. Definisi skema dalam topik ini memperlihatkan namespace XML Pengidentifikasi Sumber Daya Seragam (URI) yang mengidentifikasi skema dan awalan namespace layanan skema pilihan, diikuti dengan tabel yang mencantumkan semua properti yang ditentukan untuk skema. Setiap tabel memiliki kolom berikut:

  • Properti - Nama properti , termasuk awalan namespace pilihan.

  • Jenis nilai - Jenis nilai properti. Skema dukungan pemberian tag orang menggunakan jenis nilai XMP jika memungkinkan, termasuk Tanggal dan Teks. Jenis array didahului oleh jenis kontainer: alt, , bagatau seq.

  • Kategori - Properti skema bersifat internal atau eksternal:

    • Metadata internal harus diatur oleh aplikasi.

    • Metadata eksternal harus diatur oleh pengguna dan independen dari konten dokumen.

  • Deskripsi - Deskripsi properti.

Skema Microsoft Photo 1.2

Skema Microsoft Photo 1.2 menyediakan sekumpulan properti untuk wilayah gambar.

  • URI namespace skema adalah https://ns.microsoft.com/photo/1.2/.
  • Awalan namespace skema yang disukai adalah MP.
Properti Jenis nilai Kategori Deskripsi
MP:RegionInfo RegionInfo Internal wajib : Menyimpan akar metadata pemberian tag orang. Lihat bagian Microsoft Photo RegionInfo Schema yang mengikutinya.

 

Skema Microsoft Photo RegionInfo

Skema Microsoft Photo RegionInfo 1.2 menyediakan sekumpulan properti untuk info wilayah.

  • URI namespace skema adalah https://ns.microsoft.com/photo/1.2/t/RegionInfo#.
  • Awalan namespace skema yang disukai adalah MPRI.
Properti Jenis nilai Kategori Deskripsi
MPRI:DateRegionsValid Tanggal Eksternal opsional : Tanggal wilayah terakhir dibuat.
MPRI:Wilayah Wilayah tas Eksternal wajib : Menyimpan wilayah penandaan orang. Lihat bagian Skema Wilayah Foto Microsoft yang mengikutinya.

 

Skema Wilayah Foto Microsoft

Skema Wilayah Foto Microsoft 1.2 menyediakan sekumpulan properti untuk wilayah gambar.

  • URI namespace skema adalah https://ns.microsoft.com/photo/1.2/t/Region#.
  • Awalan namespace skema yang disukai adalah MPReg.
MPReg:Property Jenis nilai Kategori Deskripsi
MPReg:PersonDisplayName Teks Eksternal wajib : Menyimpan nama orang dalam persegi panjang yang diberikan.
MPReg:Persegi panjang Teks Eksternal opsional : Menyimpan persegi panjang yang mengidentifikasi orang dalam foto. Persegi disimpan sebagai empat nilai desimal yang dibatasi koma. Dua nilai pertama menentukan koordinat kiri atas; dua terakhir menentukan tinggi dan lebar persegi panjang. Nilai desimal harus dinormalisasi menjadi 1.
MPReg:PersonEmailDigest Teks Eksternal opsional : Menyimpan hash pesan terenkripsi SHA-1 dari alamat email Langsung orang tersebut.
MPReg:PersonLiveIdCID Teks Eksternal opsional :Menyimpan representasi desimal yang ditandatangani dari LIVE CID orang tersebut, bilangan bulat 64-bit yang secara publik mengidentifikasi identitas Langsung.

 

Metadata Sampel

Berikut ini adalah representasi metadata XMP untuk penandaan orang.

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

Konseptual

Gambaran Umum Komponen Pencitraan Windows

Gambaran Umum Metadata WIC

Gambaran Umum Membaca dan Menulis Metadata Gambar

Gambaran Umum Bahasa Kueri Metadata