带视频流的Android Vision人脸检测

时间:2015-10-16 14:54:12

标签: android video-streaming mediacodec android-vision

我正在尝试将脸部检测API整合到我从鹦鹉bebop无人机接收的视频流中。

使用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对象不为空,但是当我调用googleVis.getBitmap()时,我会得到null。随后,Facedetection不起作用(我想因为我的视觉框架对象存在问题......)

即使这样可行,我也不知道如何使用vision api处理视频流,因为我发现的所有代码都证明了使用内置摄像头。

如果你能指出我正确的方向,我会非常感激。

0 个答案:

没有答案