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 でビデオストリームを処理する方法がわかりません。
あなたが私を正しい方向に向けることができれば、私はとても感謝しています.