Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我们是否可以像检测人脸和眼睛一样使用Haar分类器来检测眼睛的虹膜?_Python_Opencv_Computer Vision - Fatal编程技术网

Python 我们是否可以像检测人脸和眼睛一样使用Haar分类器来检测眼睛的虹膜?

Python 我们是否可以像检测人脸和眼睛一样使用Haar分类器来检测眼睛的虹膜?,python,opencv,computer-vision,Python,Opencv,Computer Vision,我目前正在尝试检测虹膜,然后在给定的图像中检测瞳孔。在线看到的所有方法,先检测人脸,然后检测眼睛,然后使用阈值、hough变换和轮廓来最终检测瞳孔 如果我们已经有了大量的瞳孔数据集,难道我们不能像在人脸和眼睛的情况下那样训练一个Haar分类器来检测眼睛的虹膜吗?有什么理由不能这样做吗 目前,我有一个使用非haar方法的部分有效的解决方案 一个工作代码的示例 import math import cv2 eye_cascade = cv2.CascadeClassifier('./casca

我目前正在尝试检测虹膜,然后在给定的图像中检测瞳孔。在线看到的所有方法,先检测人脸,然后检测眼睛,然后使用阈值、hough变换和轮廓来最终检测瞳孔

如果我们已经有了大量的瞳孔数据集,难道我们不能像在人脸和眼睛的情况下那样训练一个Haar分类器来检测眼睛的虹膜吗?有什么理由不能这样做吗

目前,我有一个使用非haar方法的部分有效的解决方案

一个工作代码的示例

import math 
import cv2 

eye_cascade = cv2.CascadeClassifier('./cascade_files/haarcascade_eye.xml')

if eye_cascade.empty():
  raise IOError('Unable to load the eye cascade classifier xml file')

cap = cv2.VideoCapture(0)
ds_factor = 0.5
ret, frame = cap.read()
contours = []

while True: 
  ret, frame = cap.read() 
  frame = cv2.resize(frame, None, fx=ds_factor, fy=ds_factor, interpolation=cv2.INTER_AREA)
  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  eyes = eye_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=1)
  for (x_eye, y_eye, w_eye, h_eye) in eyes:
    pupil_frame = gray[y_eye:y_eye + h_eye, x_eye:x_eye + w_eye]
    ret, thresh = cv2.threshold(pupil_frame, 80, 255, cv2.THRESH_BINARY)
    cv2.imshow("threshold", thresh)
    im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
    print(contours)

    for contour in contours:
      area = cv2.contourArea(contour)
      rect = cv2.boundingRect(contour)
      x, y, w, h = rect
      radius = 0.15 * (w + h)

      area_condition = (100 <= area <= 200)
      symmetry_condition = (abs(1 - float(w)/float(h)) <= 0.2)
      fill_condition = (abs(1 - (area / (math.pi * math.pow(radius, 2.0)))) <= 0.4)
      cv2.circle(frame, (int(x_eye + x + radius), int(y_eye + y + radius)), int(1.3 * radius), (0, 180, 0), -1)

  cv2.imshow('Pupil Detector', frame)
  c = cv2.waitKey(1) 
  if c == 27: 
    break

cap.release() 
cv2.destroyAllWindows()
导入数学
进口cv2
eye_cascade=cv2.CascadeClassifier('./cascade_files/haarcascade_eye.xml'))
如果眼_cascade.empty():
raise IOError('无法加载眼睛级联分类器xml文件')
cap=cv2.视频捕获(0)
ds_系数=0.5
ret,frame=cap.read()
等高线=[]
尽管如此:
ret,frame=cap.read()
frame=cv2.调整大小(frame,None,fx=ds\u因子,fy=ds\u因子,插值=cv2.内部区域)
灰色=cv2.CVT颜色(边框,cv2.COLOR\u BGR2GRAY)
眼睛=眼睛\级联。检测多尺度(灰色,比例因子=1.3,明尼堡=1)
对于眼睛中的(x_眼、y_眼、w_眼、h_眼):
瞳孔帧=灰色[y_眼:y_眼+h_眼,x_眼:x_眼+w_眼]
ret,thresh=cv2.threshold(瞳孔帧,80255,cv2.thresh\u二进制)
cv2.imshow(“阈值”,阈值)
im2,轮廓,层次=cv2.findContours(阈值,cv2.RETR\u列表,cv2.CHAIN\u近似值\u简单)
打印(等高线)
对于等高线中的等高线:
面积=cv2。轮廓面积(轮廓)
rect=cv2.边界rect(轮廓)
x、 y,w,h=rect
半径=0.15*(宽+高)

区域_条件=(100是的,您可以使用Haar Cascade分类器上的样本图像直接训练瞳孔检测器。如果您不局限于高吞吐量的小型硬件,那么我建议您使用深度学习在同一数据集上进行训练,您可以期待更好的结果。

更好的答案会显示一些代码!否则,这些建议是b更适合作为评论。