我正在尝试将脸部检测API整合到我从鹦鹉bebop无人机接收的视频流中。
使用MediaCodec类(http://developer.android.com/reference/android/media/MediaCodec.html)解码流,这很正常。我可以使用来自解码器的解码帧数据成功访问ByteBuffer,而不是将解码后的帧数据渲染到表面视图。
我还可以从解码器访问解码的图像对象(类https://developer.android.com/reference/android/media/Image.html),它们有时间戳,我得到以下信息:
我尝试做的第一件事就是通过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处理视频流,因为我发现的所有代码都证明了使用内置摄像头。
如果你能指出我正确的方向,我会非常感激。