FaceChecker

正式公開版 Ver 1.4(98/7/13公開)


顔の画像データを元に、その人の年齢を推定します。
また、その解析結果から顔の立体形状を生成し、画像データをテクスチャとして貼り付けることで、画像内の顔を立体に変換し、これをリアルタイムで動かせます。また、ポリゴンを変形させることで、年齢が変わった状態の顔を生成することができます。

FaceChecker ver1.4をダウンロードする(Windows95/98/NT4.0用、自己解凍、134KB)

なお、このプログラムを実行するには、DirectX3以降がインストールされている必要があります。インストールされてない場合、「D3drm.dllが見つからない」というメッセージが表示されます。また、デスクトップの画面の色数を必ず6万色にして動かしてください。

あと、Ver1.4はウインドウモードのDirectX専用に作ってあるため、かなり多くの環境で動かない可能性があります(特に、このソフトの場合、新しいビデオボードのHALの方が動作が怪しい可能性が高い)。画面モードなどを変えてみれば大体動くと思いますが、どうしても動かない場合、DirectXを用いない昔のバージョンを使ってください。こちらならほとんどの環境で動作すると思います。ただし、年齢判定機能しかありません。

FaceChecker ver1.1をダウンロードする(Windows95/98/NT4.0用、自己解凍、191KB)


作者のたわごと

98/7/14日、Ver1.4 公開

 DirectX周りで一部バグってたので直しました(リソースリークなど)。で、バグ取りだけでもなんなので、細かい改造もしてあります。まず、2の階乗のものに限るというビットマップの大きさに関する制限を解決しました。ただ、どうしてもDirect3Dのテクスチャとして処理している都合上、最大512x512です。これを越えると、はみ出た部分をカットして512x512にします。
 あと、今までは完全に正面を向いた画像てないとだめでしたが、少しずれているぐらいなら補正できるようにしました。といっても、年齢判定の方はもともとある程度ずれていても平気に作ってあったので、今回はポリゴン化の方で、テクスチャの貼り付けを斜め方向からできるようになってます。ウイザード使用の場合、鼻の水平位置で、顔の水平方向の回転は自動的に補正します。ただ、顔が少し上向きとか、少し傾いているとかは自動で補正できませんので、手動で補正してください。Tキーを押すと、その時点でのオブジェクトの向き方向でテクスチャを張りなおします。これ、少しコツが入りますが、試行錯誤でがんばってください。

98/5/23日、Ver1.3 公開

 またまた、ふっと思い付いたのでさっそく実験を(笑)。
年齢推定&ポリゴン生成が可能なのであれば、年齢から逆算して特定の年齢のポリゴンを生成できるのではないのかということで、実際に実現してみました。最後でポリゴンが表示された時点で、下のスライダを動かすと年齢を変化させることができます
 まじめにこれをやるには、本当は全点を再計算するべきなんですが、手抜きして目ラインから下のポリゴンを縦方向に線形変形しているだけです。そのため、Direct3DのRMでさくっとリアルタイム変化が可能となっています。手抜きしているせいであまり年齢を変化させるとみょーな顔になりますが、そのところは大目に見てください。結構笑えます。

98/4/13日、Ver1.2 公開

 ふと、物体の基本形状が分かっているのなら、平行ラップを用いることで画像データを自動的にテクスチャポリゴンに変換できるなあと思い付いたので、発作的にFaceCheckerで実験してみました(笑)。

 Direct3Dを用いる都合上、今度は使用コンパイラがVC++5になったので、インターフェイス周りが旧バージョンと比べていろいろと変わってます。
# Direct3D周りにNekoFlightで作ったライブラリ使っているんですが、これVC++のMFCに依存するものにしてしまったのでこのライブラリがC++Builderに移植できなかったためです。C++Builder、MFCに対応はしてるんだけど、VCLと相性悪いです。当たり前ですが(^^;

 なお今回のバージョンでは、ビットマップをDirect3Dのテクスチャとして処理している都合上、読込めるビットマップファイルが画像の大きさが2の階乗のもの(256x256とか512x512)に限ります。この制限はあとで直したいところです。
 とりあえず顔の画像データを適当に準備してこのソフトにかけて見てください。
感動することうけあい。なんと、ビットマップ画像の中の顔を好きな方向に向けることができます!!(さすがに後ろを向かせることはできません(笑)。上下40度ぐらいでしょうか)。
まあ、特に何かの役に立つわけではないですけど(^^;結構笑えます。ただ、Direct3Dが遅い環境だとちとつらいかも知れません。

98/4/6日、Ver1.1 公開

 C++ Builderのバージョンが3に上がったので、FaceCheckerも一応バージョンを上げておきます。機能的には画像のスクロール機能が付いただけです。あとC++ Builderイメージコントロールの機能が少し上がっているらしく、256色時の表示が少しまともになりました。しかし、C++ Builderは便利でいいですねぇ。

98/3/24日、Ver1.0 公開

 皆さん、人の顔を見たときになんとなくその人の年齢が予想できると思いますが、それをプログラムに判断させてみようという大胆な試みです。
 これを作り始めたきっかけですが、最近、国会に提出されている例の未成年者買春禁止法案というのを聞いたからでして、どうも絵も取り締まりの範疇に入るらしいんですよね、これ。で思ったことが、じゃ、マンガとかゲームも取り締まるとして、どうやって18才未満だと判定するんだかなぁと、疑問に思ったのがきっかけです(しょーもない理由ですが(^^;)。
 プログラムの基本的な部分は、昔暇つぶしに作った似たようなものがあったので、それにインターフェイスをつけただけなんですが、今回いつものVC++でなく、C++Builderで作ったので、非常に簡単に作れました。
 あと、肝心の年齢判定方法ですが、基本的に、目のラインと鼻のラインの距離を元に推定してます。ただ、この距離を何と比較して年齢に換算するのかが非常に難しく、いろいろ試行錯誤した結果、頭蓋のセンター位置と目のラインの距離と比較すると良いんではないかということで、そうしてます。ですから、頭でっかち&目と鼻の距離が短い場合に、年齢が若く見積もられることになります。これは、頭蓋骨が成長するときには、先に頭蓋の方の骨が出来上がって、後に顔下部の方が出来上がるからです。特に、成長期には、目の下部が成長するので、そのあたりを判断基準にしてます。
 問題は、年をくった場合の判断方法ですが、このバージョンでは特に何も考えてないので、場合によってはとんでもない値が出ることがあります。20過ぎたら、誤差が+−40歳ぐらいあると思ってください。そもそも、冗談ソフトですので、あまり細かいことは気にしないように(笑)。えらの張り具合で算出できる気もしますが、単に太っているかの判定になってしまう気がしますので、このあたりは保留です。顔からの年齢算出方で定番があったらだれか教えてください。これをまじめに研究している人もいると思いますが、私はこのあたり全然素人で、今回のプログラムは直感で作りましたので、もしかするともっといい方法があるのかもしれません。


ソフトウェアトップページに戻る