Mobile Vision API
Android の画像認識の API です。
Google Play Service で提供される。
下記の公式サンプルコードや解説記事が公開されている
Detect Facial Features in Photos
Mobile Vision API の設定
app/build.gradle
dependencies {
// 追加する
compile 'com.google.android.gms:play-services-vision:10.2.0'
}
AndroidManifest.xml
<manifest
<!-- 追加する -->
android:installLocation="auto"
package="xxx">
<application
android:theme="@style/AppTheme">
<!-- 追加する -->
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
<!-- 追加する -->
<meta-data
android:name="com.google.android.gms.vision.DEPENDENCIES"
android:value="face" />
<activity android:name=".MainActivity">
画像ファイルから顔検出する
初期の API にバグがあったようです。
公式サンプルコードでは、FaceDetector の代わりに、
SafeFaceDetector.java が提供されている。
// FaceDetector を生成する
FaceDetector detector = new FaceDetector.Builder(context)
.setTrackingEnabled(false)
.setLandmarkType(FaceDetector.ALL_LANDMARKS)
.build();
// 画像ファイルを bitmap 形式で読み込む
InputStream stream = getResources().openRawResource(R.raw.face);
Bitmap bitmap = BitmapFactory.decodeStream(stream);
// Frame を生成する
Frame frame = new Frame.Builder().setBitmap(bitmap).build();
// 顔検出する
SparseArray<Face> faces = safeDetector.detect(frame);
// ランドマークを取得する
Face face = faces[0];
List<Landmark> landmarks = face.getLandmarks();
検出した顔の上にランドマークを表示する
公式サンプルコードでは、FaceView.java が提供されている。
下記のような処理を行う。
View#onDraw にて、顔のbitmapを描画する。
その上に、緑の円 (Circle) を描画する。
その際に、canvas の大きさに合うように、canvas と Bitmap の大きさの比率を求め、円の位置を調整する。
スクリーンショット
サンプルコードをgithub に公開した。
https://github.com/ohwada/Android_Samples/tree/master/Vision1
関連記事
- Camera2 API と Mobile Vision API を使って 顔検出する
- [Camera2 API と Mobile Vision API を使って バーコードを検出する]
(https://qiita.com/ohwada/items/7caf29e1acc28b96042b) - [Camera2 API と Mobile Vision API を使って 文字列を検出する]
(https://qiita.com/ohwada/items/7a09420b4838b4df7a12) - Camera2 API と Mobile Vision API を使って 顔とバーコードを一緒に検出する