תוכן עניינים:

Opencv זיהוי פנים, אימון והכרה: 3 שלבים
Opencv זיהוי פנים, אימון והכרה: 3 שלבים

וִידֵאוֹ: Opencv זיהוי פנים, אימון והכרה: 3 שלבים

וִידֵאוֹ: Opencv זיהוי פנים, אימון והכרה: 3 שלבים
וִידֵאוֹ: למידה עמוקה: עבודה עם תמונות 2024, נוֹבֶמבֶּר
Anonim
Opencv זיהוי פנים, אימון והכרה
Opencv זיהוי פנים, אימון והכרה

OpenCV היא ספריית ראיית מחשב בקוד פתוח שהיא פופולרית מאוד לביצוע משימות בסיסיות לעיבוד תמונה כגון טשטוש, מיזוג תמונות, שיפור תמונה וכן איכות וידאו, סף וכו 'בנוסף לעיבוד תמונה, היא מספקת למידה מעמיקה מסוגים שונים. מודלים שניתן להשתמש בהם ישירות לפתרון משימות פשוטות בהישג יד.

להתקנת opencv השתמש בקישור זה

www.instructables.com/id/Opencv-and-Python…

שלב 1: זיהוי פנים בסרטון בזמן אמת

אתה יכול לחפש בגוגל תוכניות רבות לזיהוי פנים ויש לשמור את הפרצופים שזוהו בתיקייה להמשך עיבוד תמונות כמו הדרכה וסימון. אנו הולכים לאסוף 30 דוגמאות

יבוא cv2

ייבא numpy כמו np

יבוא מערכת ייבוא os

מצלמה = cv2. VideoCapture (0)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml") #הוסף את נתיב הקבצים של harcascade

name = raw_input ("מה השם שלו?")

#כל הקבצים יישמרו תחת התיקייה Users/prasad/Documents/images

dirName = "/Users/prasad/Documents/images/" + name

הדפס (dirName) אם לא os.path.exists (dirName): os.makedirs (dirName) הדפס ("מדריך נוצר") אחר: הדפס ("שם כבר קיים") sys.exit ()

ספירה = 1

#אנו הולכים לאסוף 30 דוגמאות

בזמן ספירה 30: הפרדה # frame = frame.array אפור = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) פנים = faceCascade.detectMultiScale (אפור, 1.5, 5) עבור (x, y, w, h) בפנים: roiGray = אפור [y: y + h, x: x + w] fileName = dirName + "/" + name + str (count) + ".jpg" cv2.imwrite (fileName, roiGray) cv2.imshow ("פנים", roiGray) מלבן cv2. frame (מסגרת, (x, y), (x+w, y+h), (0, 255, 0), 2) count+= 1 cv2.imshow ('frame', frame) key = cv2.waitKey (1)

אם מפתח == 27:

לשבור

#camera.release ()

cv2.destroyAllWindows ()

שלב 2: הכשרת התמונות לדוגמא שלך

לאחר סיום זיהוי הפנים, נוכל ללכת לאימון התמונות

יבוא osimport numpy as np מ- PIL יבוא תמונה יבוא cv2 יבוא חמוץ #יבוא סדרתי

#ser = serial. Serial ('/dev/ttyACM0', 9600, timeout = 1)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml")

מזהה = cv2.face. LBPHFaceRecognizer_create ()

baseDir = os.path.dirname (os.path.abspath (_ קובץ_))

#train את התמונות מתחת לתיקיית התמונות

imageDir = os.path.join (baseDir, "תמונות")

currentId = 1

labelIds = {} yLabels = xTrain = #ser.write ("אימון …..". קידוד ())

עבור root, dirs, קבצים ב- os.walk (imageDir):

הדפס (root, dirs, files) לקובץ בקבצים: הדפס (file) if file.endswith ("png") או file.endswith ("jpg"): path = os.path.join (root, file) label = os.path.basename (root) הדפסה (תווית)

אם לא תווית ב- labelIds:

labelIds [label] = currentId print (labelIds) currentId += 1

id_ = labelIds [label]

pilImage = Image.open (נתיב).convert ("L") imageArray = np.array (pilImage, "uint8") פנים = faceCascade.detectMultiScale (imageArray, scaleFactor = 1.1, minNeighbors = 5)

עבור (x, y, w, h) בפנים:

roi = imageArray [y: y+h, x: x+w] xTrain.append (roi) yLabels.append (id_)

עם פתוח ("תוויות", "wb") כ f:

pickle.dump (labelIds, f) f.close ()

מזהה.טראן (xTrain, np.array (yLabels))

הדפסה מזהה (שמור ("trainer.yml") (labelIds)

שלב 3: זיהוי פנים

לאחר שהאימון הסתיים עכשיו אתה יכול להריץ את הקוד שלהלן כך שהוא יתחיל לזהות את הפנים המאומנות שלך

יבוא osos.environ ['PYTHONINSPECT'] = 'מופעל' ייבוא cv2 יבוא numpy כ- np import יבשה #ייבוא RPi. GPIO כ- GPIO מעת לעת ייבוא

עם פתוח ('תוויות', 'rb') כ f:

dicti = pickle.load (f) f.close ()

מצלמה = cv2. VideoCapture (0)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml")

מזהה = cv2.face. LBPHFaceRecognizer_create () מזהה.קריאה ("trainer.yml")

font = cv2. FONT_HERSHEY_SIMPLEX

אחרון = ''

#למסגרת בתוך camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True):

בעוד נכון: ret, frame = camera.read () אפור = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) פנים = faceCascade.detectMultiScale (אפור, scaleFactor = 1.5, minNeighbours = 5) עבור (x, y, w, h) בפנים: roiGray = אפור [y: y+h, x: x+w]

id_, conf = identifier.predict (roiGray)

עבור שם, ערך ב- dicti.items ():

אם ערך == id_: הדפס (שם) cv2.putText (מסגרת, שם, (x, y), פונט, 2, (0, 0, 255), 2, cv2. LINE_AA) אם שם! = אחרון: אחרון = שם אם conf <= 70: cv2.rectangle (מסגרת, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow ('מסגרת', מסגרת)

key = cv2.waitKey (1)

אם מפתח == 27:

לשבור cv2.destroyAllWindows ()

מוּמלָץ: