この簡単な例に従って、顔検出を写真アプリに組み込みました。
簡単にするためにすべての形状描画を削除し、写真の頭の数をカウントする API を探しています。
前面カメラを使用して写真を撮り、一貫して顔を検出しません。
また、コードを実行するたびに発生する非常に疑わしい警告がログに記録されます (これは、私が行っていることとは何の関係もないようですが、それでも毎回表示されます - 警告は次のとおりです。
W/ResourcesManager: Asset path '/system/framework/com.android.media.remotedisplay.jar' does not exist or contains no resources.
W/ResourcesManager: Asset path '/system/framework/com.android.location.provider.jar' does not exist or contains no resources.
これが私のコードです
写真のコールバック
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
try {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferQualityOverSpeed = true;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inPurgeable = true;
options.inInputShareable = true;
options.inMutable = true;
Bitmap temp = BitmapFactory.decodeByteArray(data, 0,
data.length, options);
countHeads(temp);
} catch (Exception e) {
Log.d(TAG, "onPictureTaken callback failed : " + e);
}
}
};
ヘッドカウンター
private void countHeads(Bitmap b){
Frame frame = new Frame.Builder().setBitmap(b).build();
FaceDetector faceDetector = new FaceDetector.Builder(getApplicationContext()).setTrackingEnabled(false)
.build();
if(!faceDetector.isOperational()){
BPCAlertDialog.alert(this, "Can't build face detection");
return;
}
SparseArray<Face> faces = faceDetector.detect(frame);
//this always prints 0
Log.d(TAG, "I COUNT " + faces.size() + " FACES IN THIS PHOTO");
}