【发布时间】:2017-07-02 16:25:03
【问题描述】:
我正在尝试制作一个相机应用程序,它使用带有自定义相机实例的 Google 移动视觉 API 来检测人脸,这与 Google API 中的“CameraSource”不同,因为我也在处理帧以检测颜色并使用 Camerasource我不允许获取相机帧。
搜索此问题后,我发现的唯一结果是关于将移动视觉与它的 CameraSource 结合使用,而不是与任何自定义 camera1 API 结合使用。 我试图覆盖帧处理,然后对输出的图片进行检测,如下所示:
camera.setPreviewCallback(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
Log.d("onPreviewFrame", "" + data.length);
Camera.Parameters parameters = camera.getParameters();
int width = parameters.getPreviewSize().width;
int height = parameters.getPreviewSize().height;
ByteArrayOutputStream outstr = new ByteArrayOutputStream();
Rect rect = new Rect(0, 0, width, height);
YuvImage yuvimage = new YuvImage(data, ImageFormat.NV21, width, height, null);
yuvimage.compressToJpeg(rect, 20, outstr);
Bitmap bmp = BitmapFactory.decodeByteArray(outstr.toByteArray(), 0, outstr.size());
detector = new FaceDetector.Builder(getApplicationContext())
.setTrackingEnabled(true)
.setClassificationType(FaceDetector.ALL_LANDMARKS)
.setMode(FaceDetector.FAST_MODE)
.build();
detector.setProcessor(
new MultiProcessor.Builder<>(new GraphicFaceTrackerFactory())
.build());
if (detector.isOperational()) {
frame = new Frame.Builder().setBitmap(bmp).build();
mFaces = detector.detect(frame);
// detector.release();
}
}
});
那么有什么方法可以将移动视觉与我的相机实例关联起来,以便进行帧处理并用它来检测人脸? 你可以在这里看到我到目前为止所做的事情: https://github.com/etman55/FaceDetectionSampleApp
**新更新
在找到 CameraSource 类的开源文件后,我解决了大部分问题,但现在在尝试检测人脸时,检测器会正确接收帧但它无法检测到任何内容 >> 你可以在github 仓库。
【问题讨论】:
-
我认为很难支持 API 级别 21 的 Vision API 检查 Android Vision API 的先决条件是 SDK 级别 26 或更高级别,并且从 API 级别 21 不推荐使用 camera1 github.com/googlesamples/android-vision developer.android.com/reference/android/hardware/Camera.html跨度>
-
实际上 android vision 正在使用他们自己的 camera1 Api 类,并且它被 proguard 锁定,所以很难弄清楚这就是我制作自定义 camera1 类的原因
标签: android camera face-detection android-vision