我有这个问题,当我试图用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 任何人都可以帮助我? 提前谢谢。
答案 0 :(得分:4)
我没有使用OpenCV的Android实现,但我使用的是普通版本。如果你的代码适用于眼睛的Haar级联,而不是带眼镜的那个,这让我怀疑用openCV包装的眼睛+眼镜级别不是很好。试图区分正面和侧面时,我遇到了同样的问题。
您可以train a new cascade(这是劳动密集型的)或环顾其他人培训过的级联for this case。
答案 1 :(得分:2)
我也遇到了类似的问题,我的OpenCV Windows客户端没有看到戴眼镜的人。经过几天的挖掘和调试后,我终于确定显示器本身(以及我的大白色形状)产生的眩光导致了问题。这种眩光阻止了OpenCV甚至检测到一张脸,更不用说ID了。这是为什么?如果OpenCV无法看到眼睛那么就看不到脸。
我不知道更小的Android屏幕是否会导致同样的问题,但它可能值得你花时间。
关于Haar cascases ...我浏览了我能找到的每个级联文件,包括其他响应中引用的文件。到目前为止,最好的文件是:haarcascade_frontalface_alt2.xml。对于我的环境和所有类型的人来说,这个文件是迄今为止最好的。
以下是一些例子。
没有眼镜和OpenCV可以很好地检测到我的脸:
我的显示器上的白色形状的眩光现在阻止OpenCV检测到我的脸:
最后,随着我的网络摄像头全部旋转,我的眼镜上没有眩光,OpenCV可以很好地检测到我的脸:
答案 2 :(得分:1)
我发现名为haarcascade_mcs_eyepair_small的Opencv分类器在有或没有眼镜的情况下在android项目中给出了很好的结果。事实上,它发现了一对眼睛有一个坐标x和y 希望这可能会有所帮助......