Google Faces APIの例

少し前、GoogleはGoogle Play Servicesライブラリのバージョン7.8をリリースしました。 主要な革新の中には、2つの大きなコンポーネントで構成される新しいMobile Vision APIがあります。さまざまなバーコードとQRコードをスキャンおよび認識するためのバーコードAPIと、写真内の顔を検索および追跡するための更新されたFaces APIです。 猫の下で、私たちはFaces APIに精通し、その主な機能を検討し、小さなアプリケーションを作成します。



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();
      
      





検出器の「頭脳」、つまり処理アルゴリズムを作成します。 検出器には、検出された各顔のハンドラーのインスタンスを作成するファクトリーが必要です。 携帯電話のフロントカメラの前でたくさんの微調整を使用して、経験的に決定されました。写真の多少適切な笑顔の値は0.4以上であり、ウィンクは次のように形式化できます。 。 さて、ハンドラーにこのアルゴリズムを実装します。



 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ドキュメント

アプリケーションソース



All Articles