IPhoneで顔認識を行う方法を教えてください。誰かが私に正しい方向を示すための参照/記事を提供してもらえますか?調査を行ったところ、まず画像を抽出するために顔検出を実行し、次にデータベース内の他の画像と比較して顔認識を実行する必要があることに気付きました。
OpenCVを使用するか、iOS 5.0以降を使用して顔を検出することで、顔検出を実行していることに気付きました。顔認識について確信が持てません(リモートデータベースに画像を保存してから、リモートデータベースと比較する予定です)。
顔検出
オープンCVで利用可能なHaarcascadesを使用して、迅速かつ正確な顔検出を実行します。
http://opencv.willowgarage.com/wiki/FaceDetection
顔認識
私は主成分分析(PCA)別名eigenfacesなどの方法を使用します。
http://www.cognotics.com/opencv/servo_2007_series/part_5/index.html
そのリンクは、OpenCVで動作するようにするためのチュートリアルを示しています。これはC用に書かれていると思いますが、基本的なjistを入手できると思います。
あなたが勇気を感じたら、それを自分で実装することも検討できます(それほど悪くはありません)...
http://www.face-rec.org/algorithms/PCA/jcn.pdf
http://blog.zabarauskas.com/eigenfaces-tutorial/
データベース
IPhoneではなくPCで実際にあなたと同じようなことをしましたが、それでも概念は同じです。すべての画像をBlobデータ型としてデータベースに保存し、必要に応じてプログラムにロードしました。
編集
データベースはシステムの特にトリッキーな部分です。これが最大のボトルネックになる場所だからです。私のアプリケーションでは、次の手順を実行します...
幸い、データベースサーバーはLAN上に配置されていたため、速度は問題になりませんでしたが、モバイルデバイスではデータ接続(速度/帯域幅)が制限されているために問題が発生する理由を確認できます。画像を圧縮することはできますが、画質の低下により認識率が低下する可能性があり、デバイスでデコードする必要があります。リモートデータベースをアプリケーションに公開する方法の問題もありますが、PHPとJSON(および他のテクノロジー、以下を参照)を使用してこれが可能であると私は信じています。
画像を電話にキャッシュするために、データベースとの初期同期を行うことができますか?いずれにせよ、あなたはおそらくあなたがどこかに関係なく電話で画像を持っている必要があるだろうと思います。
認識データ/画像をデータベースに保存するための最良の方法を見つけることは、私が直面した最大の課題の1つだったので、良い方法を見つけたらぜひ聞いてみたいと思います。
ご指摘のとおり、最初のステップ(顔の検出)はiOS 5と CoreImage.framework
。簡単な例:
CIImage *image = [CIImage imageWithCGImage:image_ref];
NSDictionary *options = [NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy];
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:options];
NSArray *features = [detector featuresInImage:image];
for (CIFaceFeature *feature in features)
{
CGRect face_bounds = [feature bounds];
CGPoint mouth_position = [feature mouthPosition];
// do something with these values
}
質問の2番目の部分(つまり、顔の認識)については、私よりも資格のある人にお任せします。 :)
OpenCVを使用してiOS 5で顔認識を実行するPedro Centieiroによる midian プロジェクトを確認する必要があります。それはgithubにあります:
それは私の libfacerec の一部を使用するため、顔認識のために固有顔、フィッシャーフェイス、ローカルバイナリパターンヒストグラムをサポートします。
顔認識は、機械学習アルゴリズムとして実装できます。 この本 には、このタスクとその実装方法を説明する章があります。読む価値があります!
単一値分解(SVD)、より具体的には Tensor SVD method を使用します。
次の顔認識APIがあります:-
1. OpenCV
2. Kairos
3. CraftarAR
4. AAFaceDetection
5. MoodMe
そして、私の意見では、オフラインアプリケーションで使用したい場合はCraftAR
が、オンラインで使用したい場合はKairos
が最適です。 OpenCV
も有名で信頼できるオプションです。
OPENCVの最大の利点は、オープンソースであることです。
これらをgoogleで検索して詳細を取得し、githubの例を見て、これらのAPIの動作を確認してください。