オリジナル記事: 1と2 。
そこにはすべてが正しく正しく書かれていますが、まだ幸せはありません。
注目を集める画像:
タスクは簡単です-写真に写っている人に印を付けて、自分にとって都合の良い方法で最大数の場所でそれを使用できるようにすることです。
Picasaで顔を祝います。これは、Googleの連絡先、クロスプラットフォーム、自動検出、ファイル内のタグストレージ(ニュアンス付き)にバインドしているためです。 しかし、gallery3のすべての場所でこれらのタグを見て使用したいと思います。彼女はカタログ作成者として使用しているため、lightroomで、Microsoft Live Photo Galleryで使用しているため、マイクロソフトエクスプローラーで、そして、なぜそれも使用しないのですか。
誰も混乱したい-猫へようこそ。
問題番号1パイカは顔情報をどこに保存しますか?
3つのオプション:
- または、これは2つのファイルの集まりです。ユーザープロファイルのcontacts.xmlと写真のあるフォルダーのpicasa.iniです。 このオプションは、picasバージョン3.9未満および最後のpicasで「写真に名前タグを保存する」チェックボックスをオフにして顔にタグを付けた場合に当てはまります。
- 2番目のオプションは、最後のpicasaのみを使用し、顔のタグ付けを開始する前に[写真に名前タグを保存]チェックボックスをオンにした場合、XMP-mwg-rsに顔を保存します。
- そして最後に、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からダウンロードできます
プラグインは機能しますが、欠点があります:
- PersonInImageを記述することはできません。exiftoolで記述された場合、lightroomによって上書きされ、SDKを介して直接書き込むことは不明な理由で機能しません。 写真:setRawMetadata( 'personShown'、keyword)はエラーでクラッシュします。 これを2つの異なるボタンに配置して、メタデータを手動で再読み取りできますが、これも見苦しくなります。
- 写真で約1秒間ゆっくりと動作しますが、大きなアーカイブではこれが問題になります。おそらくcookbooks.adobe.com/post_ExifTool___making_it_scream_-19501.htmlを使用して書き換える方が高速になります。
- プラグインはexiftoolとlightroom SDKの両方を使用して書き込むため、作業の最後にメタデータの競合が定期的に発生し、手動でCtrl + sで保存する必要があります。 Lightroomがプログラムでメタデータを読み書きする方法を知っている場合は、登録を解除します。 これまでのところ、lrBindホットキーのエミュレーションのみのオプションを考え出しましたが、これは美しくありません。
- これはプラグイン、システム全体の問題ではありません。ravをテストしてからエクスポートすると、顔に関する情報は失われますが、タグは保存されます。これは利益です。
脅威。 ほぼ同じことを行い、パイカから顔を取り、タグで記述する2つのプラグインを見つけることができましたが、それらはすべてpicasa.iniからのみ顔を取り、XMPで記録された顔では機能しません。