สารบัญ:
- ขั้นตอนที่ 1: สิ่งที่คุณต้องการ:
- ขั้นตอนที่ 2: การตั้งค่าสภาพแวดล้อม Python:
- ขั้นตอนที่ 3: สคริปต์ Python:
- ขั้นตอนที่ 4: รหัส Arduino:
- ขั้นตอนที่ 5: กลไกแพนเอียง:-
- ขั้นตอนที่ 6: การสร้างการเชื่อมต่อ:
- ขั้นตอนที่ 7: การทดสอบ:
วีดีโอ: การติดตามใบหน้าโดยใช้ ARDUINO !!!: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
ในคำแนะนำก่อนหน้านี้ฉันได้แบ่งปันวิธีที่คุณสามารถสื่อสารระหว่าง Arduino และ Python โดยใช้โมดูล 'pyserial' และควบคุม LED หากคุณยังไม่ได้ดู ลองดูที่นี่: COMMUNICATION BETWEEN ARDUINO & PYTHON !
และวิธีที่คุณสามารถตรวจจับสีของวัตถุและติดตามบนหน้าจอได้ ลองดูที่นี่: การตรวจจับสีโดยใช้ OPENCV และ PYTHON
ในคำแนะนำนี้ ฉันจะแสดงวิธีติดตามใบหน้าโดยใช้ Arduino & Python และทำให้กล้องติดตามใบหน้า อาจฟังดูยาก แต่เชื่อฉันเถอะ สิ่งที่คุณต้องมีคือความรู้พื้นฐานเกี่ยวกับ Arduino และ Python
มาเริ่มกันเลย…
ขั้นตอนที่ 1: สิ่งที่คุณต้องการ:
ข้อกำหนดขั้นต่ำ ที่นี่ฉันได้จัดทำรายการส่วนหนึ่งของทุกสิ่งที่คุณต้องการ:
ข้อกำหนดด้านฮาร์ดแวร์:
- Arduino UNO (Amazon US / Amazon EU)
- เว็บแคม (Amazon US / Amazon EU)
- เซอร์โว x 2 (Amazon US / Amazon EU)
- เขียงหั่นขนม (Amazon US / Amazon EU)
- ชุด Servo Pan Tilt (Amazon US / Amazon EU)
ความต้องการของซอฟต์แวร์:
- Python 2.7 (ควรติดตั้ง โดยปกติแล้ว Linux OS จะติดตั้งไว้ล่วงหน้า)
- OpenCV (คุณสามารถดาวน์โหลดแยกต่างหากหรือติดตั้งโดยใช้ 'pip install' อธิบายเพิ่มเติม)
- pyserial (สามารถติดตั้งได้ด้วย pip)
- งี่เง่า
- ฮาอาร์คาสเคด
หลังจากรวบรวมทุกสิ่งแล้ว เราสามารถไปยังขั้นตอนการติดตั้ง…
ขั้นตอนที่ 2: การตั้งค่าสภาพแวดล้อม Python:
การติดตั้งไพทอน:
ก่อนอื่นเราต้องมี Python 2.7 และรันอยู่ก่อน หากต้องการทำสิ่งนี้ให้ดาวน์โหลดและติดตั้ง python 2.7.14 ก่อน ตรวจสอบว่าติดตั้งถูกต้องหรือไม่ ไปที่: Windows Search >> พิมพ์ "IDLE" >> กด Enter Python Shell ควรปรากฏขึ้น
หรือ
ในการค้นหาให้พิมพ์ 'CMD' แล้วกด Enter เพื่อเปิด Command Prompt ในประเภท CMD >> python และกด Enter ส่วนต่อประสาน Python ควรแสดงไฟล์.
หากคุณเห็นข้อผิดพลาดใน CMD อย่าตกใจ คุณอาจต้องตั้งค่าตัวแปรสภาพแวดล้อม คุณสามารถทำตามบทช่วยสอนนี้ได้ที่นี่เพื่อตั้งค่าตัวแปรสภาพแวดล้อม
การติดตั้ง 'pyserial', 'OpenCV" และ "numpy" ใน python:
ในการติดตั้งโมดูลเหล่านี้ เราจะใช้ pip install
ขั้นแรกให้เปิด CMD แล้วพิมพ์รหัสต่อไปนี้:-
pip ติดตั้งซีเรียล
pip ติดตั้ง opencv-python >pip ติดตั้ง numpy
คำสั่งเหล่านี้จะติดตั้งโมดูลที่จำเป็น ตอนนี้เราสามารถย้ายไปที่ส่วนการเข้ารหัส…
ขั้นตอนที่ 3: สคริปต์ Python:
ก่อนเริ่มเขียนโค้ด สิ่งแรกที่ต้องทำคือสร้างโฟลเดอร์ใหม่ เนื่องจากโค้ดทั้งหมดต้องเก็บไว้ในโฟลเดอร์เดียวกัน ดังนั้นให้สร้างโฟลเดอร์ใหม่ ตั้งชื่ออะไรก็ได้ที่คุณต้องการ และดาวน์โหลด 'Haarcascade' จากด้านล่างแล้ววางลงในโฟลเดอร์
ตอนนี้เปิดแผ่นจดบันทึกและเขียนสคริปต์ด้านล่าง บันทึกเป็น 'face.py' ในโฟลเดอร์เดียวกับ haarcascade (คุณสามารถดาวน์โหลดรหัสที่ฉันให้ไว้ในไฟล์ด้านล่าง):
#import โมดูลที่จำเป็นทั้งหมด
นำเข้า numpy เป็น np นำเข้าเวลานำเข้าอนุกรม นำเข้า sys นำเข้า cv2 #Setup เส้นทางการสื่อสารสำหรับ Arduino (แทนที่ 'COM5' ให้ใส่พอร์ตที่ Arduino ของคุณเชื่อมต่ออยู่) arduino = serial. Serial ('COM5', 9600) time.sleep (2) print("เชื่อมต่อกับ arduino…") #importing the Haarcascade for face detection face_cascade = cv2. CascadeClassifier('haarcascade_frontalface_default.xml') #ในการจับภาพสตรีมวิดีโอจากเว็บแคม cap = cv2. VideoCapture(0) #Read the capture, แปลงเป็นภาพสีเทาและค้นหาใบหน้าในขณะที่ 1: ret, img = cap.read() cv2.resizeWindow('img', 500, 500) cv2.line(img, (500, 250), (0, 250), (0, 255, 0), 1) cv2.line(img, (250, 0), (250, 500), (0, 255, 0), 1) cv2.circle(img, (250, 250), 5, (255, 255, 255), -1) gray = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3) # ตรวจจับใบหน้าและสร้างสี่เหลี่ยมรอบๆ สำหรับ (x, y, w, h) ในหน้า: cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 5) roi_gray = grey[y:y+h, x:x+w] roi_color = img[y:y+h, x:x+w] arr = {y:y+h, x:x+w} พิมพ์ (arr) พิมพ์ ('X:' +str(x)) พิมพ์ ('Y:'+str(y)) พิมพ์ ('x+w:' +str(x+w)) พิมพ์ ('y+h:' +str(y+h))) # ศูนย์กลางของ roi (สี่เหลี่ยมผืนผ้า) xx = int(x+(x+h))/2 yy = int(y+(y+w))/2 พิมพ์ (xx) พิมพ์ (yy) center = (xx, yy) # กำลังส่งข้อมูลไปยังการพิมพ์ Arduino ("ศูนย์กลางของสี่เหลี่ยมผืนผ้าคือ:", ศูนย์) data = "X{0:d}Y{1:d}Z".format(xx, yy) พิมพ์ ("output = '" +data+ "'") arduino.write (ข้อมูล) #แสดงสตรีม cv2.imshow('img', img) #กด 'Esc' เพื่อยุติการดำเนินการ k = cv2.waitKey(30) & 0xff ถ้า k == 27: แตก
เมื่อเสร็จแล้ว ให้ไปเขียนโค้ดสำหรับ Arduino…
ขั้นตอนที่ 4: รหัส Arduino:
หลังจากที่สคริปต์ python พร้อมแล้ว เราจำเป็นต้องมี Arduino Sketch เพื่อควบคุมเซอร์โว อ้างอิงโค้ดด้านล่าง วางลงใน Arduino IDE และบันทึกเป็น 'servo.ino' ในโฟลเดอร์เดียวกับ face.py และ haarcascade อัปโหลดรหัสและไปยังขั้นตอนถัดไปเพื่อสร้างการเชื่อมต่อ
(ไฟล์ดาวน์โหลดด้านล่าง)
#รวม
เซอร์โวเซอร์โวเวอร์; // เซอร์โวเซอร์โวแนวตั้ง เซอร์โวเซอร์โวHor; // เซอร์โวแนวนอน int x; int y; int ก่อนหน้า X; int ก่อนหน้า; การตั้งค่าเป็นโมฆะ () { Serial.begin (9600); servoVer.attach(5); //แนบเซอร์โวแนวตั้งกับขา 5 servoHor.attach(6); //แนบเซอร์โวแนวนอนกับขา 6 servoVer.write (90); servoHor.write(90); } เป็นโมฆะ Pos() { if(prevX != x || prevY != y) { int servoX = map (x, 600, 0, 70, 179); int servoY = แผนที่ (y, 450, 0, 179, 95); servoX = นาที (servoX, 179); servoX = สูงสุด (servoX, 70); servoY = นาที (เซอร์โว Y, 179); servoY = สูงสุด (เซอร์โว Y, 95); servoHor.write(เซอร์โวX); servoVer.write(เซอร์โวY); } } โมฆะลูป () { if (Serial.available () > 0) { if (Serial.read () == 'X') { x = Serial.parseInt (); ถ้า (Serial.read () == 'Y') { y = Serial.parseInt (); ตำแหน่ง(); } } while(Serial.available() > 0) { Serial.read(); } } }
ขั้นตอนที่ 5: กลไกแพนเอียง:-
ฉันได้ใช้ชุดเครื่องมือ Pan-Tilt ที่มีจำหน่ายทั่วไป หากคุณต้องการ คุณสามารถสร้างมันขึ้นมาเองโดยใช้ไม้/พลาสติก หรือแม้แต่การพิมพ์ 3 มิติ
ตัวที่ผมเคยใช้ราคาถูกมาก ประกอบง่ายมาก แต่ถ้าคุณต้องการคำแนะนำเกี่ยวกับวิธีการทำเช่นนั้น คุณสามารถหาได้ที่นี่
ขั้นตอนที่ 6: การสร้างการเชื่อมต่อ:
วงจรค่อนข้างง่าย เพียงแนบเซอร์โวสองตัวเข้ากับ Arduino
- แนวตั้งเพื่อปักหมุด5
- แนวนอนเพื่อปักหมุด6
- กำลังไฟถึง +5V
- กราวด์ไปที่ GND
ตรวจสอบแผนภาพวงจรสำหรับการอ้างอิง
ขั้นตอนที่ 7: การทดสอบ:
- หลังจากทำทุกอย่างเสร็จแล้ว สิ่งที่ต้องทำคือทดสอบว่าใช้งานได้หรือไม่ ในการทดสอบก่อนอื่นตรวจสอบให้แน่ใจว่าเซอร์โวเชื่อมต่อกับ Arduino อย่างถูกต้องและอัปโหลดภาพร่างแล้ว
- หลังจากอัปโหลดภาพร่างแล้ว ตรวจสอบให้แน่ใจว่าได้ปิด IDE เพื่อให้พอร์ตเชื่อมต่อกับ python ได้ฟรี
- ตอนนี้เปิด 'face.py' ด้วย Python IDLE แล้วกด 'F5' เพื่อเรียกใช้โค้ด จะใช้เวลาสองสามวินาทีในการเชื่อมต่อกับ Arduino จากนั้นคุณจะสามารถเห็นหน้าต่างที่สตรีมเว็บแคมได้ ตอนนี้รหัสจะตรวจจับใบหน้าของคุณและเซอร์โวจะติดตามมัน
- Servo ควรเคลื่อนที่เมื่อคุณย้ายวัตถุ ตอนนี้เพียงแค่ติดกล้องเข้ากับเซอร์โวเพื่อให้มันเคลื่อนที่ไปพร้อมกับเซอร์โว
ขอขอบคุณ.
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
Arduino ที่ถูกที่สุด -- Arduino ที่เล็กที่สุด -- Arduino Pro Mini -- การเขียนโปรแกรม -- Arduino Neno: 6 ขั้นตอน (พร้อมรูปภาพ)
Arduino ที่ถูกที่สุด || Arduino ที่เล็กที่สุด || Arduino Pro Mini || การเขียนโปรแกรม || Arduino Neno:…………………………… โปรดสมัครสมาชิกช่อง YouTube ของฉันสำหรับวิดีโอเพิ่มเติม……. โปรเจ็กต์นี้เกี่ยวกับวิธีเชื่อมต่อ Arduino ที่เล็กที่สุดและถูกที่สุดเท่าที่เคยมีมา Arduino ที่เล็กที่สุดและถูกที่สุดคือ arduino pro mini คล้ายกับ Arduino