AIの証明写真は、盛るより先に「別人にしない」を決めた ― AI証明写真
証明写真で一番まずいのは、写りが悪いことではなく、面接の部屋で「写真と違う人が来た」と思われることです。
履歴書のテンプレートを売り始めて、すぐに気づいたことがあります。テンプレートを買った人は、次に写真で困る。

証明写真機は、写りを見比べる前に印刷が終わってしまう。写真館は、出かける時間が要ります。
それで、自撮りから証明写真を作って、履歴書のPDFに貼るところまでやるAI証明写真を作りました。自撮りを1〜4枚あげると16通りの写真ができて、選んだ1枚が、8様式ある履歴書の30×40mmの枠に入ります。¥980で、うちのテンプレートを買った人は¥580です。
作ってみて分かったのは、AIに写真をきれいにさせるのは簡単で、きれいにさせすぎないほうがずっと難しい、ということでした。
1「きれいにして」より先に「変えないで」を書いた
証明写真で一番まずいのは、写りが悪いことではないと思っています。面接の部屋に入ったとき、「写真と違う人が来た」と思われること。
なので、生成に渡す指示は、直す項目より先に、変えてはいけない項目から書きました。
生成の指示で、AIに任せたことと任せなかったこと
| 部分 | 整えてよい | 変えさせない |
|---|---|---|
| 顔 | 肌荒れ・目の下のクマ・額と鼻のテカリ | ◎顔立ち・骨格・目の大きさ・輪郭・ほくろの位置 |
| 肌の質感 | 毛穴と産毛は残したまま整える | ◎のっぺりした美肌加工 |
| 髪 | 寝ぐせと飛び出した毛 | ◎髪型の系統・長さ・毛量・髪の色 |
| 服と背景 | 服は3種から着せ替え、背景は無地に | ◎年齢感・肌の色 |
服はスーツにネクタイ、ネクタイなし、ジャケットにブラウスの3つから選べます。背景と照明は、写真館がやっていることを言葉にして渡しました。「大きなソフトボックスを正面やや上に」のように。
パスポートやマイナンバーカード、運転免許の申請には使えないことも、同意のチェックの横に書いています。加工した写真が認められていないからです。使えるのは履歴書とエントリーシート、アルバイトの応募まで。
21枚ずつ頼むのをやめて、1枚の紙に16マス描かせた
最初の版を出したのは9月7日の0時すぎでした。そのときは1枚ずつ生成していて、1枚あたり約35秒。4通り作れば、APIを4回呼ぶことになります。
その1時間後に作り方を変えています。4枚を2×2に並べた1枚の画像として描かせて、ブラウザで縦横ちょうど半分に切る。1536×2048の画像で、境目が768と1024の位置にピクセル単位で来ることを確かめてから入れました。原価は約3分の1です。
9月9日に画像モデルをgpt-image-2.5-flareに替えたら、1枚が10.7秒で出るようになりました。それなら、と同じ紙を4×4まで広げたのが今の形。
1回の生成でできる枚数の移り変わり
| いつ | 作り方 | 1回でできる枚数 | かかった時間 |
|---|---|---|---|
| 9月7日 0時台 | 1枚ずつ生成(1008×1344) | 1枚 | 約35秒 |
| 9月7日 1時台 | 2×2の1枚を切る(1536×2048) | 4枚 | 測っていない |
| ◎9月9日 | ◎4×4の1枚を切る(2304×3072) | ◎16枚 | ◎21秒 |
2304×3072は、APIが受け付けた3:4の中でいちばん大きいサイズでした。2048×2731も3072×4096も、400エラーで返ってきています。16等分すると1マスは576×768px。30×40mmに印刷すると488dpiになるので、切り出しても紙の上では粗く見えません。
3最初の16枚で、2列目の人が横を向いていた
16通りの振り方は、段で背景と光を、列でレンズと姿勢を変えることにしました。段は薄いブルーグレー、白、薄いグレー、ベージュ。列は85mm、105mm、70mm、135mmのレンズを想定した撮り方です。
最初のシートを見て、2列目で手が止まりました。「体だけをごくわずかに斜めにして肩のラインを作る」と書いた列で、顔まで横を向いている。宣材写真なら悪くない角度かもしれません。履歴書では使えない。
いまは16マスすべてに「顔はカメラの真正面、両耳が同じだけ見えること」を書き足しています。バリエーションは増やしたいのに、全部が履歴書に使える範囲に収まっていないといけない。この綱引きが、いちばん迷ったところでした。
AIに「いちばん良い1枚」だけを出させる案も考えて、捨てています。本人に似ているかどうかは、私にもAIにも判定できないので。判定できるのは本人だけです。
だから16枚を並べて、チェックを入れたものが元の自撮りと横に並ぶようにしました。スマホで2枚並べると1枚が175pxしかなく顔の違いが見えないので、そこだけは1枚を大きく出して切り替えます。
4検査は通っていたのに、写真を2mmずらしても気づかなかった
写真を履歴書に貼る処理は、組版済みの白紙のPDFに、pdf-libで画像を描き込む形です。枠の座標は8様式ぶん測って持っています。
失敗したのは、位置の検査のほうです。最初の検査は、保存した座標で写真を貼って、その結果を同じ座標と比べていた。わざと2mmずらしても通ってしまう。物差しが1本しかなかったんですよね。
いまは、履歴書の枠だけを色で塗ってPDFにしたものと、写真を貼った実物を、別々に画像にして測り、突き合わせています。同じ2mmのずれを入れると、今度はちゃんと落ちる(1.92mmのずれと報告されました)。普段のビルドでは、8様式とも差は0.06〜0.12mmです。
それでも、数字では見つからないものがありました。拡大したスクリーンショットを目で見たら、写真の枠が、枠を入れるマスの中で0.13mm左に寄っていた。左の余白が2.13mm、右が1.87mm。マスの内側の余白のせいで中央寄せが効いていなかっただけで、直すと2.00mmずつになりました。
検査が確かめていたのは「座標どおりに貼れたか」で、「その座標が正しいか」ではなかった。いまは売り物のPDFを、最後に拡大画像にして目で見てから出しています。
5顔写真を、どこに置いておくか
顔写真は、生成のためにOpenAI(米国)へ送ります。ここは避けられないので、同意のチェックを入れないと先へ進めない作りにしました。OpenAIは不正利用の監視のために最大30日保持すると公表していて、そのことも商品の画面に書いています。
こちらのサーバーには保存しません。自撮りはブラウザの中で長辺1024pxまで縮めてから送り、できた画像は返したらそれきり。
困ったのは再読み込みでした。1回の生成には原価がかかるし、決済後の作り直しは3回までにしている。画面を読み込み直しただけで16枚が消えたら、1回ぶん損をさせることになります。
できあがったシートは、ブラウザのIndexedDBに置いています。sessionStorageは5MB前後で頭打ちになり、数MBあるシートを入れると黙って失敗するので。
共用のパソコンで、次に使う人に前の人の顔が出てはいけない。そこで、タブごとに合鍵を作って、合鍵が一致するときだけ戻すようにしています。合鍵が違うものと、12時間より古いものは、見つけた時点で消す。「いま作った写真をこの端末から消す」ボタンも付けました。
6正直に言うと、まだ分からないこと
16枚のうち、どの列が選ばれているのかを、私は知りません。写真をこちらに残さない作りなので、知る手段が無いんです。
「本人に似ている」の線引きも、数字にできていません。指示には「別人にしない」と書いていても、守られたかを判定しているのは、元の自撮りと見比べる使う人の目だけ。
AIで作った写真を採用する側がどう受け取るかも、分からないままです。応募先の指示が最優先、と書くところまでしかできていません。
履歴書の学歴欄のほうは、生年月日だけで学歴が埋まる履歴書メーカーの記事に書きました。写真の細かい仕様は作品ページに、ほかの開発の話はブログ一覧に並べています。
作ってみて別人に見える写真が出たら、こちらから教えてください。何列目で起きたかが分かれば、次はその列の指示を直します。
この記事を書いた人
NextCode(沖縄県宜野湾市)は、iOSアプリ・ホームページ/LP・NFCデジタル名刺・AI業務自動化を作っている開発スタジオです。ここで書いているのは、実際に作って公開したものと、その過程で詰まったことだけです。
お問い合わせフォームは24時間受け付けています。