android 获取视频流,摄像头旋转后,获取人脸坐标不准确,如何解决?
一:问题描述
在做摄像头开发时,需要检测人脸,在人脸四周,画一个边框,当摄像头未做旋转时,不会有任何问题,当摄像头旋转90度(或270度),获取到的人脸坐标就不准确,代码如下:
二:出现问题的图片

这是摄像头未作旋转时的流,我是手机横着测试的。

这是摄像头旋转90度是的流,我手机是竖着测试的
三:xml布局
代码获取流宽度和高度是(640,480),已将摄像头预览视图,画人脸边框视图,宽高动态设置为(640,480),画人脸边框代码如下:
由于摄像头旋转90度,我偿试将画人脸边框的imageView,旋转90度,还是不行,代码如下:
请问各位大神,如何解决这个问题,如觉得问题未描述清楚,麻烦留言,感谢大家了。
在做摄像头开发时,需要检测人脸,在人脸四周,画一个边框,当摄像头未做旋转时,不会有任何问题,当摄像头旋转90度(或270度),获取到的人脸坐标就不准确,代码如下:
PointF pointF = new PointF();
face.getMidPoint(pointF);
二:出现问题的图片

这是摄像头未作旋转时的流,我是手机横着测试的。

这是摄像头旋转90度是的流,我手机是竖着测试的
三:xml布局
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
//摄像头流预览视图
<com.test.MyCameraPreview
android:id="@+id/cameraPreview"
android:layout_width="300dp"
android:layout_height="300dp">
</com.test.MyCameraPreview>
//画人脸边框的视图
<ImageView
android:id="@+id/drawImageView"
android:src="@drawable/xz_new"
android:layout_width="300dp"
android:layout_height="300dp"
android:scaleType="matrix"
android:visibility="visible" />
</RelativeLayout>
代码获取流宽度和高度是(640,480),已将摄像头预览视图,画人脸边框视图,宽高动态设置为(640,480),画人脸边框代码如下:
tempBitmap = Bitmap.createBitmap(640,480,
Bitmap.Config.ARGB_8888);
canvas = new Canvas(tempBitmap);
PointF pointF = new PointF();
face.getMidPoint(pointF);//得到人脸中心点坐标
float eyesDistance = face.eyesDistance();//两眼之前的距离
float index = eyesDistance*2;
int left =(int)(pointF.x-index);
int top = (int)((pointF.y- index));
int right=(int)((pointF.x+ index));
int bottom=(int)((pointF.y+ index));
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
canvas.drawRect(left,top,right,bottom,paint);
imageView.post(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(tempBitmap);
}
});
由于摄像头旋转90度,我偿试将画人脸边框的imageView,旋转90度,还是不行,代码如下:
imageView.setPivotX(imageView.getWidth()/2);
imageView.setPivotY(imageView.getHeight()/2);//支点在图片中心
imageView.setRotation(90);
请问各位大神,如何解决这个问题,如觉得问题未描述清楚,麻烦留言,感谢大家了。
...全文
相关推荐
Android前置摄像头预览并检测人脸,获取人脸区域亮度
Android前置摄像头预览并检测人脸,获取人脸区域亮度,对应的博客是:http://blog.csdn.net/yubo_725/article/details/50313489
基于OpenCV读取摄像头的人脸检测和识别
基于OpenCV读取摄像头的人脸检测和识别,人脸检测使用别人训练好的数据进行检测,程序可以选择特征脸、fisherface或LBP方法来实现人脸识别。
opencv可通过rtmp/rtsp获取视频流人脸识别与并截图
opencv可通过rtmp/rtsp获取视频流人脸识别与并截图,JAVA版本
Android 人脸识别,完美识别
用过opencv,可能是不会用吧,前置摄像头需要横屏才能识别到(就算把人像处理正常显示也需要横着才能识别);同时百度了好多文章,有的只能识别图片,有的要同时安装一个管理应用。。。现在这些都不用考虑了
android studio 2.2源码之 利用自带摄像头,动态获取【人脸识别】,支持多人
Android studio 2.2源码之 利用自带摄像头,动态获取【人脸识别】,支持多人 是为了做一个识别人脸项目,找了很久才实现的DEMO资料,可以直接安装FaceDetection002\app\build\outputs\apk 下的APK进行体验 源码是 android studio 2.2 无需其他插件,直接用。 运行效果,详见BLOG:http://blog.csdn.net/datedateup/article/details/53260367


