用眼镜找到眼睛 OpenCv
Posted
技术标签:
【中文标题】用眼镜找到眼睛 OpenCv【英文标题】:Find eyes with glasses OpenCv 【发布时间】:2012-03-14 00:40:20 【问题描述】:我有这个问题,当我尝试使用适用于 android 的 openCv 库找到戴眼镜的眼睛时,我的代码不起作用。 我的代码如下:
try
InputStream is = this.getResources().openRawResource(R.raw.haarcascade_eye_tree_eyeglasses);
File cascadeDir = this.getDir("cascade"+"occhiOcchiali", Context.MODE_PRIVATE);
File cascadeFile = new File(cascadeDir, "haarcascade_eye_tree_eyeglasses.xml");
FileOutputStream os = new FileOutputStream(cascadeFile);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1)
os.write(buffer, 0, bytesRead);
is.close();
os.close();
mioClassificatoreOcchiOcchiali = new CascadeClassifier(cascadeFile.getAbsolutePath());
Log.d("metodo1", cascadeFile.getAbsolutePath());
if (mioClassificatoreOcchiOcchiali.empty())
Log.d("metodo1", "Failed to load cascade classifier");
mioClassificatoreOcchiOcchiali = null;
else
Log.d("metodo1", "Loaded cascade classifier from " + cascadeFile.getAbsolutePath());
cascadeFile.delete();
cascadeDir.delete();
catch (IOException e)
e.printStackTrace();
Log.d("metodo1" , "Failed to load cascade. Exception thrown: " + e);
以这种方式,我使用我的分类器,并通过这段代码尝试找到戴眼镜的眼睛:
LinkedList<org.opencv.core.Rect> occhi = new LinkedList<org.opencv.core.Rect>();
org.opencv.core.Size sOcchi = new org.opencv.core.Size(15, 15);
mioClassificatoreOcchiOcchiali.detectMultiScale(matOcchi, occhi,1.1, 2,0,sOcchi);
如果我离开眼镜,结果总是 0,结果总是 2。 谁能帮帮我?? 提前致谢。
【问题讨论】:
您的代码是否适用于不戴眼镜的眼睛的 haar 分类器? 是的,不戴眼镜也能很好地工作。为什么?你能帮帮我吗? 【参考方案1】:我没有玩过OpenCV的Android实现,但是我用的是普通版。如果您的代码适用于眼睛的 Haar 级联而不是戴眼镜的级联,那让我怀疑用 openCV 打包的眼睛+眼镜级联不是很好。我在尝试区分正面和侧面时遇到了同样的问题。
您可以train a new cascade(劳动密集型)或四处寻找其他人训练过的级联for this case。
【讨论】:
这确实是opencv中人脸/眼睛检测的问题。我们依赖于分类器的训练方式【参考方案2】:我发现名为 haarcascade_mcs_eyepair_small 的 Opencv 分类器在带眼镜和不带眼镜的情况下在 android 项目中都给出了很好的结果。事实上,它找到了一对坐标 x 和 y 的眼睛。 希望这会有所帮助...
【讨论】:
【参考方案3】:我的 OpenCV Windows 客户端也有类似的问题,看不到戴眼镜的人。经过几天的挖掘和调试,我终于确定是显示器本身(和我的大白色表格)产生的眩光导致了问题。这种眩光使 OpenCV 甚至无法检测到人脸,更不用说识别它了。这是为什么?如果 OpenCV 看不到眼睛,那么它就看不到脸。
我不知道小得多的 Android 屏幕是否会导致同样的问题,但这可能值得您花时间。
关于 Haar cascases……我浏览了我能找到的每个 cascade 文件,包括其他回复中引用的文件。到目前为止,最好的文件是:haarcascade_frontalface_alt2.xml。对于我的环境和所有类型的人来说,这个文件是迄今为止最好的。
这里有一些例子。
没有眼镜,OpenCV 可以很好地检测到我的脸:
显示器上白色表格的眩光现在阻止 OpenCV 检测到我的脸:
最后,随着我的网络摄像头完全旋转,我的眼镜上没有眩光,OpenCV 可以很好地检测到我的脸:
【讨论】:
以上是关于用眼镜找到眼睛 OpenCv的主要内容,如果未能解决你的问题,请参考以下文章