สารบัญ:

เครื่องติดตามใบหน้า! Python & Arduino: 5 ขั้นตอน
เครื่องติดตามใบหน้า! Python & Arduino: 5 ขั้นตอน

วีดีโอ: เครื่องติดตามใบหน้า! Python & Arduino: 5 ขั้นตอน

วีดีโอ: เครื่องติดตามใบหน้า! Python & Arduino: 5 ขั้นตอน
วีดีโอ: EP.18 What’s New - เขียนโปรแกรมตรวจจับใบหน้าด้วย OpenCV !! 2024, พฤศจิกายน
Anonim
Image
Image
เครื่องติดตามใบหน้า! Python & Arduino
เครื่องติดตามใบหน้า! Python & Arduino
เครื่องติดตามใบหน้า! Python & Arduino
เครื่องติดตามใบหน้า! Python & Arduino

โดย Techovator0819ช่อง Youtube ของฉันติดตามเพิ่มเติมโดยผู้เขียน:

IoT: Weather Box (พร้อมนาฬิกาปลุกและตัวจับเวลาแบบกำหนดเอง)
IoT: Weather Box (พร้อมนาฬิกาปลุกและตัวจับเวลาแบบกำหนดเอง)
IoT: Weather Box (พร้อมนาฬิกาปลุกและตัวจับเวลาแบบกำหนดเอง)
IoT: Weather Box (พร้อมนาฬิกาปลุกและตัวจับเวลาแบบกำหนดเอง)
หุ่นยนต์อัตโนมัติอเนกประสงค์: 'สินทรัพย์'
หุ่นยนต์อัตโนมัติอเนกประสงค์: 'สินทรัพย์'
หุ่นยนต์อัตโนมัติอเนกประสงค์: 'สินทรัพย์'
หุ่นยนต์อัตโนมัติอเนกประสงค์: 'สินทรัพย์'

About ฉันชอบทำอะไรใหม่ๆ เช่นเดียวกับเรื่องที่เกี่ยวข้องกับไมโครคอนโทรลเลอร์ วิศวกรรมเครื่องกล ปัญญาประดิษฐ์ วิทยาการคอมพิวเตอร์ และอะไรก็ตามที่ฉันสนใจ และที่นี่คุณจะพบกับ… More About Techovator0819 »

สวัสดีทุกคนที่อ่านคำแนะนำนี้ นี่คืออุปกรณ์ติดตามใบหน้าที่ทำงานบนไลบรารีหลามที่เรียกว่า OpenCV CV ย่อมาจาก 'Computer Vision' จากนั้นฉันก็ตั้งค่าอินเทอร์เฟซแบบอนุกรมระหว่างพีซีและ Arduino UNO ของฉัน นั่นหมายความว่าสิ่งนี้ใช้ไม่ได้กับ Python เท่านั้น

อุปกรณ์นี้จดจำใบหน้าของคุณในเฟรม จากนั้นจะส่งคำสั่งบางอย่างไปยัง Arduino เพื่อจัดตำแหน่งกล้องให้อยู่ในเฟรม! ฟังดูดีนะ? ลองกระโดดลงไปแล้ว

เสบียง

1. Arduino UNO

2. 2 x เซอร์โวมอเตอร์ (เซอร์โวมอเตอร์ตัวไหนก็ได้ แต่ฉันใช้ Tower Pro SG90)

3. การติดตั้ง Python

4. การติดตั้ง OpenCV

5. กล้องเว็บ

ขั้นตอนที่ 1: การติดตั้ง Python และ OpenCV

การติดตั้ง Python ค่อนข้างตรงไปตรงมา!

www.python.org/downloads/

คุณสามารถไปตามลิงก์ด้านบนเพื่อดาวน์โหลดเวอร์ชันหลาม (Mac, windows หรือ Linux) ที่เหมาะสมกับคุณที่สุด (64 บิตหรือ 32 บิต) ขั้นตอนการติดตั้งที่เหลือนั้นเรียบง่าย และอินเทอร์เฟซจะแนะนำคุณ

เมื่อคุณติดตั้งเสร็จแล้ว ให้เปิดพรอมต์คำสั่งและพิมพ์ข้อความต่อไปนี้:

pip ติดตั้ง opencv-python

ที่ควรติดตั้งไลบรารี openCV ในกรณีที่เกิดปัญหา คุณสามารถตรวจสอบหน้านี้

หลังจากตั้งค่า Environment และข้อกำหนดเบื้องต้นทั้งหมดแล้ว มาดูกันว่าเราจะสร้างสิ่งนี้ได้อย่างไร!

ขั้นตอนที่ 2: คุณลักษณะคล้าย Haar คืออะไร

คุณสมบัติคล้าย Haar คือคุณสมบัติของภาพดิจิทัล ชื่อนี้มาจากเวฟเล็ต Haar เหล่านี้เป็นตระกูลของคลื่นรูปสี่เหลี่ยมจัตุรัสซึ่งใช้ระบุคุณสมบัติในภาพดิจิทัล น้ำตก Haar นั้นโดยทั่วไปแล้วเป็นตัวแยกประเภทซึ่งช่วยให้เราตรวจจับวัตถุ (ในกรณีของเราใบหน้า) โดยใช้คุณสมบัติคล้าย Haar

ในกรณีของเรา เพื่อความเรียบง่าย เราจะใช้ Haar Cascades ที่ผ่านการฝึกอบรมมาล่วงหน้าเพื่อระบุใบหน้า คุณสามารถไปตามลิงก์นี้ของหน้า GitHub และดาวน์โหลดไฟล์ xml สำหรับ Haar Cascade

1. คลิกที่ 'haarcascade_frontalface_alt.xml'

2. คลิกที่ปุ่ม 'ดิบ' ที่ส่วนบนขวาของหน้าต่างรหัส

3. จะนำคุณไปยังหน้าอื่นที่มีเฉพาะข้อความเท่านั้น

4. คลิกขวาแล้วกด 'บันทึกเป็น..'

5. บันทึกไว้ในไดเร็กทอรีหรือโฟลเดอร์เดียวกันกับโค้ดหลามที่คุณกำลังจะเขียน

ขั้นตอนที่ 3: การเข้ารหัสใน Python

นำเข้า cv2

นำเข้า numpy เป็น np นำเข้าเวลานำเข้าแบบอนุกรม

เรานำเข้าไลบรารีทั้งหมดที่เราต้องการ

ard = serial. Serial("COM3", 9600)

เราสร้างวัตถุอนุกรมที่เรียกว่า 'ard' นอกจากนี้เรายังระบุชื่อพอร์ตและ BaudRate เป็นพารามิเตอร์

face_cascade = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml')

เราสร้างวัตถุอื่นสำหรับ Haar Cascade ของเรา ตรวจสอบให้แน่ใจว่าไฟล์ HaarCascade ยังคงอยู่ในโฟลเดอร์เดียวกับโปรแกรมหลามนี้

vid = cv2. VideoCapture(0)

เราสร้างวัตถุเพื่อจับภาพวิดีโอจากเว็บแคม 0 เนื่องจากพารามิเตอร์หมายถึงเว็บแคมตัวแรกที่เชื่อมต่อกับพีซีของฉัน

docs.opencv.org/2.4/modules/objdetect/doc/cascade_classification.html

ในขณะที่จริง:

_, frame = vid.read()#reads เฟรมปัจจุบันไปยังตัวแปร frame grey = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY)#converts frame -> ภาพระดับสีเทา #บรรทัดต่อไปนี้ตรวจจับใบหน้า #พารามิเตอร์แรกคือรูปภาพที่คุณต้องการตรวจจับใน #minSize=() ระบุขนาดต่ำสุดของใบหน้าในรูปของพิกเซล #คลิกลิงก์ด้านบนเพื่อทราบข้อมูลเพิ่มเติมเกี่ยวกับใบหน้าการจำแนก Cascade = face_cascade.detectMultiScale(สีเทา, minSize =(80, 80), minNeighbors=3) #A สำหรับการวนซ้ำเพื่อตรวจจับใบหน้า สำหรับ (x, y, w, h) ในหน้า: cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)#draws a Rectangle around ใบหน้า Xpos = x+(w/2)#คำนวณพิกัด X ของจุดศูนย์กลางของใบหน้า Ypos = y+(h/2)#คำนวณพิกัด Y ของกึ่งกลางใบหน้าถ้า Xpos > 280: #โค้ดต่อไปนี้จะตรวจสอบว่าใบหน้าเป็น ard.write('L'.encode()) #on ซ้าย ขวา บนหรือล่าง เทียบกับ time.sleep(0.01) #center ของเฟรม elif Xpos 280: ard.write('D'.encode()) time.sleep(0.01) elif Ypos < 200: ard.write('U'.encode()) time.sleep(0.01) อื่น: ard.write ('S'.encode()) time.sleep(0.01) แตก cv2.imshow('frame', frame)#แสดงเฟรมในหน้าต่างแยก k = cv2.waitKey(1)&0xFF if(k == ord('q')): #if 'q' ถูกกดบนคีย์บอร์ด มันจะออกจากลูป while หยุดพัก

cv2.destroyAllWindows() #ปิดหน้าต่างทั้งหมด

ard.close() #ปิดการสื่อสารแบบอนุกรม

vid.release() #หยุดรับวิดีโอจากเว็บแคม

ขั้นตอนที่ 4: การเขียนโปรแกรม Arduino

ปรับเปลี่ยนโปรแกรมตามการตั้งค่าฮาร์ดแวร์ของคุณได้ตามต้องการ

#รวม

เซอร์โวเซอร์โวเอ็กซ์;

เซอร์โวเซอร์โวY;

int x = 90;

int y = 90;

การตั้งค่าเป็นโมฆะ () {

// ใส่รหัสการตั้งค่าของคุณที่นี่ เพื่อเรียกใช้ครั้งเดียว: Serial.begin(9600); servoX.attach(9); servoY.attach(10); servoX.write(x); servoY.write (y); ล่าช้า (1000); }

ใส่ถ่าน = ""; //อินพุตแบบอนุกรมถูกเก็บไว้ในตัวแปรนี้

วงเป็นโมฆะ () {

// ใส่รหัสหลักของคุณที่นี่ เพื่อเรียกใช้ซ้ำ: if(Serial.available()){ //ตรวจสอบว่าข้อมูลใดอยู่ในอินพุตบัฟเฟอร์อนุกรม = Serial.read(); // อ่านข้อมูลลงในตัวแปร if(input == 'U'){ servoY.write(y+1); //ปรับมุมเซอร์โวตามอินพุต y += 1; //อัปเดตค่าของมุม } else if(input == 'D'){ servoY.write(y-1); y -= 1; } อื่น ๆ { servoY.write (y); } ถ้า (อินพุต == 'L') { servoX.write (x-1); x -= 1; } อื่น ๆ if(input == 'R'){ servoX.write(x+1); x += 1; } อื่น ๆ { servoX.write (x); } อินพุต = ""; // ล้างตัวแปร } // กระบวนการทำซ้ำอย่างต่อเนื่อง !!:) }

ขั้นตอนที่ 5: บทสรุป

นี่เป็นวิธีที่ดีและเป็นแบบโต้ตอบซึ่งคุณสามารถออกแบบให้รวม Computer Vision ไว้ในโครงการ Arduino ของคุณ Computer Vision ค่อนข้างสนุก และฉันหวังว่าพวกคุณจะชอบมันจริงๆ ถ้าใช่แจ้งให้เราทราบในความคิดเห็น และโปรดสมัครรับข้อมูลจากช่อง youtube ของฉัน ขอบคุณล่วงหน้า <3 <3

youtube.com/channel/UCNOSfI_iQ7Eb7-s8CrExGfw/videos

แนะนำ: