具有面部检测功能的两个设备之间的位置问题

时间:2019-05-24 04:04:13

标签: android position device detection face

我正在使用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

如您所见,我必须镜像并旋转才能匹配头部和矩形的移动。

所以现在它几乎可以工作了,两个设备之间只有很小的区别,我不知道为了使它在所有设备上都能工作我必须使用它。 你有一些线索吗? 预先谢谢你。

0 个答案:

没有答案