我正在使用camera2 api在我的应用程序中执行人脸检测功能。在覆盖视图出现一些定位问题后,它适用于我的荣誉5c。矩形在头部周围,很好。但是,当我尝试使用Huawei P9 lite和其他设备时,该矩形不在头部周围,而是在右侧和底部略微围绕,因此矩形的左/上角在鼻子上。 我使用样本Camera2Basic
我试图对位置校正器进行硬编码,但是正如您可以想象的那样,如果它在p9上可以工作,那么它就不能再为荣誉而工作了。
这是我的人脸检测矩形代码:
int left = (int)((float)(faces[i].getBounds().left)/MGpix.getWidth()*mOverlayView.getHeight());
int top = (int)((float)(faces[i].getBounds().top)/MGpix.getHeight()*mOverlayView.getWidth());
int right = (int)((float)(faces[i].getBounds().right)/MGpix.getWidth()*mOverlayView.getHeight());
int bottom =(int)((float)(faces[i].getBounds().bottom)/MGpix.getHeight()*mOverlayView.getWidth());
MGpix是前置摄像头设备的大小
这是我必须做的校正才能与带有p9的脸部匹配:
int correction=-(int)(80*scale+0.5f);//(int)((float)(top-bottom)*2);
left=left-correction-(int)(0*scale+0.5f);
top=top-correction-(int)(20*scale+0.5f);
right=right-correction+(int)(20*scale+0.5f);
bottom=bottom-correction+(int)(0*scale+0.5f);
正如我所说,这是我之前遇到的定位问题:
canvas.scale(-1, 1, getHeight()/2, getWidth()/2);
//Mirror the canva in order to make it move with the head (and not in the opposite direction)
//See also: rotation 90° in fragment_camera2_basic.xml
如您所见,我必须镜像并旋转才能匹配头部和矩形的移动。
所以现在它几乎可以工作了,两个设备之间只有很小的区别,我不知道为了使它在所有设备上都能工作我必须使用它。 你有一些线索吗? 预先谢谢你。