ዝርዝር ሁኔታ:

የፊት ለይቶ ማወቅ+እውቅና 8 ደረጃዎች (ከስዕሎች ጋር)
የፊት ለይቶ ማወቅ+እውቅና 8 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የፊት ለይቶ ማወቅ+እውቅና 8 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የፊት ለይቶ ማወቅ+እውቅና 8 ደረጃዎች (ከስዕሎች ጋር)
ቪዲዮ: Ethiopia:- የልደት ቀን እና ባህሪ በኮከብ ቆጠራ የተወለዱበት ወር ስለ እርሶ ይናገራል | Nuro Bezede Girls 2024, ህዳር
Anonim
Image
Image
የፊት ለይቶ ማወቅ+እውቅና
የፊት ለይቶ ማወቅ+እውቅና

ይህ በ OpenCV ከካሜራ ፊት ማወቂያን እና እውቀትን የማስኬድ ቀላል ምሳሌ ነው። ማሳሰቢያ - እኔ ይህንን ፕሮጀክት ለሴንሰር ውድድር አደረግኩ እና ለመከታተል እና ለመገንዘብ ፊቶች እንደ ሴንሰር ተጠቀምኩኝ። ስለዚህ ፣ ግባችን በዚህ ክፍለ ጊዜ ፣ 1. አናኮንዳ ጫን 2. ክፍት CV ጥቅልን ያውርዱ። ፊት ለይቶ ለማወቅ ኮድ ያድርጉ 6. የውሂብ ስብስብ ለመፍጠር ኮድ ይስሩ 7. መታወቂያውን ለማሠልጠን ኮድ ይስሩ 8. ፊቶችን እና ውጤትን ለመለየት ኮድ ያድርጉ።

ደረጃ 1 አናኮንዳ ጫን

አናኮንዳ ጫን
አናኮንዳ ጫን

አናኮንዳ በመሠረቱ እንደ NumPy ፣ Pandas ፣ IPython Notebook ፣ ወዘተ ባሉ ብዙ ጠቃሚ ጥቅሎች የተላከ በጥሩ ሁኔታ የታሸገ የ Python IDE ነው በሳይንሳዊ ማህበረሰብ ውስጥ በሁሉም ቦታ የሚመከር ይመስላል። እሱን ለመጫን አናኮንዳ ይመልከቱ።

ደረጃ 2: ክፍት CV ጥቅል ያውርዱ

ክፍት CV ጥቅል ያውርዱ
ክፍት CV ጥቅል ያውርዱ

በመጀመሪያ ፣ የተሟላውን የ OpenCV ጥቅል ለማውረድ ወደ ኦፊሴላዊው የ OpenCV ጣቢያ ይሂዱ። የሚወዱትን ስሪት ይምረጡ (2.x ወይም 3.x)። እኔ በ Python 2.x እና OpenCV 2.x ላይ ነኝ - በዋነኝነት ምክንያቱም የ OpenCV -Python አጋዥ ሥልጠናዎች በማዋቀር/ላይ የተመሠረተ ነው።

በእኔ ሁኔታ ጥቅሉን (በዋናነት አቃፊ) በቀጥታ ወደ ኤፍ ድራይቭ አውጥቻለሁ። (ኤፍ: / opencv)።

ደረጃ 3 - የአካባቢ ተለዋዋጮችን ያዘጋጁ

የአካባቢ ተለዋዋጮችን ያዘጋጁ
የአካባቢ ተለዋዋጮችን ያዘጋጁ

የ cv2.pyd ፋይልን ይቅዱ እና ይለጥፉ

የአናኮንዳ ጣቢያ-ፓኬጆች ማውጫ (ለምሳሌ ኤፍ ፦ / የፕሮግራም ፋይሎች / Anaconda2 / Lib / የጣቢያ-ጥቅሎች በእኔ ሁኔታ) እርስዎ ሊያስመጧቸው የሚችሏቸው የ Python ጥቅሎችን ይ containsል። ግባችን የ cv2.pyd ፋይልን ወደዚህ ማውጫ መገልበጥ እና መለጠፍ ነው (እኛ የማስመጣት cv2 ን በእኛ Python ኮዶች ውስጥ መጠቀም እንድንችል)።

ይህንን ለማድረግ የ cv2.pyd ፋይልን ይቅዱ…

ከዚህ የ OpenCV ማውጫ (የመጀመሪያው ክፍል በማሽንዎ ላይ ትንሽ የተለየ ሊሆን ይችላል)

# Python 2.7 እና 64-ቢት ማሽን F: / opencv / build / Python / 2.7 / x64# Python 2.7 እና 32-bit machine: F: / opencv / build / Python / 2.7 / x84

ለዚህ የአናኮንዳ ማውጫ (የመጀመሪያው ክፍል በማሽንዎ ላይ ትንሽ የተለየ ሊሆን ይችላል)

ኤፍ: / የፕሮግራም ፋይሎች / Anaconda2 / Lib / ጣቢያ-ጥቅሎች

ይህንን እርምጃ ከፈጸምን በኋላ አሁን በፒቶን ኮድ የማስመጣት cv2 ን መጠቀም እንችላለን። ግን FFMPEG (የቪዲዮ ኮዴክ) እንዲሠራ (ቪዲዮዎችን እንደ ማቀናበር ያሉ ነገሮችን እንድናደርግ ለማስቻል) አሁንም ትንሽ ተጨማሪ ሥራ መሥራት አለብን።

በ “የእኔ ኮምፒተር” (ወይም “ይህ ፒሲ” በዊንዶውስ 8.1 ላይ) ላይ በቀኝ ጠቅ ያድርጉ-> በግራ-ጠቅታ ባህሪዎች-> በግራ-ጠቅታ “የላቀ” ትር-> በግራ ጠቅታ “የአካባቢ ተለዋዋጮች…” ቁልፍ። አዲስ የተጠቃሚ ተለዋዋጭ ያክሉ። ወደ OpenCV (ወይ ለ x86 ለ 32 ቢት ስርዓት ወይም ለ 64 ቢት ስርዓት x64።) በአሁኑ ጊዜ በ 64 ቢት ማሽን ላይ ነኝ።

32-bitOPENCV_DIRC: / opencv / build / x86 / vc12

64-bitOPENCV_DIRC: / opencv / build / x64 / vc12

%OPENCV_DIR %\ bin ን ለተጠቃሚው ተለዋዋጭ PATH ያያይዙ።

ለምሳሌ ፣ የእኔ የ PATH ተጠቃሚ ተለዋዋጭ እንደዚህ ይመስላል…

ከዚህ በፊት:

ረ: / ተጠቃሚዎች / ጆኒ / Anaconda; ሐ: / ተጠቃሚዎች / ጆኒ / አናኮንዳ / ስክሪፕቶች

በኋላ ፦

ረ: / ተጠቃሚዎች / ጆኒ / anaconda; ሐ: / ተጠቃሚዎች / ጆኒ / anaconda / ስክሪፕቶች;%OPENCV_DIR%\ bin

እኛ ያበቃነው ይህ ነው! FFMPEG ለመጠቀም ዝግጁ ነው!

ደረጃ 4: ለማረጋገጥ ሙከራ

ለማረጋገጥ ሙከራ
ለማረጋገጥ ሙከራ
ለማረጋገጥ ሙከራ
ለማረጋገጥ ሙከራ

አሁን በአናኮንዳ (በ Spyder IDE በኩል) እነዚህን ማድረግ እንደምንችል መሞከር አለብን።

  • የ OpenCV ጥቅል ያስመጡ
  • የ FFMPEG መገልገያውን ይጠቀሙ (ቪዲዮዎችን ለማንበብ/ለመፃፍ/ለማስኬድ)

ሙከራ 1: OpenCV ን ማስመጣት እንችላለን?

አናኮንዳ አሁን የ OpenCV-Python ጥቅል (ማለትም ፣ cv2) ማስመጣት መቻሉን ለማሳመን ፣

በ IPython ኮንሶል ውስጥ እነዚህን ያቅርቡ

ማስመጣት cv2

ሕትመት cv2._ ስሪት_

ጥቅሉ cv2 ምንም ስህተቶች ከሌሉት እሺ ከውጭ ከገባ ፣ እና የ cv2 ስሪት ከታተመ እኛ ሁላችንም ጥሩ ነን!

ሙከራ 2 - የ FFMPEG ኮዴክን መጠቀም እንችላለን?

ናሙና ያስቀምጡ

input_video.mp4

የቪዲዮ ፋይል በማውጫ ውስጥ። የምንችለውን ለመሞከር እንፈልጋለን -

  • ይህን.mp4 ቪዲዮ ፋይል ያንብቡ ፣ እና
  • አዲስ የቪዲዮ ፋይል ይፃፉ (.avi ወይም.mp4 ወዘተ ሊሆን ይችላል)

ይህንን ለማድረግ የሙከራ ፓይዘን ኮድ ሊኖረን ይገባል ፣ test.py ብለው ይደውሉለት። እንደ ናሙናው በተመሳሳይ ማውጫ ውስጥ ያስቀምጡት

input_video.mp4

ፋይል።

ይህ ነው

ፈተና.ፒ

ሊመስል ይችላል (ማስታወሻ - በአስተያየቱ መስክ ለፔት እና ለ ዋረን ጥቆማዎች ብዙ አመሰግናለሁ - የመጀመሪያውን የሙከራ ኮዴን በእሱ ተተክቻለሁ - እባክዎን እራስዎ ይሞክሩት እና ይህ በተሻለ ሁኔታ የሚሰራ ከሆነ ያሳውቁን)

ማስመጣት cv2

cap = cv2. VideoCapture ("input_video.mp4") የህትመት cap.isOpened () # እውነት = ቪዲዮን በተሳካ ሁኔታ አንብብ። ውሸት - ቪዲዮ ማንበብ አልተሳካም። fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out. ተከፈተ () # እውነት = ቪዲዮውን በተሳካ ሁኔታ ጻፉ። ውሸት - ቪዲዮን አለመፃፍ። ካፕ. መልቀቅ () መውጣት። መልቀቅ ()

ይህ ፈተና በጣም አስፈላጊ ነው። የቪዲዮ ፋይሎችን ማስኬድ ከፈለጉ አናኮንዳ / ስፓይደር አይዲኤፍ ኤፍኤምፒኤም (የቪዲዮ ኮዴክ) መጠቀም መቻሉን ማረጋገጥ ያስፈልግዎታል። ሥራውን ለማከናወን ብዙ ቀናት ወስዶብኛል። ግን ብዙ ጊዜ እንደሚወስድዎት ተስፋ አደርጋለሁ! ማስታወሻ) አናኮንዳ ስፓይደር አይዲኢን ሲጠቀሙ አንድ ተጨማሪ በጣም ጠቃሚ ጠቃሚ ምክር። የአሁኑን የሥራ ማውጫ (CWD) መፈተሽዎን ያረጋግጡ !!!

ደረጃ 5: ፊት ለይቶ ለማወቅ ኮድ ያድርጉ

ፊት ለይቶ ለማወቅ ኮድ ያድርጉ
ፊት ለይቶ ለማወቅ ኮድ ያድርጉ
ፊት ለይቶ ለማወቅ ኮድ ያድርጉ
ፊት ለይቶ ለማወቅ ኮድ ያድርጉ

ግብ

በዚህ ክፍለ ጊዜ ፣

  • በሃር ባህርይ ላይ የተመረኮዘ የ Cascade Classifiers ን በመጠቀም የፊት ለይቶ ማወቅ መሰረታዊ ነገሮችን እናያለን
  • እኛ ለዓይን ማወቂያ ወዘተ ተመሳሳይ እንዘረጋለን

በ OpenCV ውስጥ Haar-cascade ለይቶ ማወቅ

እዚህ እኛ ማወቅን እንይዛለን። OpenCV አስቀድሞ ለፊቱ ፣ ለዓይኖች ፣ ለፈገግታ ብዙ አስቀድሞ የሰለጠኑ ምደባዎችን ይ containsል ፣ እነዚያ የኤክስኤምኤል ፋይሎች በ opencv/data/haarcascades/folder ውስጥ ይከማቻሉ። በ OpenCV የፊት እና የዓይን መመርመሪያን እንፍጠር። በመጀመሪያ የሚያስፈልጉትን የኤክስኤምኤል መደብ ሰጪዎችን መጫን አለብን። ከዚያ የግቤት ምስላችንን (ወይም ቪዲዮን) በግራጫ ሚዛን ሁኔታ ይጫኑ ወይም ካሜራ መጠቀም እንችላለን (ለእውነተኛ ጊዜ ፊት ለይቶ ማወቅ)

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

አስመጣ cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade.xml ') cap = cv2. VideoCapture (0) 1: ret, img = cap.read () ግራጫ = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) ፊቶች = face_cascade.detectMultiScale (ግራጫ ፣ 1.5 ፣ 5) ለ (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] ዓይኖች = eye_cascade.detectMultiScale (roi_gray) ለ (ለምሳሌ ፣ አይ ፣ እ ፣ እ) በዓይኖች ውስጥ: cv2. rectangle (roi_color ፣ (የቀድሞ ፣ አይ) ፣ (የቀድሞ +ኤው ፣ አይ +ኤህ) ፣ (0 ፣ 255 ፣ 0) ፣ 2) “ተገኝቷል” +str (ሌን (ፊቶች)) +“ፊት (ዎች)” cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff ከሆነ k == 27

ደረጃ 6 የውሂብ ቅንብር ለመፍጠር ኮድ ያዘጋጁ

የውሂብ ስብስብ ለመፍጠር ኮድ ያዘጋጁ
የውሂብ ስብስብ ለመፍጠር ኮድ ያዘጋጁ
የውሂብ ስብስብ ለመፍጠር ኮድ ያዘጋጁ
የውሂብ ስብስብ ለመፍጠር ኮድ ያዘጋጁ

እኛ የፊት መታወቂያ እያደረግን ነው ፣ ስለዚህ አንዳንድ የፊት ምስሎች ያስፈልግዎታል! የራስዎን የውሂብ ስብስብ መፍጠር ወይም ከሚገኙት የፊት የውሂብ ጎታዎች በአንዱ መጀመር ይችላሉ ፣ https://face-rec.org/databases/ ወቅታዊ የሆነ አጠቃላይ እይታ ይሰጥዎታል። ሶስት አስደሳች የመረጃ ቋቶች (የማብራሪያው ክፍሎች ከ https://face-rec.org ተጠቅሰዋል)

  • AT&T Facedatabase
  • ያሌ Facedatabase ሀ
  • የተራዘመ ዬል Facedatabase ለ

ከዚህ በታች በተሰጠው ኮድ እገዛ የራሴን የውሂብ ስብስብ እጠቀማለሁ….

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

አስመጣ cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('user id') sampleN = 0; ሳለ 1: ret, img = cap.read () ግራጫ = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) ፊቶች = face_cascade.detectMultiScale (ግራጫ ፣ 1.3 ፣ 5) ለ (x ፣ y ፣ w ፣ h) በፊቶች ውስጥ: ናሙናN = ናሙናN+1; cv2.imwrite ("F:/Program Files/projects/face_rec/facesData/User."+str (id)+"."+str (sampleN)+".jpg" ፣ ግራጫ [y: y+h, x: x+w]) cv2.አራት ማዕዘን (img ፣ (x ፣ y) ፣ (x+w ፣ y+h) ፣ (255 ፣ 0 ፣ 0) ፣ 2) cv2.waitKey (100) cv2., img) cv2.waitKey (1) ናሙና ከሆነ N> 20: መክፈቻ ካፕ. መልቀቅ () cv2.destroyAllWindow ()

ደረጃ 7 መታወቂያውን ለማሠልጠን ኮድ ያዘጋጁ

መታወቂያውን ለማሠልጠን ኮድ ያዘጋጁ
መታወቂያውን ለማሠልጠን ኮድ ያዘጋጁ

የስልጠናውን ስብስብ ለማዘጋጀት ተግባሩን ይፍጠሩ

አሁን አንድ ተግባር እንገልፃለን

getImagesWithID (መንገድ)

ወደ ምስሉ የውሂብ ጎታ እንደ ግብዓት ክርክር ፍፁም መንገድ የሚወስድ እና የ 2 ዝርዝርን ቱፕል ይመልሳል ፣ አንደኛው የተገኙትን ፊቶች የያዘ እና ሁለተኛው ለዚያ ፊት ተጓዳኝ መለያ የያዘ። ለምሳሌ ፣ በፊቶች ዝርዝር ውስጥ ያለው የኢት መረጃ ጠቋሚ በውሂብ ጎታ ውስጥ 5 ኛውን ግለሰብ የሚወክል ከሆነ ፣ በመለያዎች ዝርዝር ውስጥ ያለው ተጓዳኝ የኢት ቦታ ከ 5 ጋር እኩል የሆነ እሴት አለው።

አሁን ከዚህ በታች በተሰጠው ኮድ እገዛ የውሂብ ስብስብ ፊቶችን (በደረጃ 6 የተፈጠረ) ወደ.yml ፋይል ይለውጡ -

አስመጣ os

nump ን እንደ np ማስመጣት cv2 ከ PIL ማስመጣት ምስል # ለመልክት እኛ LBPH የፊት ለይቶ ማወቂያ = cv2.createLBPHFaceRecognizer (); ዱካ = "ኤፍ:/የፕሮግራም ፋይሎች/ፕሮጀክቶች/face_rec/facesData" def getImagesWithID (ዱካ): imagePaths = [os.path.join (ዱካ ፣ ረ) ለ f በ os.listdir (ዱካ)] # የህትመት ምስል_መንገድ #getImagesWithID (መንገድ) ፊቶች = መታወቂያዎች = በምስል መንገድ ውስጥ ለምስል መንገድ - # ምስሉን ያንብቡ እና ወደ ግራጫማ ፊቶችImg = Image.open (imagePath)። ይለውጡ ('L') faceNP = np.array (faceImg ፣ 'uint8') # የምስል መታወቂያውን = int (os.path.split (imagePath) [-1].split (".") [1]) # በምስሉ ፊቶች ውስጥ ፊቱን ይፈልጉ። ተግብር (faceNP) መታወቂያዎች (መታወቂያ) cv2.imshow ("ለመሸጋገር ፊቶችን ማከል" ፣ faceNP) cv2.waitKey (10) መመለስ np.array (መታወቂያዎች) ፣ ፊቶች Ids ፣ face = getImagesWithID (መንገድ) recognizer.train (ፊቶች ፣ አይዶች) recognizer.save ("ኤፍ:/የፕሮግራም ፋይሎች/ፕሮጀክቶች/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

ይህንን ኮድ በመጠቀም ሁሉም የፊት ውሂብ ስብስብ ወደ አንድ.yml ፋይል ይቀየራል…..የመገኛ ቦታ ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

ደረጃ 8 ፊቶችን እና ውጤትን ለመለየት ኮድ ያድርጉ

Guyzz ይህ በድር ካሜራዎ አማካኝነት ፊቶችን ለመለየት ኮዱን የምንፈጥርበት የመጨረሻው እርምጃ ነው። በዚህ ደረጃ የሚከናወኑ ሁለት ተግባራት አሉ…. 1. ቪዲዮውን ከካሜም መቅረጽ 2. ከእርስዎ.yml ፋይል ጋር ያወዳድሩ

nump ን እንደ npimport cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRecognizer rec.load ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL ፣ 5, 1, 0, 4) 1: ret, img = cap.read () ግራጫ = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) ፊቶች = face_cascade.detectMultiScale (ግራጫ ፣ 1.5 ፣ 5) ለ (x ፣ y ፣ w ፣ h) በፊቶች ውስጥ: cv2. rectangle (img ፣ (x ፣ y) ፣ (x+w ፣ y+h) ፣ (255 ፣ 0 ፣ 0) ፣ 2) መታወቂያ ፣ conf = rec. ትንበያ (ግራጫ [y: y+h ፣ x: x+w]) ከሆነ (id == 2): id = "alok" id id == 1: id = "alok" if id == 3: id = "anjali" if id == 4: id = "Gaurav" id = = 5: id = 'rahul' if id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), font, 255) cv2.imshow ('img', img) cv2.waitKey (1) == ord ('q'): ካፕ ይሰብሩ። መልቀቅ ()

cv2. DestroyAllWindow ()

እና በመጨረሻ ውጤቱ ከዓይኖችዎ ፊት ለፊት ይመጣል …… እንዲሁም የዚፕ ፋይሉን ከአገናኙ በታች ማውረድ ይችላሉ -ኮዶቹን ለማውረድ እዚህ ጠቅ ያድርጉ። ስለዚህ ፣ በዚህ መመሪያ ውስጥ OpenCV ን በመጠቀም የፊት ለይቶ ማወቅን+የማወቅን ተግባር አከናወንን….. እንደዚህ አስተማሪ….. plzzz ሰብስክራይብ አድርጉልኝ እና ድምጽ ስጡኝ….. ወዳጆች አመሰግናለሁ:)

የሚመከር: