带视频流的Android视觉人脸检测

我正在尝试将脸部检测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)为视觉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来处理视频流,因为我发现所有代码都演示了内置相机的使用。

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

    链接地址: http://www.djcxy.com/p/92539.html

    上一篇: Android Vision Face Detection with Video Stream

    下一篇: Mediacodec encoder with input surface on Snapdragon