3

parrot bebop ドローンから受信しているビデオ ストリームに顔検出 API を統合しようとしています。

ストリームは MediaCodec クラス ( http://developer.android.com/reference/android/media/MediaCodec.html ) でデコードされ、これは正常に機能しています。デコードされたフレーム データをサーフェス ビューにレンダリングするのではなく、デコーダからのデコードされたフレーム データを使用して ByteBuffer に正常にアクセスできます。

デコーダーからデコードされた画像オブジェクト (クラスhttps://developer.android.com/reference/android/media/Image.html ) にアクセスすることもできます。それらにはタイムスタンプがあり、次の情報を取得します。

  • 幅: 640
  • 高さ: 368
  • フォーマット: YUV_420_888

私が最初にやろうとしたことは、Framebuilder (android/gms/vision/Frame.Builder) を介して Vision API (com/google/android/gms/vision/Frame) の Frame オブジェクトを生成することでした。

...
 ByteBuffer decodedOutputByteBufferFrame = mediaCodec.getOutputBuffer(outIndex);
Image image =  mediaCodec.getOutputImage(outIndex);
...
decodedOutputByteBufferFrame.position(bufferInfo.offset);
decodedOutputByteBufferFrame.limit(bufferInfo.offset+bufferInfo.size);
frameBuilder.setImageData(decodedOutputByteBufferFrame, 640, 368,ImageFormat.YV12);
frameBuilder.setTimestampMillis(image.getTimestamp());
Frame googleVisFrame = frameBuilder.build();

このコードではエラーは発生せず、googleVisFrame オブジェクトは null ではありませんが、 を呼び出すgoogleVis.getBitmap()null. その後、Facedetection が機能しません (私のビジョン フレーム オブジェクトに問題があるためだと思います...)

これが機能したとしても、見つけたすべてのコードが内部カメラでの使用を示しているため、ビジョン API でビデオストリームを処理する方法がわかりません。

あなたが私を正しい方向に向けることができれば、私はとても感謝しています.

4

0 に答える 0