Faces APIには、デバイスのカメラから送られてくる既製の画像やストリームから人間の顔を検出して追跡する機能があります。 彼はこのタスクに非常に忍耐強く対処しています。
複雑な場合でも、アルゴリズムの障害が発生する可能性があります。
第一種のエラー |
第二種のエラー |
ライブラリは、単純な追跡に加えて、空間内の顔の向きを決定し、顔の主要点(鼻、目、口の角)の位置を計算し、簡単な認識を行います:人の目が開いている確率と笑顔の確率を決定します:
しかし、十分な紹介として、練習に移りましょう。 Instagramユーザーは毎分216千枚の写真をアップロードします 。 空に指を向けることで、それらの40%が自撮りだとします。 これは1440個/秒です! トレンドに参加して、自撮りを自動化するための小さなアプリケーションを作成してみましょう。 酸っぱい鉱山が好きな人は少ないので、笑顔だけを撮影します。 注意深い読者は尋ねますが、自動化とは何ですか? 簡単です。ユーザーがタッチでシャッターボタンを検索することを強制しないように、カメラに人がウィンクした後、自動的に写真を撮ります。
基礎として、Google のVision APIの公式例を使用します。 簡単にするために、カメラからフレームをレンダリングする質問は省略されています。 興味のある方はgithubのソースをご覧ください 。
Faces APIをプロジェクトに接続するには、gradleスクリプトで依存関係を指定するだけです:
compile 'com.google.android.gms:play-services-vision:7.8.0'
最初に、検出器のインスタンスを作成します。 Selfiesはほとんどの場合、純粋に個人的な問題であるため、たった1人の顔を追跡します。
FaceDetector detector = new FaceDetector.Builder(context) // .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS) // "" .setProminentFaceOnly(true) .setTrackingEnabled(true) .build();
検出器の「頭脳」、つまり処理アルゴリズムを作成します。 検出器には、検出された各顔のハンドラーのインスタンスを作成するファクトリーが必要です。
private class GraphicFaceTracker extends Tracker<Face> { @Override public void onUpdate(FaceDetector.Detections<Face> detectionResults, Face face) { boolean isSmiling = face.getIsSmilingProbability() > 0.4; if (isSmiling) { float leftEye = face.getIsLeftEyeOpenProbability(); float rightEye = face.getIsRightEyeOpenProbability(); if (Math.abs(leftEye - rightEye) >= 0.6) { takeShot(); // } } } } private class GraphicFaceTrackerFactory implements MultiProcessor.Factory<Face> { @Override public Tracker<Face> create(Face face) { return new GraphicFaceTracker(); } }
検出器にファクトリインスタンスを渡します。
GraphicFaceTrackerFactory trackerFactory = new GraphicFaceTrackerFactory(); MultiProcessor<Face> processor = new MultiProcessor.Builder<>(trackerFactory).build(); detector.setProcessor(processor);
あとは、カメラからストリームを作成して開始するだけです。 重要! カメラが不要になったら、正しく停止することを忘れないでください。 そうしないと、カメラはロックされたままになり、電話機が再起動するまで、単一のアプリケーションがカメラにアクセスできなくなります。
CameraSource cameraSource = new CameraSource.Builder(context, detector) .setFacing(CameraSource.CAMERA_FACING_FRONT) .build().start();
だから。 コンパイルします。 始めます。 同僚に試してみます。
一般に、Faces APIは、開発者とユーザーの両方に心地よい印象を与えます。 開発者は開発の単純さと容易さを好み、ユーザーは作業の速度と品質を好みます。 Playストアでの顔認識を使用したアプリケーションの追加をお待ちしています。
便利なリンク:
Googleドキュメント
アプリケーションソース