再びXMP faceタグ。 すべてが悪いですが、それは修正可能です

写真アーカイブ用に認識された顔のメタタグを保存する問題は、ハブで既に何度も提起されています。残念ながら、上記のレシピはどれも十分に機能せず、googleは役に立たなかったため、自分の自転車を書く必要がありました。



オリジナル記事: 12



そこにはすべてが正しく正しく書かれていますが、まだ幸せはありません。



注目を集める画像:





タスクは簡単です-写真に写っている人に印を付けて、自分にとって都合の良い方法で最大数の場所でそれを使用できるようにすることです。



Picasaで顔を祝います。これは、Googleの連絡先、クロスプラットフォーム、自動検出、ファイル内のタグストレージ(ニュアンス付き)にバインドしているためです。 しかし、gallery3のすべての場所でこれらのタグを見て使用したいと思います。彼女はカタログ作成者として使用しているため、lightroomで、Microsoft Live Photo Galleryで使用しているため、マイクロソフトエクスプローラーで、そして、なぜそれも使用しないのですか。



誰も混乱したい-猫へようこそ。



問題番号1パイカは顔情報をどこに保存しますか?

3つのオプション:





明らかな理由から、2番目のオプションが最も最適ですが、それほど単純ではないことが判明したため、Picasは「すべてのタグをファイルに書き込む」と言うことはできません。 この問題を解決するためのいくつかのオプションがあります。純粋にピカシックまたは外部ユーティリティを使用します。



絵文字

ほぼ正常に動作し、最近更新されましたが、最後まで開始されたものを完了することなく何度もクラッシュし、アーカイブに約60Kの写真があるので、これはすべて長くて退屈です。



最も人気のあるavpicfacexmptagger

彼は必要なほとんどすべてを行う方法を知っていますが、一方的なものであり、長い間更新されておらず、xmpの彼自身のスキームを思い付きました。 ただし、原則として、2つを使用してアーカイブを状態にすることができます。



Google自体からの推奨事項を使用しました。「写真に名前タグを保存する」チェックボックスがオンになっているpicasバージョン3.9のみが必要です。 xmpですべての人を確実に記録するには、すべての人を調べて名前を変更し、名前を元に戻す必要があります。 すばやく、簡単に機能します。 人物タブで、最初の名前をダブルクリックして「x」に名前を変更し、「x」をダブルクリックして名前を変更します。 私が150人を統合したのは、ほんの数分でした。 この後、Picasaはすぐに閉じるのではなく、ディスクにデータを書き込むための時間を確保することをお勧めします。進行状況が表示されないためです。



次のステップとして、RegionNameタグのxmp-mwg-rsでpicasaによって記録された名前を抽出し、PersonInImageおよびRegionPersonDisplayNameタグに書き込みます。その後、これらのタグをすべてのカタログ作成者の検索で使用でき、Microsoftエクスプローラーでも写真に写っている人の名前を表示します。 これを行う最も簡単な方法はexiftoolを使用することで、 こちらからダウンロードできます。



exiftool -RegionName>PersonInImage photo.jpg exiftool -RegionName>RegionPersonDisplayName photo.jpg
      
      







その後、多くのサードパーティプログラムの人々に関する情報が表示されます





また、フレーム上の人物の位置に関する情報をパイカス標準からマイクロソフトの標準に変換することもできます。これらは名前だけでなく、正方形の考慮方法によっても異なります。正方形の左上隅からの長さと高さを指定するものもあれば、中央からのその他のものもあります。 変換するには、exiftoolの設定が必要です。



ExifTool_config_convert_regions

 %Image::ExifTool::UserDefined = ( 'Image::ExifTool::Composite' => { MyRegion => { Require => { 0 => 'RegionInfoMP', 1 => 'ImageWidth', 2 => 'ImageHeight', }, ValueConv => q{ my ($rgn, @newRgns); foreach $rgn (@{$val[0]{Regions}}) { my @rect = split /\s*,\s*/, $$rgn{Rectangle}; my %newRgn = ( Area => { X => $rect[0] + $rect[2]/2, Y => $rect[1] + $rect[3]/2, W => $rect[2], H => $rect[3], Unit => 'normalized', }, Name => $$rgn{PersonDisplayName}, Type => 'Face', ); push @newRgns, \%newRgn; } return { AppliedToDimensions => { W => $val[1], H => $val[2], Unit => 'pixel' }, RegionList => \@newRgns, }; }, }, MyRegionMP => { Require => 'RegionInfo', ValueConv => q{ my ($rgn, @newRgns); foreach $rgn (@{$val[0]{RegionList}}) { my @rect = @{$$rgn{Area}}{'X','Y','W','H'}; $rect[0] -= $rect[2]/2; $rect[1] -= $rect[3]/2; push @newRgns, { PersonDisplayName => $$rgn{Name}, Rectangle => join(', ', @rect), }; } return { Regions => \@newRgns }; }, }, }, ); 1; #end
      
      







この設定はインターネット上で見つかり、地域を両方向に変換できますが、必要なのは1つだけです。 これを行うには、次のパラメーターを指定してexiftoolを実行します。



 exiftool -config ExifTool_config_convert_regions "-regioninfomp\<MyRegionMP"' photo.jpg
      
      







その後、Microsoft Live Photo Galleryおよび同じスキームに準拠した他のソフトウェアに顔が正しく表示されます。





ほとんど利益になりますが、必要なすべての写真についてこのビジネスを自動化することに加えて、キーワードにSubjectとHierarchialSujectタグの名前を書いてください。 これらの目的のために、私はlightroomのプラグインを作成しました。これにより、必要な写真でのみプラグインを起動でき、それらを2倍にしたり既存の写真を消去したりすることなく、単にアーカイブ全体のカタログ作成者としてlightroomを使用しているため、キーワードを追加できます。



コードを破らないでください。しかし、それを改善する方法を伝える方が良いです。これはLRの最初のプラグインであり、一般的にluaを初めて見たときです。



プラグインには2つのファイルしかない



Info.lua



 return { LrSdkVersion = 3.0, LrSdkMinimumVersion = 1.3, -- minimum SDK version required by this plug-in LrToolkitIdentifier = 'com.adobe.lightroom.sdk.helloworld', LrPluginName = LOC "$$$/PicasaFaceToTag/PluginName=Picasa Faces to Tags", -- Add the menu item to the Library menu. LrLibraryMenuItems = { { title = "Write Picasa Faces to Tags", file = "PersonInImage.lua"}, }, VERSION = { major=4, minor=1, revision=0, build=831116, }, }
      
      







PersonInImage.lua



 --[[---------------------------------------------------------------------------- ------------------------------------------------------------------------------]] -- Access the Lightroom SDK namespaces. local LrTasks = import 'LrTasks' local LrProgressScope = import 'LrProgressScope' local LrApplication = import 'LrApplication' local catalog = LrApplication.activeCatalog() local photos = catalog:getTargetPhotos() local LrPathUtils = import 'LrPathUtils' local logger = import 'LrLogger'("lr") logger:enable('print') local function faceToTag() --[[Convert faces from picasa xmp tag to microsoft xmp ]] exeFile = LrPathUtils.child( _PLUGIN.path, "exiftool.exe" ) cfgFile = LrPathUtils.child( _PLUGIN.path, "ExifTool_config_convert_regions" ) redirect = LrPathUtils.getStandardFilePath('temp') .. "exiftool.stdout" local total = ( # catalog:getTargetPhotos() ) local exifArgs = {"-b -RegionName \>" .. redirect, --'-overwrite_original "-RegionName\>PersonInImage"', '-overwrite_original "-RegionName\>RegionPersonDisplayName"', '-config '..cfgFile..' -overwrite_original "-regioninfomp\<MyRegionMP"'} local progressScope = LrProgressScope{ title = "Write Picasa Faces to Tags", caption = "Updateting " .. total .. " photos." , } progressScope:setCancelable( true ) local parrent catalog:withWriteAccessDo("Create parrent keyword", function () parrent = catalog:createKeyword("names", {}, false, nil, true) --logger:debug("parrent keyword created: " .. tostring(parrent)) end) for completed, photo in ipairs(photos) do progressScope:setPortionComplete(completed, total) progressScope:setCaption("Updated " .. tostring(completed) .. " of " .. tostring(total) .. " photos") if progressScope:isCanceled() then progressScope:done() break end local path = photo:getRawMetadata('path') logger:debug(path) -- write filename to debug log for i,exifArg in ipairs(exifArgs) do local exeCmd ='"' .. exeFile.." "..exifArg.." "..path .. '"' local status = LrTasks.execute(exeCmd) if io.open(redirect):read() == nil then break end --check is there any names in the file --logger:debug(exeCmd) if status ~= 0 then logger:debug("Error "..exeCmd) progressScope:done() end end for name in io.lines(redirect) do if name ~= nil then -- check is there any pleople on photo logger:debug(name) catalog:withWriteAccessDo("Adding name keywords", function () local keyword = catalog:createKeyword(name, {}, true, parrent, true) logger:debug("keyword created: " .. tostring(keyword)) photo:addKeyword(keyword) --photo:setRawMetadata('personShown', keyword) --doesn't work logger:debug("keyword added: " .. name) end) end end end progressScope:done() end LrTasks.startAsyncTask(faceToTag)
      
      







すべての名前タグは「names」タグ内の階層構造に格納されます。xmplightroomスキームで動作しないプログラムは、単にフラットリスト+タグ「names」として表示されます。 プラグインを機能させるには、exiftool.exeとその構成をフォルダーに配置します。 一括ですべてをgithubからダウンロードできます



プラグインは機能しますが、欠点があります:





脅威。 ほぼ同じことを行い、パイカから顔を取り、タグで記述する2つのプラグインを見つけることができましたが、それらはすべてpicasa.iniからのみ顔を取り、XMPで記録された顔では機能しません。



All Articles