2016-08-26 5 views
0

J'ai un projet de fauteuil roulant contrôlé par les yeux où j'ai besoin de détecter la pupille de l'œil et, selon son mouvement, la chaise roulante bouge. Comme un test pour le code que j'écris j'ai effectué le script sur une image statique. L'image est exactement là où la caméra sera mise. L'appareil photo sera un IR.Suivi des pupilles oculaires à l'aide de Hough Circle Transform

Note: J'utilise compilé OpenCV 3.1.0-dev et python2.7 sous Windows platfrom

Le cercle détecté à l'aide que je voulais Houghcircle transformer:

original image result

Après que je travaille sur un code pour détecter la même chose seulement en utilisant une caméra IR.

Les résultats du code d'image statique sont très fiables pour moi, mais le problème est le code avec la caméra IR.

Le code que je l'ai écrit à ce jour est:

import cv2 
import numpy as np 

cap = cv2.VideoCapture(0) 

while True: 

    ## Read Image 
    ret, image = cap.read() 
    ## Convert to 1 channel only grayscale image 
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
    ## CLAHE Equalization 
    cl1 = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) 
    clahe = cl1.apply(gray) 
    ## medianBlur the image to remove noise 
    blur = cv2.medianBlur(clahe, 7) 
    ## Detect Circles 
    circles = cv2.HoughCircles(blur ,cv2.HOUGH_GRADIENT,1,20, 
           param1=50,param2=30,minRadius=7,maxRadius=21) 

    if circles != None: 
     circles = np.round(circles[0,:]).astype("int") 

    for circle in circles[0,:]: 
     # draw the outer circle 
     cv2.circle(image,(circle[0],circle[1]),circle[2],(0,255,0),2) 
     # draw the center of the circle 
     cv2.circle(image,(circle[0],circle[1]),2,(0,0,255),3) 

    if cv2.waitKey(1) in [27, ord('q'), 32]: 
     break 

cap.release() 
cv2.destroyAllWindows() 

I always get this error:

**if circles != None: 
FutureWarning: comparison to `None` will result in an elementwise object comparison in the future. 

Traceback (most recent call last): 
    cv2.circle(image,(circle[0],circle[1]),circle[2],(0,255,0),2) 
IndexError: invalid index to scalar variable.** 

Pour toute question concernant le code de l'image statique, le code est:

import cv2 
import numpy as np 

## Read Image 
image = cv2.imread('eye.tif') 
imageBackup = image.copy() 
## Convert to 1 channel only grayscale image 
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
## CLAHE Equalization 
cl1 = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) 
clahe = cl1.apply(gray) 
## medianBlur the image to remove noise 
blur = cv2.medianBlur(clahe, 7) 

## Detect Circles 
circles = cv2.HoughCircles(blur ,cv2.HOUGH_GRADIENT,1,20, 
          param1=50,param2=30,minRadius=7,maxRadius=21) 

for circle in circles[0,:]: 
    # draw the outer circle 
    cv2.circle(image,(circle[0],circle[1]),circle[2],(0,255,0),2) 
    # draw the center of the circle 
    cv2.circle(image,(circle[0],circle[1]),2,(0,0,255),3) 

cv2.imshow('Final', image) 
cv2.imshow('imageBackup', imageBackup) 

cv2.waitKey(0) 
cv2.destroyAllWindows() 
+0

Quel est le problème avec la caméra IR? Est-ce qu'il trouve un cercle ou simplement rien? Pouvez-vous fournir un exemple d'image? – PSchn

+0

@PSchn Il n'y a pas de problème avec la caméra, le problème est que si aucun cercle n'est détecté, j'obtiens une erreur NoneType dans le script Python. Je devrais mettre cela aussi dans la question. – Tes3awy

+0

Veuillez également ajouter le message d'erreur. – PSchn

Répondre

0

Donc je l'ai essayé moi-même et j'ai eu la même erreur. J'ai donc modifié le code comme je l'ai déjà proposé. Voici le Snipped:

if circles != None: 
    for circle in circles[0,:]: 
     # draw the outer circle 
     cv2.circle(image,(circle[0],circle[1]),circle[2],(0,255,0),2) 
     # draw the center of the circle 
     cv2.circle(image,(circle[0],circle[1]),2,(0,0,255),3) 

En outre, vous pouvez essayer d'utiliser cv2.Canny pour de meilleurs résultats. Over and out :)

+0

avez-vous supprimé cercles = np.round (cercles [0,:]). Astype ("int") aussi? – Micka

+0

oui je l'ai fait. Je n'ai vu aucun besoin pour cela – PSchn

+0

Désolé, mais ce n'est pas une réponse fiable. ce [link] (http://docs.opencv.org/2.4/modules/imgproc/doc/feature_detection.html#yuen90) vous donne un aperçu de ce que 'cv2.HoughCircles' fait. C'est opencv 2.4 mais c'est la même chose que dans opencv 3.1.0-dev cependant. – Tes3awy