สารบัญ:
- ขั้นตอนที่ 1: ติดตั้ง Anaconda
- ขั้นตอนที่ 2: ดาวน์โหลด Open CV Package
- ขั้นตอนที่ 3: ตั้งค่าตัวแปรสิ่งแวดล้อม
- ขั้นตอนที่ 4: ทดสอบเพื่อยืนยัน
- ขั้นตอนที่ 5: สร้างรหัสสำหรับการตรวจจับใบหน้า
- ขั้นตอนที่ 6: สร้างรหัสเพื่อสร้างชุดข้อมูล
- ขั้นตอนที่ 7: สร้างรหัสเพื่อฝึกผู้จดจำ
- ขั้นตอนที่ 8: สร้างรหัสเพื่อจดจำใบหน้าและผลลัพธ์
วีดีโอ: การตรวจจับใบหน้า+การจดจำใบหน้า: 8 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
นี่เป็นตัวอย่างง่ายๆ ของการตรวจจับใบหน้าและการจดจำใบหน้าด้วย OpenCV จากกล้อง หมายเหตุ: ฉันทำโปรเจ็กต์นี้เพื่อประกวดเซ็นเซอร์ และฉันใช้กล้องเป็นเซ็นเซอร์เพื่อติดตามและจดจำใบหน้า ดังนั้นเป้าหมายของเราในเซสชั่นนี้ 1. ติดตั้งอนาคอนดา 2. ดาวน์โหลด Open CV Package 3. ตั้งค่าตัวแปรสิ่งแวดล้อม 4. ทดสอบเพื่อยืนยัน 5. ทำรหัสสำหรับการตรวจจับใบหน้า 6. สร้างรหัสเพื่อสร้างชุดข้อมูล 7. สร้างรหัสเพื่อฝึกการจดจำใบหน้า 8. สร้างรหัสเพื่อจดจำใบหน้า &ผลลัพธ์.
ขั้นตอนที่ 1: ติดตั้ง Anaconda
โดยพื้นฐานแล้ว Anaconda เป็น Python IDE ที่บรรจุอย่างสวยงามซึ่งมาพร้อมกับแพ็คเกจที่มีประโยชน์มากมาย เช่น NumPy, Pandas, IPython Notebook เป็นต้น ดูเหมือนว่าจะแนะนำทุกที่ในชุมชนวิทยาศาสตร์ ลองใช้ Anaconda เพื่อทำการติดตั้ง
ขั้นตอนที่ 2: ดาวน์โหลด Open CV Package
ขั้นแรก ไปที่เว็บไซต์ 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
หลังจากทำตามขั้นตอนนี้แล้ว เราจะสามารถใช้ import cv2 ในโค้ด Python ได้ แต่เรายังต้องทำงานอีกเล็กน้อยเพื่อให้ FFMPEG (ตัวแปลงสัญญาณวิดีโอ) ทำงานได้ (เพื่อให้เราทำสิ่งต่างๆ เช่น ประมวลผลวิดีโอได้)
คลิกขวาที่ "คอมพิวเตอร์ของฉัน" (หรือ "พีซีเครื่องนี้" บน Windows 8.1) -> คลิกซ้ายที่คุณสมบัติ -> คลิกซ้ายที่แท็บ "ขั้นสูง" -> คลิกซ้ายที่ปุ่ม "ตัวแปรสภาพแวดล้อม…" เพิ่มตัวแปรผู้ใช้ใหม่ เพื่อชี้ไปที่ OpenCV (ทั้ง x86 สำหรับระบบ 32 บิตหรือ x64 สำหรับระบบ 64 บิต) ขณะนี้ฉันใช้เครื่อง 64 บิต
OPENCV_DIRC 32 บิต:\opencv\build\x86\vc12
64-บิตOPENCV_DIRC:\opencv\build\x64\vc12
ผนวก %OPENCV_DIR%\bin ต่อท้ายตัวแปรผู้ใช้ PATH
ตัวอย่างเช่น ตัวแปรผู้ใช้ PATH ของฉันมีลักษณะดังนี้…
ก่อน:
F:\Users\Johnny\Anaconda;C:\Users\Johnny\Anaconda\Scripts
หลังจาก:
F:\Users\Johnny\Anaconda;C:\Users\Johnny\Anaconda\Scripts;%OPENCV_DIR%\bin
แค่นี้เราก็เสร็จแล้ว! FFMPEG พร้อมใช้งานแล้ว!
ขั้นตอนที่ 4: ทดสอบเพื่อยืนยัน
เราต้องทดสอบว่าเราสามารถทำได้ใน Anaconda หรือไม่ (ผ่าน Spyder IDE):
- นำเข้าแพ็คเกจ OpenCV
- ใช้ยูทิลิตี้ FFMPEG (เพื่ออ่าน/เขียน/ประมวลผลวิดีโอ)
การทดสอบที่ 1: เราสามารถนำเข้า OpenCV ได้หรือไม่
เพื่อยืนยันว่าขณะนี้ Anaconda สามารถนำเข้าแพ็คเกจ OpenCV-Python (คือ cv2)
ออกสิ่งเหล่านี้ในคอนโซล IPython:
นำเข้า cv2
พิมพ์ cv2._version_
หากนำเข้าแพ็คเกจ cv2 ได้โดยไม่มีข้อผิดพลาด และเวอร์ชัน cv2 ถูกพิมพ์ออกมา แสดงว่าเราทุกคนทำได้ดี!
การทดสอบ 2: เราสามารถใช้ตัวแปลงสัญญาณ FFMPEG ได้หรือไม่
วางตัวอย่าง
input_video.mp4
ไฟล์วิดีโอในไดเร็กทอรี เราต้องการทดสอบว่าเราสามารถ:
- อ่านไฟล์วิดีโอ.mp4 นี้และ
- เขียนไฟล์วิดีโอใหม่ (อาจเป็น.avi หรือ.mp4 เป็นต้น)
ในการดำเนินการนี้ เราจำเป็นต้องมีโค้ด python ทดสอบ เรียกว่า test.py วางไว้ในไดเร็กทอรีเดียวกันกับตัวอย่าง
input_video.mp4
ไฟล์.
นี่คืออะไร
test.py
อาจดูเหมือน (หมายเหตุ: ขอบคุณมากสำหรับคำแนะนำของ Pete และ Warren ในช่องความคิดเห็น - ฉันได้แทนที่รหัสทดสอบดั้งเดิมของฉันด้วยรหัสของเขาแล้ว - โปรดทดสอบด้วยตัวเองและแจ้งให้เราทราบหากวิธีนี้ใช้ได้ผลดีกว่า):
นำเข้า 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)) print out.isOpened() # True = เขียนวิดีโอสำเร็จ เท็จ - ไม่สามารถเขียนวิดีโอได้ cap.release() out.release() ออก
การทดสอบนี้สำคัญมาก หากคุณต้องการประมวลผลไฟล์วิดีโอ คุณต้องแน่ใจว่า Anaconda / Spyder IDE สามารถใช้ FFMPEG (ตัวแปลงสัญญาณวิดีโอ) ฉันต้องใช้เวลาหลายวันกว่าจะใช้งานได้ แต่ฉันหวังว่ามันจะทำให้คุณใช้เวลาน้อยลงมาก!:)หมายเหตุ: อีกหนึ่งเคล็ดลับที่สำคัญมากเมื่อใช้ Anaconda Spyder IDE ตรวจสอบให้แน่ใจว่าคุณได้ตรวจสอบไดเรกทอรีการทำงานปัจจุบัน (CWD) !!!
ขั้นตอนที่ 5: สร้างรหัสสำหรับการตรวจจับใบหน้า
เป้าหมาย
ในเซสชั่นนี้
- เราจะเห็นพื้นฐานของการตรวจจับใบหน้าโดยใช้ตัวแยกประเภท Cascade ที่ใช้ฟีเจอร์ของ Haar
- เราจะขยายเช่นเดียวกันสำหรับการตรวจจับดวงตา ฯลฯ
การตรวจจับ Haar-cascade ใน OpenCV
ที่นี่เราจะจัดการกับการตรวจจับ OpenCV มีตัวแยกประเภทที่ได้รับการฝึกมาล่วงหน้าจำนวนมากสำหรับใบหน้า ดวงตา รอยยิ้ม ฯลฯ ไฟล์ XML เหล่านั้นจะถูกจัดเก็บไว้ในโฟลเดอร์ opencv/data/haarcascades/ มาสร้างเครื่องตรวจจับใบหน้าและดวงตาด้วย OpenCV กันก่อนอื่น เราต้องโหลดตัวแยกประเภท XML ที่จำเป็น จากนั้นโหลดภาพอินพุตของเรา (หรือวิดีโอ) ในโหมดโทนสีเทา OR เราสามารถใช้กล้อง (สำหรับการตรวจจับใบหน้าแบบเรียลไทม์)
นำเข้า numpy เป็น 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/haarcascades/haar.xml') cap = cv2. VideoCapture(0) while 1: ret, img = cap.read() grey = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.5, 5) สำหรับ (x, y, w, h) ในหน้า: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = grey[y:y +h, x:x+w] roi_color = img[y:y+h, x:x+w] eyes = eye_cascade.detectMultiScale(roi_gray) สำหรับ (เช่น ey ew eh) ในสายตา: cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2) พิมพ์ "found " +str(len(faces)) +" face(s)" cv2.imshow ('img', img) k = cv2.waitKey(30) & 0xff if k == 27: break cap.release() cv2.destroyAllWindows()
ขั้นตอนที่ 6: สร้างรหัสเพื่อสร้างชุดข้อมูล
เรากำลังดำเนินการจดจำใบหน้า คุณจึงจำเป็นต้องมีรูปภาพใบหน้า! คุณสามารถสร้างชุดข้อมูลของคุณเองหรือเริ่มต้นด้วยฐานข้อมูลใบหน้าที่มีอยู่ https://face-rec.org/databases/ จะให้ภาพรวมที่เป็นปัจจุบันแก่คุณ ฐานข้อมูลที่น่าสนใจสามแห่งคือ (ส่วนหนึ่งของคำอธิบายอ้างอิงจาก
- AT&T Facedatabase
- Yale Facedatabase A
- ฐานข้อมูล Facedatabase ของ Yale แบบขยาย B
ที่นี่ ฉันใช้ชุดข้อมูลของตัวเอง….ด้วยความช่วยเหลือของรหัสที่ให้ไว้ด้านล่าง:
นำเข้า numpy เป็น np
นำเข้า cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) id = raw_input('ป้อนรหัสผู้ใช้') sampleN=0; ในขณะที่ 1: ret, img = cap.read() grey = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) สำหรับ (x, y, w, h) ในใบหน้า: sampleN =ตัวอย่างN+1; cv2.imwrite("F:/Program Files/projects/face_rec/facesData/User"+str(id)+ "." +str(sampleN)+ ".jpg", สีเทา[y:y+h, x: x+w]) cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey(100) cv2.imshow('img', img) cv2.waitKey(1) ถ้า sampleN > 20: break cap.release() cv2.destroyAllWindows()
ขั้นตอนที่ 7: สร้างรหัสเพื่อฝึกผู้จดจำ
สร้างฟังก์ชั่นเตรียมชุดฝึก
ตอนนี้เราจะกำหนดฟังก์ชั่น
getImagesWithID (เส้นทาง)
ที่นำพา ธ สัมบูรณ์ไปยังฐานข้อมูลภาพเป็นอาร์กิวเมนต์อินพุตและส่งคืน tuple ของ 2 รายการ อันหนึ่งมีใบหน้าที่ตรวจพบ และอีกอันมีป้ายกำกับที่สอดคล้องกันสำหรับใบหน้านั้น ตัวอย่างเช่น หากดัชนี ith ในรายการใบหน้าแสดงถึงบุคคลที่ 5 ในฐานข้อมูล ตำแหน่ง ith ที่สอดคล้องกันในรายการป้ายกำกับจะมีค่าเท่ากับ 5
ตอนนี้แปลงหน้าชุดข้อมูล (ซึ่งสร้างในขั้นตอนที่ 6) เป็นไฟล์.yml ด้วยความช่วยเหลือของโค้ดที่ให้ไว้ด้านล่าง:
นำเข้าระบบปฏิบัติการ
นำเข้า numpy เป็น np นำเข้า cv2 จากการนำเข้า PIL Image # สำหรับการจดจำใบหน้า เราจะรู้จัก LBPH Face Recognizer = cv2.createLBPHFaceRecognizer(); path="F:/Program Files/projects/face_rec/facesData" def getImagesWithID(path): imagePaths = [os.path.join(path, f) for f in os.listdir(path)] # print image_path #getImagesWithID() เส้นทาง) ใบหน้า = IDs = สำหรับ imagePath ใน imagePaths: # อ่านรูปภาพและแปลงเป็นระดับสีเทา facesImg = Image.open(imagePath).convert('L') faceNP = np.array(facesImg, 'uint8') # รับป้ายกำกับของภาพ ID= int(os.path.split(imagePath)[-1].split(".")[1]) # ตรวจจับใบหน้าในภาพ faces.append(faceNP) IDs.append (ID) cv2.imshow("การเพิ่มใบหน้าสำหรับการฝึก", faceNP) cv2.waitKey(10) ส่งคืน np.array (IDs), รหัสใบหน้า, ใบหน้า = getImagesWithID(เส้นทาง) recognitionr.train (ใบหน้า, Ids) recognitionr.save ("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 ของคุณ
นำเข้า numpy เป็น 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() grey = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.5, 5) สำหรับ (x, y, w, h) ในใบหน้า: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf=rec.predict(gray[y:y+h, x:x+w]) if(id==2): id="alok" if id==1: id="alok" if id==3: id="anjali" if id==4: id="Gaurav" if 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'): break cap.release()
cv2.destroyAllWindows()
และในที่สุดผลลัพธ์ก็จะปรากฏต่อหน้าคุณ……คุณสามารถดาวน์โหลดไฟล์ zip จากลิงค์ด้านล่าง: คลิกที่นี่เพื่อดาวน์โหลดรหัสดังนั้นในคำแนะนำนี้เราได้ดำเนินการตรวจจับใบหน้า + การจดจำโดยใช้ OpenCV….. ถ้าคุณ ชอบคำแนะนำนี้….. ได้โปรดสมัครสมาชิกฉันและโหวตให้ฉัน…..ขอบคุณเพื่อน ๆ:)
แนะนำ:
DIY 37 Leds เกมรูเล็ต Arduino: 3 ขั้นตอน (พร้อมรูปภาพ)
DIY 37 Leds เกมรูเล็ต Arduino: รูเล็ตเป็นเกมคาสิโนที่ตั้งชื่อตามคำภาษาฝรั่งเศสหมายถึงวงล้อเล็ก
หมวกนิรภัย Covid ส่วนที่ 1: บทนำสู่ Tinkercad Circuits!: 20 ขั้นตอน (พร้อมรูปภาพ)
Covid Safety Helmet ตอนที่ 1: บทนำสู่ Tinkercad Circuits!: สวัสดีเพื่อน ๆ ในชุดสองตอนนี้ เราจะเรียนรู้วิธีใช้วงจรของ Tinkercad - เครื่องมือที่สนุก ทรงพลัง และให้ความรู้สำหรับการเรียนรู้เกี่ยวกับวิธีการทำงานของวงจร! หนึ่งในวิธีที่ดีที่สุดในการเรียนรู้คือการทำ ดังนั้น อันดับแรก เราจะออกแบบโครงการของเราเอง: th
BOSEBerry Pi Internet Radio: 4 ขั้นตอน (พร้อมรูปภาพ)
BOSEBerry Pi Internet Radio: ฉันชอบฟังวิทยุ! ฉันใช้วิทยุ DAB ในบ้าน แต่พบว่าการรับสัญญาณค่อนข้างหยาบและเสียงขาดหาย ดังนั้นฉันจึงตัดสินใจสร้างวิทยุอินเทอร์เน็ตของตัวเอง ฉันมีสัญญาณ wifi แรงรอบบ้านและพี่ชายดิจิทัล
การจดจำใบหน้า Smart Lock ด้วย LTE Pi HAT: 4 ขั้นตอน
การจดจำใบหน้า Smart Lock ด้วย LTE Pi HAT: การจดจำใบหน้ามีการใช้กันอย่างแพร่หลายมากขึ้นเรื่อย ๆ เราสามารถใช้เพื่อสร้างล็อคอัจฉริยะ
การจดจำใบหน้า Opencv: 4 ขั้นตอน
Opencv Face Recognition: การจดจำใบหน้าเป็นเรื่องธรรมดาในทุกวันนี้ ในแอปพลิเคชั่นมากมาย เช่น สมาร์ทโฟน อุปกรณ์อิเล็กทรอนิกส์มากมาย เทคโนโลยีประเภทนี้เกี่ยวข้องกับอัลกอริธึมและเครื่องมือมากมาย ฯลฯ ซึ่งใช้แพลตฟอร์ม SOC แบบฝังตัว เช่น Raspberry