2017-08-21 16 views
5

के साथ ट्रैक आई पिल की स्थिति मैं एक रोबोट बनाने की कोशिश कर रहा हूं जिसे मैं मूल आंखों के आंदोलनों के साथ नियंत्रित कर सकता हूं। मैं अपने चेहरे पर एक वेबकैम इंगित कर रहा हूं, और मेरे छात्र की स्थिति के आधार पर, रोबोट एक निश्चित तरीके से आगे बढ़ेगा। यदि छात्र शीर्ष, निचले, बाएं कोने में है, तो आंख के दाहिने कोने में रोबोट क्रमशः आगे, पीछे, बाएं, दाएं स्थानांतरित होगा।वेबकैम, ओपनसीवी, और पायथन

मेरी मूल योजना मेरी बाएं आंख को खोजने के लिए एक आंखों के हार्केड का उपयोग करना था। फिर मैं छात्र के केंद्र को खोजने के लिए आंख क्षेत्र पर हौसीक्रिकल का उपयोग करूंगा। मैं यह निर्धारित करता हूं कि आम आंख क्षेत्र की सीमाओं तक हौसीक्रिकल के केंद्र से दूरी ढूंढकर छात्र कहाँ आंखों में थे।

तो मेरे कोड के पहले भाग के लिए, मैं इस वीडियो में देखी गई आंखों के छात्र के केंद्र को ट्रैक करने में सक्षम होने की उम्मीद कर रहा हूं। https://youtu.be/aGmGyFLQAFM?t=38

लेकिन जब मैं अपना कोड चलाता हूं, तो यह लगातार छात्र का केंद्र नहीं ढूंढ सकता है। गड़बड़ी अक्सर गलत क्षेत्र में खींची जाती है। आंख चलने पर भी, मैं अपने कार्यक्रम को छात्र के केंद्र को लगातार कैसे ढूंढ सकता हूं?

क्या यह मेरे कार्यक्रम को बताने के लिए संभव/बेहतर/आसान है जहां छात्र शुरुआत में है? मैंने कुछ अन्य आंख ट्रैकिंग विधियों को देखा है, लेकिन मैं एक सामान्य एल्गोरिदम नहीं बना सकता। अगर कोई एक फॉर्म बनाने में मदद कर सकता है, तो इसकी बहुत सराहना की जाएगी! https://arxiv.org/ftp/arxiv/papers/1202/1202.6517.pdf

import numpy as np 
import cv2 

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 
eye_cascade = cv2.CascadeClassifier('haarcascade_righteye_2splits.xml') 

#number signifies camera 
cap = cv2.VideoCapture(0) 

while 1: 
    ret, img = cap.read() 
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
    #faces = face_cascade.detectMultiScale(gray, 1.3, 5) 
    eyes = eye_cascade.detectMultiScale(gray) 
    for (ex,ey,ew,eh) in eyes: 
     cv2.rectangle(img,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) 
     roi_gray2 = gray[ey:ey+eh, ex:ex+ew] 
     roi_color2 = img[ey:ey+eh, ex:ex+ew] 
     circles = cv2.HoughCircles(roi_gray2,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0) 
     try: 
      for i in circles[0,:]: 
       # draw the outer circle 
       cv2.circle(roi_color2,(i[0],i[1]),i[2],(255,255,255),2) 
       print("drawing circle") 
       # draw the center of the circle 
       cv2.circle(roi_color2,(i[0],i[1]),2,(255,255,255),3) 
     except Exception as e: 
      print e 
    cv2.imshow('img',img) 
    k = cv2.waitKey(30) & 0xff 
    if k == 27: 
     break 

cap.release() 
cv2.destroyAllWindows() 

उत्तर

5

मुझे कुछ काम है कि मैं पहले किया था से दो विकल्प देख सकते हैं,:

  1. ट्रेन एक हार डिटेक्टर नेत्रगोलक पता लगाने के लिए, प्रशिक्षण छवियों पर छात्र के केंद्र के साथ प्रयोग चौड़ाई के रूप में केंद्र और आंखों की चौड़ाई। मैंने इसे हौ सर्कल या ओपनसीवी के मूल आंख डिटेक्टर (आपके कोड में इस्तेमाल किया जाने वाला) का उपयोग करने से बेहतर पाया।

  2. आंख क्षेत्र का अनुमान लगाने के लिए डिलिब के चेहरे के ऐतिहासिक बिंदुओं का उपयोग करें। फिर विद्यार्थियों के केंद्र का अनुमान लगाने के लिए, आंखों के सफेद और काले क्षेत्रों के साथ-साथ समोच्चों के कारण के विपरीत का उपयोग करें। इसने बहुत बेहतर परिणाम दिए।

संबंधित मुद्दे