Kristopher Baker iOSを土台に · プロダクトシステム · AI支援ワークフロー
← 制作中へ
active updated yesterday

KiFinder

大きな混在アルバムの中から、特定の一人の写真だけを見つけるローカルでプライバシーファーストのMacアプリ。娘の希穏の保育園が毎月送ってくる写真アルバムがきっかけでした。クラス全員が写った何百枚もの写真が入ったzipファイルが何個も届き、Photosアプリに入れる前に、その中から希穏が写っているものを手で選り分けていたのです。人物をエンロールし、アルバムをスキャンし、本物の一致をkeepして、Photosに書き出す。処理はすべて端末上で動きます。

macOSSwiftUISwiftPython顔認識InsightFaceローカルファーストプライバシー

毎月、娘の希穏の保育園から写真アルバムが届きます。実際にはzipファイルが何個か届き、それぞれにクラス全員が写った何百枚もの写真が入っていて、そのどこかに希穏の写った十数枚があります。やることはいつも同じ。全部を解凍し、よその子たちが写った何百枚もの写真をスクロールして、自分の子を選び出し、それをPhotosアプリに入れる。ありがたい悩みではありますが、毎月やるとなると面倒な作業です。

そこでKiFinderを作りました。その選り分けをやってくれる小さなMacアプリです。人物をエンロールするには参照写真を数枚ドロップし、アルバム(フォルダ、ばらの画像、あるいは届いたままの保育園のzipファイル)に向けると、すべての写真を三つの山に仕分けます。確信のある一致、もう一度見ておきたいもの、そして残り。確信のあるものをざっと確認し、迷うものに目を通し、正しいものをkeepして、keepしたものをそのままPhotosに書き出します。集合写真には専用の扱いがあります。クラス写真には十数個の顔が写っているので、検出した顔をすべて表示し、自分が意図する顔をタップします。中身では、InsightFaceのArcFaceモデルによる端末上のエンベディングで、各顔がエンロールした人物にどれだけ近いかをスコア付けし、本物の写真を取りこぼさず、誤検出に埋もれさせないよう、しきい値を自分で調整します。

KiFinderのレビュー画面。類似度スコア付きでKeepと印された一致のグリッド、その下の「もう一度見ておきたい」の列、そして集合写真の各顔を選択用に枠で囲んだインスペクタ。 スキャンの見直し。KiFinderは確信のある一致を自動で選び、際どいものは「もう一度見ておきたい」として脇に置き、残りは外します。集合写真では検出した顔をすべて表示するので、正しい顔をタップできます。デモでは娘ではなく自分をエンロールし、ほかの人物は合成顔で代用しています。

端末上で動くことは、あれば嬉しい機能ではなく、まさに核心です。これらのアルバムには、よその家庭の子どもたちが大勢写っています。自分の子を見つけるために、他人の子の写真を何百枚もクラウドサービスにアップロードするのは、まったく逆の取引です。KiFinderは写真をどこにも送りません。モデルはローカルで動き、オリジナルは一切変更されず、端末から出ていくのは、私がkeepに選んだ数枚だけです。

KiFinderの「人物をエンロール」ダイアログ。LOCAL-ONLYバッジ、「このMacから出ることはありません」と書かれたドロップゾーン、参照写真のサムネイルの列。 人物のエンロールは、参照写真を5枚から十数枚ドロップするだけ。顔はMac上で切り出され、外には出ません。それがこのアプリの基本姿勢です。

そして、私の判断から学びます。スキャンのあと、本物の一致をkeepし、似ているだけの顔をスキップすると、その訂正が人物のプロファイルに反映され、翌月のアルバムでより良くランク付けされます。しかも一ピクセルもモデルにかけ直すことなく。keepしたものは、人物と月でまとめたライブラリに集まり、Photosに渡せる状態になります。

KiFinderのライブラリ画面。一人の人物の保存済み写真を月ごとにまとめて表示。 keepしたもの。人物と月でまとめたライブラリに集まり、Photosに書き出せる状態です。

これ全体を、私の敵対的ビルドハーネスであるSparraを回して作りました。おかげでKiFinderは、その最初の本物のテスト対象の一つになりました。下のアップデートが制作ログです。マッチングエンジン、私の訂正から学ばせた話、そしてその周りで育っていったMacアプリ。

アップデート 5

次へ

Domestique 制作ログを見る