ዝርዝር ሁኔታ:

የእውነተኛ ጊዜ ፊት ለይቶ ማወቅ-ከጫፍ እስከ ጫፍ ፕሮጀክት 8 ደረጃዎች (ከስዕሎች ጋር)
የእውነተኛ ጊዜ ፊት ለይቶ ማወቅ-ከጫፍ እስከ ጫፍ ፕሮጀክት 8 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የእውነተኛ ጊዜ ፊት ለይቶ ማወቅ-ከጫፍ እስከ ጫፍ ፕሮጀክት 8 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የእውነተኛ ጊዜ ፊት ለይቶ ማወቅ-ከጫፍ እስከ ጫፍ ፕሮጀክት 8 ደረጃዎች (ከስዕሎች ጋር)
ቪዲዮ: The POTS Workup: What Should We Screen For- Brent Goodman, MD 2024, ህዳር
Anonim
የእውነተኛ ጊዜ ፊት ለይቶ ማወቅ-ከጫፍ እስከ ጫፍ ፕሮጀክት
የእውነተኛ ጊዜ ፊት ለይቶ ማወቅ-ከጫፍ እስከ ጫፍ ፕሮጀክት

OpenCV ን በማሰስ በመጨረሻው አጋዥ ስልጠናዬ ላይ ፣ አውቶማቲክ ዕይታን መከታተል ተምረናል። ከዚህ በታች ማየት እንደሚችሉት አሁን ፊቶችን በእውነተኛ ጊዜ ለመለየት የእኛን ፒኢሲምን እንጠቀማለን-

ምስል
ምስል

ይህ ፕሮጀክት የተከናወነው በዚህ አስደናቂ “ክፍት ምንጭ ኮምፒተር ራዕይ ቤተ -መጽሐፍት” ፣ በ OpenCV ነው። በዚህ ማጠናከሪያ ትምህርት ላይ እኛ በ Raspberry Pi (ስለዚህ ፣ Raspbian እንደ OS) እና Python ላይ እናተኩራለን ፣ ግን እኔ ደግሞ በእኔ Mac ላይ ኮዱን ሞከርኩ እና እሱ እንዲሁ በጥሩ ሁኔታ ይሠራል። OpenCV ለኮምፒዩተር ውጤታማነት እና በእውነተኛ-ጊዜ ትግበራዎች ላይ ጠንካራ ትኩረት ተደርጎ የተቀየሰ ነው። ስለዚህ ፣ ካሜራ በመጠቀም ለእውነተኛ ጊዜ የፊት ለይቶ ማወቅ ፍጹም ነው።

በመልክ መታወቂያ ላይ የተሟላ ፕሮጀክት ለመፍጠር ፣ በ 3 በጣም የተለያዩ ደረጃዎች ላይ መሥራት አለብን።

  1. የፊት ለይቶ ማወቅ እና የውሂብ መሰብሰብ
  2. መታወቂያውን ያሠለጥኑ
  3. የፊት ለይቶ ማወቅ

ከዚህ በታች ያለው የማገጃ ሥዕል እነዚያን ደረጃዎች ይቀጥላል

ምስል
ምስል

ደረጃ 1 - ቦኤም - የቁሳቁስ ሂሳብ

ዋና ክፍሎች:

  1. Raspberry Pi V3 - US $ 32.00
  2. 5 ሜጋፒክስሎች 1080p ዳሳሽ OV5647 ሚኒ ካሜራ ቪዲዮ ሞዱል - US $ 13.00

ደረጃ 2: OpenCV 3 ጥቅል መጫን

OpenCV 3 ጥቅል በመጫን ላይ
OpenCV 3 ጥቅል በመጫን ላይ

እኔ ወደ Raspbian (Stretch) የመጨረሻ ስሪት የዘመነ Raspberry Pi V3 ን እጠቀማለሁ ፣ ስለዚህ OpenCV ን ለመጫን በጣም ጥሩው መንገድ በአድሪያን ሮዝሮክ የተገነባው እጅግ በጣም ጥሩ መማሪያን መከተል ነው - Raspbian Stretch: Raspberry Pi ላይ OpenCV 3 + Python ን ይጫኑ።.

በእኔ ፒ ላይ OpenCV ን ለመጫን ብዙ የተለያዩ መመሪያዎችን ሞክሬያለሁ። የአድሪያን ትምህርት በጣም ጥሩ ነው። የእርሱን መመሪያ ደረጃ በደረጃ በመከተል ተመሳሳይ እንዲያደርጉ እመክርዎታለሁ።

አንዴ የአድሪያንን ትምህርት ከጨረሱ በኋላ ሙከራዎቻችንን በእርስዎ ፒ ላይ ለማካሄድ ዝግጁ የሆነ የ OpenCV ምናባዊ አከባቢ ሊኖርዎት ይገባል።

ወደ ምናባዊ አካባቢያችን እንሂድ እና OpenCV 3 በትክክል መጫኑን እናረጋግጥ።

አድሪያን የስርዓት ተለዋዋጮችዎ በትክክል መዋቀራቸውን ለማረጋገጥ አዲስ ተርሚናል በከፈቱ ቁጥር ትዕዛዙን “ምንጭ” እንዲያሂዱ ይመክራል።

ምንጭ ~/. መገለጫ

በመቀጠል ወደ ምናባዊ አካባቢያችን እንግባ -

ሥራን cv

ከመጠይቅዎ በፊት ያለውን ጽሑፍ (ሲቪ) ካዩ ፣ ከዚያ በሲቪ ምናባዊ አከባቢ ውስጥ ነዎት -

(cv) pi@raspberry: ~ $አድሪያን ትኩረቱን የ cv Python ምናባዊ አከባቢ ሙሉ በሙሉ ራሱን የቻለ እና በ Raspbian Stretch ማውረድ ውስጥ ከተካተተው ነባሪ የ Python ሥሪት ተለይቷል። ስለዚህ ፣ በአለምአቀፍ የጣቢያ-ፓኬጆች ማውጫ ውስጥ ማንኛውም የ Python ጥቅሎች ለ cv ምናባዊ አከባቢ አይገኙም። በተመሳሳይ ፣ በ cv ጣቢያ-ፓኬጆች ውስጥ የተጫኑ ማንኛውም የ Python ጥቅሎች ለፓይቶን ዓለም አቀፋዊ ጭነት አይገኙም

አሁን በ Python አስተርጓሚዎ ውስጥ ያስገቡ-

ፓይዘን

እና የ 3.5 (ወይም ከዚያ በላይ) ስሪቱን እያሄዱ መሆኑን ያረጋግጡ

በአስተርጓሚው ውስጥ (“>>>” ይመጣል) ፣ የ OpenCV ቤተ -መጽሐፍትን ያስመጡ

ማስመጣት cv2

ምንም የስህተት መልዕክቶች ካልታዩ ፣ OpenCV በእርስዎ ፒታይን ቪውራል አካባቢ ላይ በትክክል ተጭኗል።

እንዲሁም የተጫነውን የ OpenCV ስሪት ማረጋገጥ ይችላሉ-

cv2._ ስሪት_

3.3.0 መታየት አለበት (ወይም ወደፊት ሊለቀቅ የሚችል የላቀ ስሪት)። ከላይ ያለው ተርሚናል PrintScreen ቀዳሚዎቹን ደረጃዎች ያሳያል።

ደረጃ 3 ካሜራዎን መሞከር

ካሜራዎን በመሞከር ላይ
ካሜራዎን በመሞከር ላይ

አንዴ በእርስዎ OpenPV ውስጥ OpenCV ን ከጫኑ ካሜራዎ በትክክል እየሰራ መሆኑን ለማረጋገጥ እንሞክር።

በእርስዎ Raspberry Pi ላይ ቀድሞውኑ የተጫነ PiCam እንዳለዎት እገምታለሁ።

በእርስዎ አይዲኢ ላይ ከዚህ በታች ያለውን የ Python ኮድ ያስገቡ ፦

ቁጥርን እንደ np ያስመጡ

ማስመጣት cv2 cap = cv2. VideoCapture (0) cap.set (3, 640) # set Width cap.set (4, 480) # set Height while (True): ret, frame = cap.read () frame = cv2. Flip (ፍሬም ፣ -1) # Flip ካሜራ በአቀባዊ ግራጫ = cv2.cvtColor (ፍሬም ፣ cv2. COLOR_BGR2GRAY) cv2.imshow ('ፍሬም' ፣ ፍሬም) cv2.imshow ('ግራጫ' ፣ ግራጫ)) & 0xff ከሆነ k == 27: # የእረፍት ጊዜን ለመተው 'ESC' ን ይጫኑ። (cv2.destroyAllWindow ()

ከላይ ያለው ኮድ ሁለቱንም በ BGR ቀለም እና ግራጫ ሁኔታ በማሳየት በእርስዎ PiCam የሚፈጠረውን የቪዲዮ ዥረት ይይዛል።

በተሰበሰበበት መንገድ ምክንያት ካሜራዬን በአቀባዊ እንዳዞርኩ ልብ ይበሉ። የእርስዎ ጉዳይ ካልሆነ አስተያየት ይስጡ ወይም የ “ፍሊፕ” የትእዛዝ መስመሩን ይሰርዙ።

በአማራጭ ኮዱን ከእኔ GitHub: simpleCamTest.py ማውረድ ይችላሉ

ለመተግበር ትዕዛዙን ያስገቡ-

Python simpleCamTest.py

ፕሮግራሙን ለመጨረስ በቁልፍ ሰሌዳዎ ላይ ያለውን ቁልፍ [ESC] መጫን አለብዎት።

[ESC] ን ከመጫንዎ በፊት በቪዲዮ መስኮቱ ላይ መዳፊትዎን ጠቅ ያድርጉ።

ከላይ ያለው ስዕል ውጤቱን ያሳያል።

አንዳንድ ሰሪዎች ካሜራውን ለመክፈት ሲሞክሩ ችግሮች አግኝተዋል (“ማረጋገጫ አልተሳካም” የስህተት መልዕክቶች)። በ OpenCv መጫኛ ወቅት ካሜራው ካልነቃ ያ ሊሆን ይችላል ፣ እና ስለዚህ ፣ የካሜራ ነጂዎች በትክክል አልተጫኑም። ለማስተካከል ትዕዛዙን ይጠቀሙ-

sudo modprobe bcm2835-v4l2

እንዲሁም ሾፌሩ ቡት ላይ እንዲጭን /ወዘተ /ሞጁሎች ፋይል በመጨረሻው መስመር ላይ bcm2835-v4l2 ን ማከል ይችላሉ።

ስለ OpenCV የበለጠ ለማወቅ ፣ መማሪያውን መከተል ይችላሉ-ቪዲዮ-ፓይዘን-ኦፕንቪቭ-አጋዥ ስልጠና

ደረጃ 4: የፊት ለይቶ ማወቅ

የፊት ለይቶ ማወቅ
የፊት ለይቶ ማወቅ
የፊት ለይቶ ማወቅ
የፊት ለይቶ ማወቅ

በመልክ እውቅና ላይ በጣም መሠረታዊው ሥራ በእርግጥ “ፊት ለይቶ ማወቅ” ነው። ከማንኛውም ነገር በፊት ፣ ለወደፊቱ ከተያዘው አዲስ ፊት ጋር ሲነጻጸር ፊት (ደረጃ 1) እሱን “መያዝ” አለብዎት (ደረጃ 3)።

ፊትን (ወይም ማንኛውንም ነገር) ለመለየት በጣም የተለመደው መንገድ ‹‹Har Cascade classifier›› ን እየተጠቀመ ነው

የሃር ባህሪን መሠረት ያደረገ የከፋፋዮች አመዳደብን በመጠቀም የነገር ማወቂያ በጳውሎስ ቪዮላ እና ሚካኤል ጆንስ በወረቀት ላይ “የነገሮችን ቀላል ገጽታ በመጠቀም ፈጣን ነገሮችን ማወቅ” በ 2001 ውስጥ የማሽን መማሪያን መሠረት ያደረገ አቀራረብ ነው። የ cascade ተግባር ከብዙ አዎንታዊ እና አሉታዊ ምስሎች የሰለጠነ ነው። ከዚያ በሌሎች ምስሎች ውስጥ ዕቃዎችን ለመለየት ጥቅም ላይ ይውላል።

እዚህ ፊት ለይቶ ማወቅ እንሰራለን። መጀመሪያ ላይ አልጎሪዝም ብዙ አወንታዊ ምስሎችን (የፊቶችን ምስሎች) እና አሉታዊ ምስሎችን (ፊቶች የሌሉባቸው ምስሎች) ክላሲፋዩን ለማሰልጠን ይፈልጋል። ከዚያ ባህሪያትን ከእሱ ማውጣት አለብን። የምስራች ዜናው OpenCV ከአሠልጣኝ እንዲሁም ከመመርመሪያ ጋር ይመጣል። እንደ መኪና ፣ አውሮፕላኖች ፣ ወዘተ ላሉት ለማንኛውም ነገሮች የራስዎን ምድብ ማሠልጠን ከፈለጉ አንድ ለመፍጠር OpenCV ን መጠቀም ይችላሉ። የእሱ ሙሉ ዝርዝሮች እዚህ ተሰጥተዋል - ካስኬድ ክላሲፋየር ስልጠና።

የራስዎን ክላሲፋየር መፍጠር ካልፈለጉ ፣ OpenCV ለፊት ፣ ለዓይኖች ፣ ለፈገግታ ፣ ወዘተ ብዙ አስቀድመው የሰለጠኑ ምደባዎችን ይ containsል።

በቂ ንድፈ ሀሳብ ፣ ከ OpenCV ጋር የፊት መርማሪን እንፍጠር!

ፋይሉን ያውርዱ: faceDetection.py ከ GitHub.

ቁጥርን እንደ np ያስመጡ

አስመጪ cv2 faceCascade = cv2. CascadeClassifier ('Cascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) cap.set (3, 640) # set Width cap.set (4, 480) # set Height while True: ret, img = cap.read () img = cv2.flip (img, -1) ግራጫ = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) ፊቶች = faceCascade.detectMultiScale (ግራጫ ፣ ሚዛን አምራች = 1.2 ፣ ደቂቃ ጎረቤቶች = 5 ፣ ደቂቃ መጠን = (20 ፣ 20)) ለ (x ፣ y ፣ w ፣ h) በፊቶች ውስጥ: cv2. rectangle (img ፣ (x ፣ y) ፣ (x+w ፣ y+h) ፣ (255 ፣ 0 ፣ 0) ፣ 2) roi_gray = ግራጫ [y: y+h ፣ x: x+w] roi_color = img [y: y+h ፣ x: x+w] cv2.imshow ('ቪዲዮ' ፣ img) k = cv2.waitKey (30) & 0xff if k == 27: # እረፍት ካፕን ለመተው 'ESC' ን ይጫኑ። (cv2.destroyAllWindow ()

ብታምኑም ባታምኑም ፣ ከላይ የተጠቀሱት ጥቂት የኮድ መስመሮች ፊትን ለመለየት የሚያስፈልጉዎት ናቸው ፣ Python እና OpenCV ን በመጠቀም።

ካሜራውን ለመፈተሽ ከተጠቀመበት የመጨረሻ ኮድ ጋር ሲያወዳድሩ ጥቂት ክፍሎች እንደታከሉበት ይገነዘባሉ። ከዚህ በታች ያለውን መስመር ልብ ይበሉ

faceCascade = cv2. CascadeClassifier ('Cascades/haarcascade_frontalface_default.xml')

ይህ “ክላሲፋየር” የሚጫነው መስመር ነው (ያ በፕሮጀክት ማውጫዎ ስር “ካስካድስ/” በተሰኘ ማውጫ ውስጥ መሆን አለበት)።

ከዚያ ካሜራችንን እና በሉፕው ውስጥ እናስገባለን ፣ የግቤት ቪዲዮችንን በግራጫማ ሁኔታ (ከዚህ በፊት ያየነው) እንጭነዋለን።

እንደ መጠነ -ልኬት መጠን ፣ የጎረቤቶች ብዛት እና የተገኘው ፊት አነስተኛ መጠን እንደመሆኑ መጠን አንዳንድ በጣም አስፈላጊ ልኬቶችን በማለፍ አሁን የእኛን የክላሲፋየር ተግባር መደወል አለብን።

ፊቶች = faceCascade.detectMultiScale (ግራጫ ፣ ልኬት አምራች = 1.2 ፣ ደቂቃ ጎረቤቶች = 5 ፣ ደቂቃ መጠን = (20 ፣ 20))

የት ፣

  • ግራጫ የግቤት ግራጫ ምስል ነው።
  • scaleFactor በእያንዳንዱ የምስል ልኬት ላይ የምስል መጠን ምን ያህል እንደሚቀንስ የሚገልጽ መለኪያ ነው። የመጠን ፒራሚድን ለመፍጠር ጥቅም ላይ ይውላል።
  • minNeighbors ለማቆየት እያንዳንዱ እጩ አራት ማእዘን ምን ያህል ጎረቤቶች ሊኖሩት እንደሚገባ የሚገልጽ ግቤት ነው። ከፍ ያለ ቁጥር ዝቅተኛ የውሸት አዎንታዊ ነገሮችን ይሰጣል።
  • minSize እንደ ፊት የሚቆጠር ዝቅተኛው አራት ማእዘን መጠን ነው።

ተግባሩ በምስሉ ላይ ፊቶችን ይለያል። በመቀጠል ፣ ለምሳሌ ፣ ሰማያዊ ሬክታንግል በመጠቀም በምስሉ ላይ ያሉትን ፊቶች “ምልክት ማድረግ” አለብን። ይህ የሚከናወነው በዚህ የኮድ ክፍል ነው-

ለ (x ፣ y ፣ w ፣ h) በፊቶች

cv2. አራት ማዕዘን (img ፣ (x ፣ y) ፣ (x+w ፣ y+h) ፣ (255 ፣ 0 ፣ 0) ፣ 2) roi_gray = ግራጫ [y: y+h ፣ x: x+w] roi_color = img [y: y+h ፣ x: x+w]

ፊቶች ከተገኙ ፣ የተገኙትን ፊቶች አቀማመጥ በግራ በኩል ጥግ (x ፣ y) እና “ወ” እንደ ስፋቱ እና “ሸ” እንደ ቁመቱ ==> (x ፣ y ፣ w ፣ ሸ)። እባክዎን ከላይ ያለውን ስዕል ይመልከቱ።

አንዴ እነዚህን ሥፍራዎች ካገኘን ፣ ለፊቱ “ROI” (የተሳለ አራት ማዕዘን) መፍጠር እና ውጤቱን በ imshow () ተግባር ማቅረብ እንችላለን።

የ Rpi ተርሚናልን በመጠቀም ከላይ ያለውን የፓይዘን ስክሪፕት በፓይዘን አከባቢዎ ላይ ያሂዱ።

Python faceDetection.py

ውጤቱ:

ምስል
ምስል

እንዲሁም ለ “አይኖች ማወቂያ” ወይም ለ “ፈገግታ መለየት” አመዳደብንም ማካተት ይችላሉ። በእነዚያ ጉዳዮች ላይ ፣ ከፊት ውጭ ዓይንን ወይም ፈገግታ መለየት ትርጉም ስለማያገኝ የመደብ ሰጪውን ተግባር እና አራት ማዕዘን ቅርፅን በፊቱ ዑደት ውስጥ ያካተቱ ይሆናሉ።

ይህ የመመርመሪያ ዘዴ (HaarCascades) ብዙ የስሌት ኃይልን ከተጠቀመ በኋላ በ Pi ላይ ፣ በርካታ ኮድ ሰጪዎች በአንድ ኮድ መኖሩ ሂደቱን ማዘግየቱን እንደሚቀንስ ልብ ይበሉ። በዴስክቶፕ ላይ እሱን ማስኬድ ቀላል ነው።

በእኔ GitHub ላይ ሌሎች ምሳሌዎችን ያገኛሉ-

faceEyeDetection.py

faceSmileDetection.py

faceSmileEyeDetection.py

እና ከላይ ባለው ሥዕል ውስጥ ውጤቱን ማየት ይችላሉ።

እንዲሁም የፊት መፈለጊያውን በተሻለ ለመረዳት ከዚህ በታች ያለውን መማሪያ መከተል ይችላሉ-

Haar Cascade Object Detection Face & Eye OpenCV Python Tutorial

ደረጃ 5 የውሂብ መሰብሰብ

የውሂብ መሰብሰብ
የውሂብ መሰብሰብ
የውሂብ መሰብሰብ
የውሂብ መሰብሰብ

በመጀመሪያ ፣ በፎቶዎች ላይ ፊት ለይቶ ማወቅ ላይ ላደረገው ታላቅ ሥራ ራሚዝ ራጃን ማመስገን አለብኝ።

የፊት ገጽ ዕውቅና ሥራን እና ፒቶን በመጠቀም - የጀማሪ መመሪያ።

እና እንዲሁም ቪዲዮን በመጠቀም በጣም አጠቃላይ ትምህርት ያዘጋጀው አኒርባን ካር

የፊት መታወቂያ - 3 ክፍሎች

ሁለቱንም ትምህርቶች እንዲመለከቱ በእውነት እመክራለሁ።

እንዲህ እያለ የፕሮጀክታችንን የመጀመሪያ ምዕራፍ እንጀምር። እኛ እዚህ የምናደርገው ፣ ከመጨረሻው ደረጃ (ፊት ለይቶ ማወቅ) ጀምሮ ፣ በቀላሉ ለእያንዳንዱ መታወቂያ የምናከማችበትን የውሂብ ስብስብ እንፈጥራለን ፣ ፊት ለይቶ ለማወቅ ከተጠቀመበት ክፍል ጋር ግራጫ ያላቸው የፎቶዎች ቡድን።

በመጀመሪያ ፣ ፕሮጀክትዎን የሚያዳብሩበትን ማውጫ ይፍጠሩ ፣ ለምሳሌ ፣ FacialRecognitionProject

mkdir FacialRecognitionProject

በዚህ ማውጫ ውስጥ ፣ ለፕሮጀክታችን ከምንፈጥራቸው 3 የፓይዘን ስክሪፕቶች በተጨማሪ ፣ የፊት ቆጣቢውን በእሱ ላይ ማዳን አለብን። ከእኔ GitHub: haarcascade_frontalface_default.xml ማውረድ ይችላሉ

በመቀጠል ፣ የፊት ናሙናዎቻችንን የምናከማችበት እና “የውሂብ ስብስብ” የሚል ስም የምናወጣበት ንዑስ ማውጫ ይፍጠሩ

mkdir የውሂብ ስብስብ

እና ኮዱን ከእኔ GitHub: 01_face_dataset.py ያውርዱ

ማስመጣት cv2

import os cam = cv2. VideoCapture (0) cam.set (3, 640) # አዘጋጅ የቪዲዮ ስፋት ካሜራ። ፣ አንድ የቁጥር ፊት መታወቂያ face_id = ግብዓት ('\ n enter id id end press ==>') ህትመት ("\ n [INFO] የፊት መቅረጽን ማስጀመር። ካሜራውን ይመልከቱና ይጠብቁ …") # የግለሰብ ናሙና የፊት ቆጠራ ቆጠራን ያስጀምሩ = 0 በሚሆንበት ጊዜ (እውነት) ፦ ret ፣ img = cam.read () img = cv2.flip (img ፣ -1) # የቪዲዮ ምስል በአቀባዊ ግራጫ = cv2.cvtColor (img ፣ cv2. COLOR_BGR2GRAY) ፊቶች = face_detector.detectMultiScale (ግራጫ ፣ 1.3 ፣ 5) ለ (x ፣ y ፣ w ፣ h) በፊቶች ውስጥ: cv2. rectangle (img ፣ (x ፣ y) ፣ (x+w ፣ y+h) ፣ (255 ፣ 0 ፣ 0) ፣ 2)) count + = 1 # የተያዘውን ምስል ወደ የውሂብ ስብስቦች አቃፊ cv2.imwrite ("የውሂብ ስብስብ/ተጠቃሚ።" + str (face_id) + '.' + str (ቆጠራ) + ".jpg" ፣ ግራጫ [y: y + h, x: x+w]) cv2.imshow ('ምስል' ፣ img) k = cv2.waitKey (100) & 0xff # ቪዲዮን ለመውጣት 'ESC' ን ይጫኑ k == 27: የኤሊፍ ቆጠራን ይሰብስቡ> = 30: # 30 የፊት ናሙና ይውሰዱ እና የቪዲዮ ማቋረጥን ያቁሙ # አብ ያድርጉ የፅዳት ህትመት ("\ n [INFO] መውጫ ፕሮግራም እና የጽዳት ዕቃዎች") cam.release () cv2.destroyAllWindow ()

ኮዱ ፊት ለይቶ ለማወቅ ካየነው ኮድ ጋር በጣም ተመሳሳይ ነው። እኛ ያከልነው የተጠቃሚ መታወቂያ ለመያዝ “የግቤት ትዕዛዝ” ነበር ፣ ያ የኢቲጀር ቁጥር (1 ፣ 2 ፣ 3 ፣ ወዘተ) መሆን አለበት

face_id = ግብዓት ('\ n የተጠቃሚ መታወቂያ መጨረሻ ይጫኑ ==>')

እና ለእያንዳንዱ ለተያዙት ክፈፎች ፣ በ “የውሂብ ስብስብ” ማውጫ ላይ እንደ ፋይል እናስቀምጠው-

cv2.imwrite ("የውሂብ ስብስብ/ተጠቃሚ።" + str (face_id) + '.' + str (ቆጠራ) + ".jpg" ፣ ግራጫ [y: y + h ፣ x: x + w])

ልብ ይበሉ ከላይ ያለውን ፋይል ለማስቀመጥ ፣ ቤተ -መጽሐፍቱን ‹os› ማስመጣት አለብዎት። የእያንዳንዱ ፋይል ስም አወቃቀሩን ይከተላል-

ተጠቃሚ.face_id.count.jpg

ለምሳሌ ፣ የፊት_ይድ = 1 ላለው ተጠቃሚ በውሂብ ስብስብ/ ማውጫ ላይ ያለው የ 4 ኛ ናሙና ፋይል እንደዚህ ያለ ነገር ይሆናል -

ተጠቃሚ.1.4.jpg

ከላይ ባለው ፎቶዬ ላይ እንደሚታየው የእኔ ፒ. በእኔ ኮድ ላይ ከእያንዳንዱ መታወቂያ 30 ናሙናዎችን እይዛለሁ። በመጨረሻው “ኤሊፍ” ላይ መለወጥ ይችላሉ። የናሙናዎች ብዛት የፊት ናሙናዎች የተያዙበትን ሉፕ ለመስበር ያገለግላል።

የ Python ስክሪፕት ያሂዱ እና ጥቂት አይዲዎችን ይያዙ። አዲስ ተጠቃሚ ለማዋሃድ በፈለጉ ቁጥር (ወይም ፎቶዎቹን ቀድሞውኑ ለነበረው ለመቀየር) ስክሪፕቱን ማሄድ አለብዎት።

ደረጃ 6 - አሰልጣኝ

አሰልጣኝ
አሰልጣኝ

በዚህ በሁለተኛው ምዕራፍ ላይ ሁሉንም የተጠቃሚ ውሂብ ከውሂብ ስብስባችን መውሰድ እና OpenCV ማወቂያን “አሰልጣኝ” ማድረግ አለብን። ይህ የሚከናወነው በአንድ የተወሰነ የ OpenCV ተግባር ነው። ውጤቱ በ “አሰልጣኝ/” ማውጫ ላይ የሚቀመጥ የ.yml ፋይል ይሆናል።

ስለዚህ ፣ የሰለጠነውን መረጃ የምናከማችበትን ንዑስ ማውጫ መፍጠር እንጀምር-

mkdir አሰልጣኝ

ከእኔ GitHub ሁለተኛውን የፓይዘን ስክሪፕት ያውርዱ: 02_face_training.py

ማስመጣት cv2

ከፒኤል ማስመጣት nump ን እንደ np ያስመጡ የምስል ማስመጣት os # ዱካ ለፊት ምስል የውሂብ ጎታ ዱካ = 'የውሂብ ስብስብ' መታወቂያ = cv2.face. LBPHFaceRecognizer_create () detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); ምስሎችን እና የመለያ ውሂብን def getImagesAndLabels (ዱካ) ለማግኘት # ተግባር - imagePaths = [os.path.join (ዱካ ፣ ረ) ለ f በ os.listdir (መንገድ)] faceSamples = ids = ለ imagePath በምስል መንገዶች: PIL_img = Image.open (imagePath).convert ('L') # ወደ ግራጫ ደረጃ img_numpy = np.array (PIL_img ፣ 'uint8') id = int (os.path.split (imagePath) [-1]። ተከፋፍሏል (".") [1]) ፊቶች = detector.detectMultiScale (img_numpy) ለ (x, y, w, h) ፊቶች ላይ: faceSamples.append (img_numpy [y: y+h, x: x+w]) ids.append (መታወቂያ) የመመለሻ ፊት ናሙናዎች ፣ የመታወቂያዎች ህትመት ("\ n [INFO] የስልጠና ፊቶች። ጥቂት ሰከንዶች ይወስዳል። ይጠብቁ …") ፊቶች ፣ ids = getImagesAndLabels (ዱካ) ለይቶ ማወቅ። ስልጠና (ፊቶች ፣ np.array (መታወቂያዎች)) # ሞዴሉን በአሰልጣኝ/trainer.yml recognizer.write ('አሰልጣኝ/trainer.yml') # recognizer.save () በ Mac ላይ ሰርቷል ፣ ግን በ Pi ላይ አይደለም # የሰለጠኑ እና የተጠናቀቁ የፕሮግራም ህትመቶችን ቁጥር ያትሙ። ("\ n [INFO] {0} ፊቶች የሰለጠኑ። መውጫ ፕሮግራም"

በእርስዎ አርፒፒ ላይ የፒኢል ቤተ -መጽሐፍት መጫኑን ያረጋግጡ። ካልሆነ ፣ የሚከተለውን ትዕዛዝ በተርሚናል ውስጥ ያሂዱ።

የቧንቧ መጫኛ ትራስ

በ OpenCV ጥቅል ላይ የተካተተውን LBPH (LOCAL BINARY PATTERNS HISTOGRAMS) የፊት ለይቶ ማወቂያ እንጠቀማለን። ይህንን በሚከተለው መስመር ውስጥ እናደርጋለን-

ማወቂያ = cv2.face. LBPHFaceRecognizer_create ()

ተግባሩ "getImagesAndLabels (ዱካ)" ፣ በማውጫው ላይ ሁሉንም ፎቶዎች ይወስዳል - “የውሂብ ስብስብ/” ፣ 2 ድርድሮችን ይመለሳል - “ኢድስ” እና “ፊቶች”። በእነዚያ ድርድሮች እንደ ግብዓት ፣ ‹መታወቂያ ሰጪያችንን እናሠለጥናለን› ፦

recognizer.train (ፊቶች ፣ መታወቂያዎች)

በዚህ ምክንያት ቀደም ሲል በእኛ በተፈጠረው የአሠልጣኝ ማውጫ ውስጥ “trainer.yml” የሚባል ፋይል ይቀመጣል።

ይሀው ነው! ለማረጋገጫ ያሳየሁበትን የመጨረሻውን የህትመት መግለጫ ፣ ያሠለጥናቸውን የተጠቃሚዎች ፊት ብዛት አካትቻለሁ።

ደረጃ 1 ን ባከናወኑ ቁጥር ደረጃ 2 እንዲሁ መሮጥ አለበት

ደረጃ 7 መታወቂያ

እውቅና ሰጪ
እውቅና ሰጪ
እውቅና ሰጪ
እውቅና ሰጪ

አሁን የፕሮጀክታችን የመጨረሻ ምዕራፍ ላይ ደርሰናል። እዚህ ፣ በካሜራችን ላይ አዲስ ፊት እንይዛለን እና ይህ ሰው ፊቱ ተይዞ ከዚህ በፊት የሰለጠነ ቢሆን ፣ መታወቂያችን ከዚህ ግጥሚያ ጋር ምን ያህል መተማመን እንዳለው የሚያሳየው መታወቂያውን እና ጠቋሚውን የሚመልስ “ትንበያ” ያደርጋል።

የ 3 ኛ ደረጃ ፓይዘን ስክሪፕትን ከእኔ GitHub: 03_face_recognition.py ላይ እናውርድ።

ማስመጣት cv2

ማስመጣት numpy እንደ np ማስመጣት os recognizer = cv2.face. LBPHFaceRecognizer_create () recognizer.read ('አሰልጣኝ/trainer.yml') cascadePath = "haarcascade_frontalface_default.xml" faceCascade = cv2. CascadeClassifier (cascadePath); ቅርጸ -ቁምፊ = cv2. FONT_HERSHEY_SIMPLEX # መታወቂያ ቆጣሪ መታወቂያ = 0 # ከመታወቂያዎች ጋር የሚዛመዱ ስሞች ምሳሌ ==> ማርሴሎ id = 1 ፣ ወዘተ ስሞች = ['የለም' ፣ 'ማርሴሎ' ፣ 'ፓውላ' ፣ 'ኢልዛ' ፣ 'ዚ '፣' W '] # የእውነተኛ ጊዜ ቪዲዮ ቀረፃ ካሜራ = cv2. VideoCapture (0) cam.set (3, 640) # አዘጋጅ ቪዲዮ widht cam.set (4, 480) # የቪዲዮ ቁመት አዘጋጅ # ደቂቃ የመስኮት መጠንን ይግለጹ እንደ ፊት እንዲታወቅ minW = 0.1*cam.get (3) minH = 0.1*cam.get (4) እውነት ሆኖ ሳለ ret ፣ img = cam.read () img = cv2.flip (img ፣ -1) # በአቀባዊ ግራጫ = cv2.cvtColor (img ፣ cv2. COLOR_BGR2GRAY) ፊቶች = faceCascade.detectMultiScale (ግራጫ ፣ ልኬት አምራች = 1.2 ፣ ደቂቃ ጎረቤቶች = 5 ፣ minSize = (int (minW) ፣ int (minH)) ፣) ለ (x ፣ y) ፣ w ፣ h) በፊቶች ውስጥ: cv2. rectangle (img ፣ (x ፣ y) ፣ (x+w ፣ y+h) ፣ (0 ፣ 255 ፣ 0) ፣ 2) መታወቂያ ፣ በራስ መተማመን = ለይቶ ማወቅ። ትንበያ (ግራጫ [y: y+h, x: x+w]) # መተማመን ቢቀንስላቸው 100 ==> "0" ፍጹም ከሆነ (መተማመን <100): id = names [id] confidence = "{0}% ".format (ዙር (100 - በራስ መተማመን)) ሌላ ፦ id =" ያልታወቀ "እምነት =" {0}%"። ቅርጸት (ዙር (100 - conf መታወቂያ)) cv2.putTxt (img ፣ str (መታወቂያ) ፣ (x+5 ፣ y-5) ፣ ቅርጸ-ቁምፊ ፣ 1 ፣ (255 ፣ 255 ፣ 255) ፣ 2) cv2። x+5 ፣ y+h-5) ፣ ቅርጸ ቁምፊ ፣ 1 ፣ (255 ፣ 255 ፣ 0) ፣ 1) ከቪዲዮ ለመውጣት k == 27: break # ትንሽ የፅዳት ህትመት ("\ n [INFO] መውጫ ፕሮግራም እና የፅዳት እቃዎች") cam.release () cv2.destroyAllWindow ()

እዚህ አዲስ ድርድር እያካተትን ነው ፣ ስለዚህ በቁጥር መታወቂያዎች ፋንታ “ስሞችን” እናሳያለን -

ስሞች = ['የለም' ፣ 'ማርሴሎ' ፣ 'ፓውላ' ፣ 'ኢልዛ' ፣ 'ዚ' ፣ 'ወ']

ስለዚህ ፣ ለምሳሌ - ማርሴሎ መታወቂያ = 1 ያለው ተጠቃሚ ይሆናል። ፓውላ: መታወቂያ = 2 ፣ ወዘተ.

በመቀጠል ፣ እኛ ከሃስካስካድ ምድብ ጋር ቀደም ሲል እንዳደረግነው አንድ ፊት እናገኛለን። የተገኘ ፊት ስላለን ከላይ ባለው ኮድ ውስጥ በጣም አስፈላጊ የሆነውን ተግባር ልንጠራ እንችላለን-

መታወቂያ ፣ መተማመን = ለይቶ ማወቅ። ትንበያ (የፊቱ ግራጫ ክፍል)

መታወቂያ (ትንበያ) (ትንበያ) ፣ ለመተንተን የወሰደውን የፊት ክፍል እንደ ልኬት ይወስድ እና ሊገመት የሚችል ባለቤቱን ይመልሳል ፣ ይህም መታወቂያውን እና መታወቂያው ከዚህ ግጥሚያ ጋር ምን ያህል መተማመን እንዳለው ያሳያል።

ፍጹም ተዛማጅ ከተሸፈነ የመተማመን መረጃ ጠቋሚው “ዜሮ” እንደሚመለስ ልብ ይበሉ

እና በመጨረሻ ፣ ለይቶ ማወቅ ፊትን ሊተነብይ የሚችል ከሆነ ፣ ሊገመት በሚችል መታወቂያ ላይ ምስሉ ላይ ጽሑፍ እናደርጋለን እና ግጥሚያው ትክክል መሆኑን በ % ውስጥ “ዕድል” ምን ያህል ነው (“ዕድል” = 100 - የመተማመን መረጃ ጠቋሚ)። ካልሆነ “የማያውቀው” መለያ ፊቱ ላይ ይደረጋል።

ከውጤቱ ጋር ከ-g.webp

ምስል
ምስል

ከላይ ባለው ሥዕል ላይ ፣ በዚህ ፕሮጀክት የተከናወኑ አንዳንድ ሙከራዎችን አሳያለሁ ፣ እዚያም መታወቂያው መሥራቱን ለማረጋገጥ ፎቶዎችን የተጠቀምኩበት።

ደረጃ 8 መደምደሚያ

መደምደሚያ
መደምደሚያ

እንደተለመደው ፣ ይህ ፕሮጀክት ሌሎች ወደ አስደሳች የኤሌክትሮኒክስ ዓለም እንዲገቡ ይረዳቸዋል ብዬ ተስፋ አደርጋለሁ!

ለዝርዝሮች እና ለመጨረሻ ኮድ ፣ እባክዎን የእኔን የ GitHub ማስቀመጫ ጎብኝ-OpenCV-Face-Recognition

ለተጨማሪ ፕሮጄክቶች እባክዎን የእኔን ብሎግ ይጎብኙ - MJRoBot.org

“አውቶማቲክ የፊት ትራክ እና ፊት ለይቶ ለማወቅ ሌሎች ዘዴዎችን” የምንመረምርበት የወደፊት አጋዥ እይታ ከዚህ በታች-

ምስል
ምስል

ሳሉዶስ ከደቡብ ዓለም!

በሚቀጥለው አስተማሪዬ ውስጥ እንገናኝ!

አመሰግናለሁ, ማርሴሎ

የሚመከር: