【问题标题】:Opencv - Detecting eye pupil (middle)Opencv - 检测眼睛瞳孔(中)
【发布时间】:2018-10-04 06:05:14
【问题描述】:

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

现在我正在开发一个 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)

如你所见,我已经检测到眼睛瞳孔,但我需要打到它的中间。

【问题讨论】:

  • 你对那个灰度图做了预处理吗?
  • 是的,我做到了。首先我将图像转换为灰度,然后进行计算。

标签: python opencv image-processing


【解决方案1】:

如我所见,您正在使用 Haar 分类器来检测眼睛。 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

【讨论】:

    【解决方案2】:

    嗯,几年前我实现了一个非常相似的项目。

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

    我也可以给你一个Open eyes project paper的链接

    “睁开眼睛” - 是眼球追踪器的开源项目,其中软件和硬件文档是完全开放和免费的。

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      如果您要使用 NIR 图像,我建议您查看以下论文中介绍的用于检测虹膜的积分微分算子;

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

      我认为这种方法的实施将适用于稍加调整的彩色图像。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-01
        • 2011-05-29
        • 2018-11-19
        • 1970-01-01
        • 2017-05-19
        • 2012-08-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多