2017-04-05 11 views
1

私はアンドロイドのビジョンapiを探索し、アンドロイドの開発者のドキュメントで提供されているgithubサンプルを追跡しています。サンプルアプリケーションは顔を検出しています。アンドロイドモバイルビジョンAPIカスタム検出器が顔を検出しない

検出された各顔を切り抜きたいと思います。 私はrect objに左、上、右、下の座標を持っています。

しかし、顔を切り抜くためのソースビットマップがありません。ここでは、このSOF post

に与えられたカスタム検出器を使用して

1.Tried myFaceDetectorのSparseArray検出(フレーム枠)メソッドが繰り返し呼び出さなっていると、それが検出されていません。

私はを行っている事プロセッサセットが呼び出されていません。 私は、カメラのプレビューが開始された後に呼び出さなっていません)以下のコード

FaceDetector detector = new FaceDetector.Builder(context) 
      .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS) 
      .build(); 

    MyFaceDetector myFaceDetector = new MyFaceDetector(detector); 

    myFaceDetector.setProcessor(new MultiProcessor.Builder<>(new GraphicFaceTrackerFactory()) 
    .build()); 

    mCameraSource = new CameraSource.Builder(context, myFaceDetector) 
      .setRequestedPreviewSize(640, 480) 
      .setFacing(CameraSource.CAMERA_FACING_FRONT) 
      .setRequestedFps(2.0f) 
      .build(); 

GraphicFaceTrackerFactoryを(使用していました。

2.カメラの画像をソースビットマップとして撮影しようとしましたが、連続して撮影しました。

どのようなヘルプも非常に便利です。お気軽に。

答えて

0

検出された各顔を切り抜きたい。私は左、上、右、下の座標を持つrect objを持っています。顔が検出されたら、あなたはFace.getPosition()、Face.getHeight()、およびFace.getWidth()

ここ

myFaceDetectorので顔の位置や大きさを得ることができ

SparseArray detect(Frame frame)メソッドが繰り返し呼び出され、顔を検出していません。

正しい向きを設定しようとしましたか? Frame.BuilderにsetRotation(ROT)を追加します。ここで、ROTは、0,1,2,3のいずれかの値を持つintです(それぞれ0,90,180、および270deg。を表します)。これはあなたの引用された答えの注釈として言及されました:)

しかし、私は顔をトリミングするソースビットマップが不足しています。ビットマップは、サイドノートとしてこの

Bitmap frameToBitmap(Frame currentFrame){ 
    ByteBuffer buffer = currentFrame.getGrayscaleImageData(); // getBitmap only works when the frame was created using Bitmap 
    byte[] bytes = new byte[buffer.capacity()]; 
    buffer.get(bytes); 
    int[] pixels = applyGrayScale(new int[bytes.length], bytes, img.getWidth(),img.getHeight()); 
    return Bitmap.createBitmap(pixels, img.getWidth(), img.getHeight(), Bitmap.Config.ARGB_8888); 
} 

static int[] applyGrayScale(int[] pixels, byte[] data, int width, int height) { //from another SOF answer... 
    int p; 
    int size = width*height; 
    for(int i = 0; i < size; i++) { 
     p = data[i] & 0xFF; 
     pixels[i] = 0xff000000 | p<<16 | p<<8 | p; 
    } 
    return pixels; 
} 

など、現在のフレームから生成することができる

、CamerSourceクラスの利用可能なコードは、隣接例であるが、ある:BarCode Reader

関連する問題