Агуулгын хүснэгт:

Нүүр илрүүлэх+таних: 8 алхам (зурагтай)
Нүүр илрүүлэх+таних: 8 алхам (зурагтай)

Видео: Нүүр илрүүлэх+таних: 8 алхам (зурагтай)

Видео: Нүүр илрүүлэх+таних: 8 алхам (зурагтай)
Видео: 🎶 ДИМАШ "ОПЕРА 2". История выступления и анализ успеха | Dimash "Opera 2" 2024, Долдугаар сарын
Anonim
Image
Image
Нүүр илрүүлэх+таних
Нүүр илрүүлэх+таних

Энэ бол камераас OpenCV ашиглан нүүр таних, таних ажиллуулах энгийн жишээ юм. ТАЙЛБАР: Би энэ төслийг сенсорын тэмцээнд зориулж хийсэн бөгөөд камерыг таних, таних нүүрний мэдрэгч болгон ашигласан. Тэгэхээр бидний зорилго Энэ хуралдаанд 1. Анаконда програмыг суулгаарай 2. Нээлттэй CV багцыг татаж аваарай 3. Байгаль орчны хувьсагчуудыг тохируулаарай 4. 5 батлахын тулд тест хий.. Нүүр илрүүлэх код гаргах 6. Өгөгдлийн багц үүсгэх код хийх 7. Танигчийг сургах код хийх 8. Царайг таних код хийх & Үр дүн.

Алхам 1: Анаконда суулгана уу

Анаконда суулгаарай
Анаконда суулгаарай

Анаконда бол үндсэндээ NumPy, Pandas, IPython тэмдэглэлийн дэвтэр гэх мэт олон төрлийн ашигтай багцуудаар дагалддаг, маш сайн багцалсан Python IDE юм. Үүнийг шинжлэх ухааны нийгэмлэгийн хаа сайгүй санал болгодог бололтой. Суулгахын тулд Anaconda -г шалгаарай.

Алхам 2: Нээлттэй CV багцыг татаж авах

Нээлттэй CV багцыг татаж авах
Нээлттэй CV багцыг татаж авах

Нэгдүгээрт, OpenCV -ийн бүрэн багцыг татаж авахын тулд албан ёсны OpenCV сайт руу очно уу. Таалагдсан хувилбараа сонгоно уу (2.x эсвэл 3.x). Би Python 2.x ба OpenCV 2.x дээр ажилладаг - голчлон OpenCV -Python хичээлүүдийг ийм байдлаар тохируулсан/суурилсан байдаг.

Миний хувьд би багцыг (үндсэндээ хавтас) шууд F хөтөч дээрээ гаргаж авсан. (F: / opencv).

Алхам 3: Байгаль орчны хувьсагчдыг тохируулах

Байгаль орчны хувьсагчдыг тохируулах
Байгаль орчны хувьсагчдыг тохируулах

Cv2.pyd файлыг хуулж буулгана уу

Anaconda Site-packages лавлах (жишээ нь F: / Program Files / Anaconda2 / Lib / site-packages) миний оруулж болох Python багцуудыг агуулдаг. Бидний зорилго бол cv2.pyd файлыг энэ директорт хуулж буулгах явдал юм (ингэснээр бид импорт cv2 -ийг Python код дээрээ ашиглах боломжтой болно.).

Үүнийг хийхийн тулд cv2.pyd файлыг хуулж аваарай …

Энэ OpenCV лавлахаас (эхлэл хэсэг нь таны машин дээр арай өөр байж магадгүй):

# Python 2.7 ба 64 битийн машин: F: / opencv / build / python / 2.7 / x64# Python 2.7 ба 32 битийн машин: F: / opencv / build / python / 2.7 / x84

Энэ Anaconda лавлахад (эхлэл хэсэг нь таны машин дээр арай өөр байж магадгүй):

F: / Program Files / Anaconda2 / Lib / site-packages

Энэ алхамыг хийсний дараа бид импорт cv2 -ийг Python кодоор ашиглах боломжтой болно. ГЭХДЭЭ бид FFMPEG (видео кодек) -ыг ажиллуулахын тулд (видеог боловсруулах гэх мэт зүйлсийг хийх боломжийг олгохын тулд) арай илүү их ажил хийх шаардлагатай хэвээр байна.

"Миний компьютер" (эсвэл Windows 8.1 дээрх "Энэ компьютер") дээр хулганы баруун товчийг дарна уу-Properties-> зүүн товчлуур дээр "Advanced" таб-> "Environment Variables …" товчлуур дээр дарна уу. Шинэ хэрэглэгчийн хувьсагч нэмэх. OpenCV-ийг зааж өгөх (32 битийн системд x86 эсвэл 64 битийн системд зориулсан x64) Би одоогоор 64 битийн машин дээр ажиллаж байна.

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

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

%OPENCV_DIR %\ bin -ийг хэрэглэгчийн хувьсагчийн PATH дээр нэмнэ үү.

Жишээлбэл, миний PATH хэрэглэгчийн хувьсагч иймэрхүү харагдаж байна …

Өмнө нь:

F: / Хэрэглэгчид / Жонни / Анаконда; C: / Хэрэглэгчид / Жонни / Анаконда / Скриптүүд

Үүний дараа:

F: / Хэрэглэгчид / Жонни / Анаконда; C: / Хэрэглэгчид / Жонни / Анаконда / Скриптүүд;%OPENCV_DIR%\ бин

Энэ бол бидний хийсэн зүйл юм! FFMPEG ашиглахад бэлэн боллоо!

Алхам 4: Баталгаажуулахын тулд тест хийнэ үү

Баталгаажуулахын тулд тест хийх
Баталгаажуулахын тулд тест хийх
Баталгаажуулахын тулд тест хийх
Баталгаажуулахын тулд тест хийх

Бид одоо үүнийг Анаконда (Spyder IDE -ээр) хийж чадах эсэхээ шалгах хэрэгтэй.

  • OpenCV багцыг импортлох
  • FFMPEG хэрэгслийг ашиглана уу (видеог унших/бичих/боловсруулах)

Туршилт 1: Бид OpenCV импортлох боломжтой юу?

Анаконда одоо OpenCV-Python багцыг (cv2) импортлох боломжтой болсон гэдгийг батлахын тулд, Эдгээрийг IPython консол дээр гаргана уу.

cv2 импортлох

cv2._ хувилбар_ хэвлэх

Хэрэв cv2 багцыг ямар ч алдаагүйгээр оруулж ирсэн бөгөөд cv2 хувилбарыг хэвлэсэн бол бид бүгд сайн байна!

Тест 2: Бид FFMPEG кодек ашиглаж болох уу?

Дээж байрлуулах

input_video.mp4

лавлах дахь видео файл. Бид чадах эсэхээ шалгахыг хүсч байна.

  • Үүнийг.mp4 видео файлыг уншина уу, мөн
  • шинэ видео файл бичих (.avi эсвэл.mp4 гэх мэт байж болно)

Үүнийг хийхийн тулд бид туршилтын python кодтой байх ёстой бөгөөд үүнийг test.py гэж нэрлэнэ үү. Үүнийг дээжтэй ижил лавлах санд байрлуулна уу

input_video.mp4

файл.

Энэ бол юу вэ

тест.py

иймэрхүү харагдаж магадгүй юм (Тэмдэглэл: Пит, Уоррен нарын тайлбарын талбарт өгсөн саналуудын ачаар - Би анхны тест кодоо түүний кодоор сольсон - үүнийг өөрөө туршиж үзээд энэ нь илүү сайн ажилладаг эсэхийг бидэнд мэдэгдээрэй):

cv2 импортлох

cap = cv2. VideoCapture ("input_video.mp4") cap.isOpened () # True = видеог амжилттай уншлаа. Хуурамч - видеог уншиж чадахгүй байна. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) хэвлэх.isOpened () # True = видеог амжилттай бичих. Хуурамч - видео бичиж чадахгүй байна. cap.release () out.release ()

Энэхүү туршилт нь маш чухал юм. Хэрэв та видео файлуудыг боловсруулахыг хүсч байвал Anaconda / Spyder IDE нь FFMPEG (видео кодек) ашиглах боломжтой эсэхийг шалгах хэрэгтэй. Үүнийг ажиллуулахын тулд надад хэдэн өдөр зарцуулсан. Гэхдээ энэ нь танд хамаагүй бага хугацаа зарцуулна гэж найдаж байна!:) Анхаарна уу: Anaconda Spyder IDE -ийг ашиглахад бас нэг чухал зөвлөгөө. Одоогийн ажлын лавлахыг (CWD) шалгаарай.

Алхам 5: Нүүр илрүүлэх кодыг хийх

Нүүр таних код хийх
Нүүр таних код хийх
Нүүр таних код хийх
Нүүр таних код хийх

Зорилго

Энэ хуралдаанд,

  • Haar онцлогт суурилсан Cascade Classifiers ашиглан нүүр таних үндсийг бид харах болно
  • Нүд илрүүлэх гэх мэт зүйлийг бид сунгах болно

OpenCV дахь Haar-cascade илрүүлэлт

Энд бид илрүүлэх асуудлыг авч үзэх болно. OpenCV нь нүүр, нүд, инээмсэглэл гэх мэт урьдчилан бэлтгэгдсэн олон ангилагчдыг агуулдаг бөгөөд эдгээр XML файлууд нь opencv/data/haarcascades/фолдерт хадгалагддаг. OpenCV -ийн тусламжтайгаар нүүр, нүд илрүүлэгчийг бүтээцгээе. Эхлээд шаардлагатай XML ангилагчийг ачаалах хэрэгтэй. Дараа нь бидний оруулсан зургийг (эсвэл видеог) саарал өнгөний горимд ачаалах Эсвэл бид камерыг ашиглаж болно (Бодит цагийн нүүр илрүүлэхийн тулд)

np гэж numpy импортлох

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/ha/.xml ') cap = cv2. VideoCapture (0) while 1: ret, img = cap.read () gray = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) x, y, w, h) нүүрэн дээр: cv2.dectangle (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] eyes = eye_cascade.detectMultiScale (roi_gray) for (ex, ey, ew, eh) for нүд: cv2.rectangle (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) хэвлэх "олсон" +str (len (нүүр)) +"нүүр (үүд)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()

Алхам 6: Өгөгдлийн багц үүсгэхийн тулд код хий

Өгөгдлийн багц үүсгэхийн тулд код хийх
Өгөгдлийн багц үүсгэхийн тулд код хийх
Өгөгдлийн багц үүсгэхийн тулд код хийх
Өгөгдлийн багц үүсгэхийн тулд код хийх

Бид нүүр таних ажлыг хийж байгаа тул танд нүүрний зураг хэрэгтэй болно! Та өөрийн өгөгдлийн санг үүсгэх эсвэл бэлэн байгаа мэдээллийн сангийн аль нэгээр нь эхлүүлэх боломжтой бөгөөд https://face-rec.org/databases/ танд хамгийн сүүлийн үеийн тоймыг өгдөг. Гурван сонирхолтой мэдээллийн баазыг (тайлбарын хэсгийг https://face-rec.org дээрээс иш татсан болно):

  • AT&T Facedatabase
  • Йелийн нүүрний мэдээллийн сан А.
  • Yale -ийн өргөтгөсөн мэдээллийн сан B

ЭНД би өөрийн өгөгдлийн санг ашиглаж байна.. Доор өгөгдсөн кодын тусламжтайгаар.

np гэж numpy импортлох

cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('хэрэглэгчийн id оруулах') sampleN = 0; while 1: ret, img = cap.read () gray = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) = дээж N+1; cv2.imwrite ("F:/Program Files/projects/face_rec/facesData/User."+str (id)+"."+str (sampleN)+".jpg", саарал [y: y+h, x: x+w]) cv2.drectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitTuş (100), img) cv2.waitKey (1), хэрэв sampleN> 20: cap.release () cv2.destroyAllWindows ()

Алхам 7: Танигчийг сургахын тулд код хий

Танигчийг сургахын тулд код хий
Танигчийг сургахын тулд код хий

Сургалтын багцыг бэлтгэх функцийг бий болгох

Одоо бид функцийг тодорхойлох болно

getImagesWithID (зам)

Энэ нь зургийн мэдээллийн сангийн үнэмлэхүй замыг оролтын аргумент болгон авч, 2 жагсаалтын багцыг буцааж өгдөг бөгөөд нэг нь илэрсэн царайг агуулсан, нөгөө нь тухайн нүүрэнд харгалзах шошгыг агуулдаг. Жишээлбэл, хэрэв нүүрний жагсаалт дахь ith индекс нь мэдээллийн бааз дахь 5 дахь хувь хүнийг төлөөлж байвал шошгоны жагсаалтын харгалзах ith байршил нь 5 -тай тэнцүү утгатай байна.

Одоо өгөгдлийн сангийн нүүрийг (6 -р алхамд үүсгэсэн) доорх кодын тусламжтайгаар.yml файл болгон хөрвүүлнэ үү.

импортлох os

PIL импорт cv2 -ээс np импортлох Зураг # Нүүр танихын тулд бид LBPH нүүр таних таних = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/projects/face_rec/facesData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) in f in os.listdir (path)] # хэвлэх image_path #getImagesWithID (path) царай = IDP = imagePath дахь imagePaths: # Зургийг уншаад саарал өнгийн царай болгон хөрвүүлэхImg = Image.open (imagePath).convert ('L') faceNP = np.array (facesImg, 'uint8') # Зургийн ID шошгыг авна уу = int (os.path.split (imagePath) [-1].split (".") [1]) # Зургийн нүүрийг илрүүлэх. (ID) cv2.imshow ("Сургахын тулд нүүр нэмж байна", faceNP) cv2.waitKey (10) np.array (ID) -ийг буцаана, Ids, нүүр = getImagesWithID (зам) танигч. ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

Энэ кодыг ашигласнаар бүх нүүрний өгөгдлийн санг нэг.yml файл болгон хөрвүүлэв ….. замын байршил нь ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

Алхам 8: Нүүр царай, үр дүнг таних код гарга

Guyzz бол энэ бол таны вэбкамерын тусламжтайгаар нүүр царайг таних кодыг бүтээх эцсийн алхам юм. ЭНЭ АЛХАМД Гүйцэтгэх гэж байгаа хоёр үйл ажиллагаа байна …. 1. камераас видео авах 2. үүнийг өөрийн.yml файлтай харьцуулах

npimport cv2 face_cascade = cv2 болгон numpy импортлох 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) нүүр = нүүрэн дэх (x, y, w, h) нүүр царай = face_cascade.detectMultiScale (саарал, 1.5, 5): cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (саарал [y: y+h, x: x+w]) хэрэв (id == 2): id == 1 бол id = "alok": id == 3 бол id = "alok": id == 4 бол id = "anjali": id = "Gaurav" бол id = = 5: id = 'rahul' хэрэв id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), фонт, 255) cv2.imshow ('img', img) cv2.waitKey (1) == ord ('q'): cap cap.release ()

cv2.destroyAllWindows ()

Эцэст нь үр дүн таны нүдэн дээр гарч ирэх болно ……. та мөн доорх линкээс зип файлыг татаж авах боломжтой: Кодыг татаж авахын тулд энд дарна уу. Тиймээс энэхүү зааварчилгаанд бид OpenCV ашиглан царай таних+таних үүргийг гүйцэтгэсэн болно. Ийм сургамжтай юм шиг ….. plzzz намайг бүртгүүлээд надад саналаа өгөөрэй ….. баярлалаа найзуудаа:)

Зөвлөмж болгож буй: