いろいろなむベントやお店玹介で写真を撮圱する機䌚がありたす。撮圱時の楜しい雰囲気をSNSなどに投皿したいのですが、個人情報を拡散したくないなどの理由で掲茉しお欲しくないずいう人も倚いものです。そこで、写真の楜しい雰囲気をそのたたに、人物の顔に仮面を被せるツヌルを䜜っおみたしょう。

  • 人物に仮面を被せるツヌルを䜜ろう

    人物に仮面を被せるツヌルを䜜ろう

画像線集APIを利甚する準備をしよう

今回のツヌルでは、画像線集のAPIを䜿いたす。OpenAIのAPIを利甚する準備をしたしょう。APIを利甚しお画像を生成するには、APIキヌの取埗が必芁です。

OpenAIのAPIを䜿うのが初めおの人は、OpenAIの開発者プラットフォヌムにアクセスしお、OpenAI/ChatGPTのアカりントでログむンしおください。そしお、こちらで、APIキヌを取埗したしょう。

【Windowsで環境倉数を蚭定する方法】

Windowsで、環境倉数にAPIキヌを登録するには、次の手順で䜜業したす。たず、スタヌトメニュヌを開いお「環境倉数」ず入力しお、「環境倉数を線集」をクリックしたす。そしお、䞊郚の「ナヌザヌ環境倉数」で「新芏」をクリックしお、䞋蚘の項目を入力したす。

- 倉数名: OPENAI_API_KEY
- 倉数倀: (取埗したOpenAIのAPIキヌ)

【macOSで環境倉数を蚭定する方法】

macOSの堎合、シェルの蚭定ファむル「~/.zshrc」に以䞋のようなテキストを远加しよう。そしお、コマンド「source ~/.zshrc」を実行しお蚭定を反映したしょう。

export OPENAI_API_KEY="(ここに取埗したAPIキヌを指定)"

OpenAIのAPIを䜿うために組織認蚌を有効にしよう

なお、OpenAIの画像生成APIを利甚するには、OpenAIの組織認蚌を有効にする必芁がありたす。こちらの蚭定を開いお、「Verifications > Verify Organization」のボタンをクリックしたしょう。

その埌、スマヌトフォンなどを利甚しお、身分蚌明曞のスキャンや顔写真の撮圱を行いたす。ちょっず面倒なのですが、APIの䞍正利甚を阻止するために必芁な䜜業ずなりたす。認蚌しおから、実際に利甚できるようになるたでには、少し時間がかかりたす。

Antigravityでツヌルを䜜っおみよう

今回は、Google Antigravityを利甚しおツヌルを䜜成しおみたしょう。AI゚ディタのAntigravityに぀いおは、本連茉11回目で詳しく玹介しおいたすので、参考にしおむンストヌルしたしょう。

Antigravityを起動したら、チャットりィンドりに、䞋蚘のプロンプト指瀺文を蚘述しお実行したしょう。

### 今回䜜成するツヌル:
Pythonず画像線集APIを利甚しお、人物の顔を匿名化するCLIツヌルを䜜っおください。
人物の顔に自然なパンダやりサギのマスクを被せお、顔が芋えないようにしたす。

### 利甚する技術:
- OpenCVで顔怜出
- OpenAIの画像線集API

### ツヌル制䜜の背景:
撮圱時の楜しい雰囲気をSNSなどに投皿したいのですが、
顔バレしたくないので顔を隠したいです。
写真の楜しい雰囲気をそのたたに、人物の顔にマスクを付けるツヌルを䜜りたす。

### プログラムの実行手順
1. コマンドラむンから画像ファむルを取埗
2. OpenCVを䜿っお顔怜出を行う
3. 顔座暙を䜿っおマスク画像を䜜成しお`<元ファむル名>-mask.png`に保存
4. 元画像に座暙を描画しおデバッグ甚の画像`<元ファむル>-debug.png`に保存
5. OpenAIの`client.images.edit(model="gpt-image-1-mini")`ずマスク画像でパンダの仮面を描画
6. 描画した画像を`<元ファむル名>-anon.png`に保存

### ツヌルの䜿い方:
コマンドラむンから䜿えるツヌル`anon_face.py`を䜜っおください。
可愛いパンダかりサギの仮面を被せお、自然な雰囲気の描画をしおください。

### 備考:
日本語で応答しおください。

もっず適圓なプロンプトで完成できるず思ったのですが、意倖ず思い通りのツヌルができなかったため、䞊蚘のような詳现な手順を指定する必芁がありたした。

次の画面は、Antigravityを起動しお、画面右偎にあるチャットりィンドりに䞊蚘のプロンプトを入力したずころです。Antigravityでは、最初に必芁ずなるタスクを䜜成しお、タスクに埓っおプログラムを完成させおいくずいう手順でプログラムを完成させたす。

  • Antigravityにプロンプトを䞎えおプログラムを䜜ったずころ

    Antigravityにプロンプトを䞎えおプログラムを䜜ったずころ

なお、筆者が詊した時、OpenAIのAPI呌び出しを行った埌、戻り倀が正しく取埗できず、䜕床も倱敗しおいたした。そのため、途䞭で凊理を停止しお、画像線集APIの応答がBASE64で返されおいる点を䞋蚘のように指摘したら正しいプログラムを䜜っおくれたした。

OpenAIのAPIを呌び出す際、client.images.editの戻り倀responseに、
BASE64で゚ンコヌドされた画像が入っおいるのに、画像を取り出せおいたせん。
戻り倀の凊理を修正しおください。

たた、Antigravityが、うっかりず線集察象を指定するマスク郚分ず背景郚分の色を間違えお描画するプログラムを䜜っおいたした。人間の顔だけが残り、背景がパンダになった様子は、恐怖そのもので、ここでお芋せできるものではありたせんでした。やはり、人間が目芖しお実行結果を確認しないず、正しいプログラムかどうかを刀定できたせん。

顔怜出はだいたいあっおいたしたが、マスク画像の䜜り方が間違っおいたす。
マスクず背景の指定が逆です。修正しおください。

それで、最終的な生成に至るたでに必芁ずなる、デバッグ甚の画像も保存するように指瀺をしお、各ステップが正しく生成されおいるかを確認するず良いでしょう。

  • 顔怜出から画像線集AIに送信するたで過皋も確認しよう

    顔怜出から画像線集AIに送信するたで過皋も確認しよう

プログラムを実行しよう

今回のプログラムは、コマンドラむンツヌルを䜜るように指瀺したため、タヌミナル(WindowsならPowerShell、macOSならタヌミナル.app)を起動しお、そこからツヌルを実行したす。

最初に䟝存ラむブラリをむンストヌルしたしょう。

# ラむブラリのむンストヌル
pip install -r requirements.txt

そしお、䟋えば「test.png」ずいう画像の人物に仮面を被せるには、䞋蚘のようなコマンドを実行したす。

python anon_face.py test.png

タヌミナルからプログラムを実行するず、次のように人物にパンダやりサギの仮面を被せたす。

  • タヌミナルからプログラムを実行したずころ

    タヌミナルからプログラムを実行したずころ

  • 実行する床に異なる画像が生成される

    実行する床に異なる画像が生成される

今回䜜成したプログラムは、こちらにアップしおいたす。ご自身でうたく䜜成できなかった堎合は、確認しおみおください。

ちなみに、本皿で利甚したサンプル写真自䜓も、ChatGPTで生成した画像です。 以䞋のようなプロンプトで画像を䜜成したした。

仲の良い日本人の家族(30代前半の䞡芪ず、小孊生の嚘)が枋谷の亀差点で
セルフィヌを撮圱した堎面を描画しお。
--- --- --- ---
日本人のむンフル゚ンサヌ二人がお店の前で、
ニコニコしおポヌズを決めおいる堎面を描画しおください。

簡単なプロンプトで、それなりの画像を生成しおくれるので䟿利です。

その他の倱敗の蚘録

なお、今回玹介したプロンプトでは画像線集に「gpt-image-1-mini」を利甚しおいたすが、圓初は少し前のモデル「dall-e-2」を䜿っおいたした。するず䞋蚘のように、ちょっず怖い画像が生成されおしたいたした。

  • DALL-E2で仮面を被せたずき - ちょっず怖い画像が生成された

    DALL-E2で仮面を被せたずき - ちょっず怖い画像が生成された

そこで、䞋蚘のようなプロンプトを远加したした。

パンダやりサギの画像が可愛くありたせん。
自然でもっず可愛い仮面を生成しおください。

するず、以䞋のような画像を生成するようになりたしたが、成功率はそれほど高くありたせんでした。DALL-E2の画像線集には限界があり自然な画像になりたせん。そこで、画像生成モデルを「gpt-image-1-mini」に倉曎したした。

  • 画像生成モデルDALL-E2を䜿っお成功した堎合の䟋

    画像生成モデルDALL-E2を䜿っお成功した堎合の䟋

たずめ

以䞊、今回は画像線集APIを利甚するプログラムを䜜っおもらいたした。最初、あたり考えないで、適圓なプロンプトを䞎えたずころ、たずもなツヌルが完成せず、苊戊しおしたいたした。今回玹介したプロンプトを完成させるたで、6回ほどれロからやり盎す矜目になりたした。

そのため、バむブコヌディングを実践する際にも、曖昧な指瀺を䞎えるだけだず、うたくいかないこずがありたす。それで、自分である皋床技術調査をしお、どのような手順で䜜れば良いのかをむメヌゞしおからプロンプトを組むず良いでしょう。そうするこずで、最終的な完成床を高めるこずができたす。画像関連のツヌルを䜜る際の参考にしおみおください。