Pixivに投稿したイラストを自分のホームページにもギャラリーとして載せているのですが、その際に顔部分を切り出してサムネイルとして保存する作業を自動化してみました。
処理フローは以下の通りです。
- 入力ファイルを受け取る
- 顔検出を行い、最も信頼度スコアが高かった領域を切り出す
- 所定の大きさにリサイズして、ファイル保存する
利用するライブラリはOpenCVです。最新バージョンである5では、それまでメインにあった機能が外部ライブラリに移動しているので、古い情報を参考にする場合は注意が必要です。まあ、必要なライブラリをインストールすれば使えるので、大きな問題にはなりません。
顔検出は従来の方式とディープラーニングを使った方式があり、OpenCVとしては後者を主に据えています。顔検出のためのAIモデルは自分で入手しなくてはなりません。リアルな人間の顔を学習したモデルでは、アニメイラストの顔検出において精度が非常に低くて使い物にならないので、アニメイラストで学習したモデルを使う必要があります。Hugging faceで適切なモデルを探しましょう。なおHugging faceにはモデルの他にデータセットなども公開されていますが、今回は出来合いのモデルを利用します。
onnxファイルがどの仕組み向けのモデルか分からないのは不便ですが、今回はYOLOv8を使いました。アニメイラストで学習したディープラーニングモデルはさすがに精度が良くて、瞑目したイラストでも正しく顔検出が出来ました。
具体的なコード等は、下記のwikiページにまとめています。