Opencv - 检测眼瞳(中)

时间:2018-04-24 05:14:24

标签: python opencv image-processing

我正在处理一个试图识别眼睛瞳孔中间的问题。

现在我正在开发一个Opencv程序来检测瞳孔,我已经实现了这个目标,但我需要提高准确性。因此,我将展示用于检测瞳孔的代码片段和带有结果的图像。

def get_irises_location(self, frame_gray):
    self.eye_cascade = cv2.CascadeClassifier(join('haar', 'haarcascade_eye.xml'))
    eyes = self.eye_cascade.detectMultiScale(frame_gray, 1.3, 10)  # if not empty - eyes detected
    irises = []

    for (ex, ey, ew, eh) in eyes:
        iris_w = int(ex + float(ew / 2))
        iris_h = int(ey + float(eh / 2))
        irises.append([numpy.float32(iris_w), numpy.float32(iris_h)])

    return numpy.array(irises)

pupil detector

正如你所看到的,我已经检测到了眼睛瞳孔,但是我需要在它的中间点击。

3 个答案:

答案 0 :(得分:2)

我可以看到,你正在使用Haar分类器检测眼睛。 哈尔分类器不适合开始,但它不是很准确。 也许你可以添加这样的东西:

 for (ex, ey, ew, eh) in eyes:
        iris_w = int((ex+epsilon) + float((ew / 2)+epsilon))
        iris_h = int((ey+epsilon) + float((eh / 2)+epsilon))
        irises.append([numpy.float32(iris_w), numpy.float32(iris_h)])

此处, epsilon 是将绿点移动到中间的调整因子。但是,这将无效

更好的方法是训练模型来检测面部标志,即使瞳孔移开也可以检测到瞳孔的中心。

见这里:https://github.com/akshaybahadur21/Drowsiness_Detection

答案 1 :(得分:2)

好吧,几年前我意识到了一个非常相似的项目。

我们使用了一个小技巧。我们使用红外线(红外线)代替可见光。 在IR中,不依赖于虹膜的真实颜色,虹膜将是浅灰色的,并且瞳孔将是绝对黑色的。这将大大简化您的任务。

我也可以为您提供Open eyes project paper

的链接

“睁眼” - 是eyetracker的开源项目,其中软件和硬件文档绝对开放且免费。

我希望它会有所帮助

答案 2 :(得分:0)

如果您打算使用NIR图像,我建议您查看下文中提供的用于检测虹膜的积分微分算子;

https://www.cl.cam.ac.uk/~jgd1000/csvt.pdf

我认为这种方法的实现可以在彩色图像中进行很少的调整。