Mundarija:

ARDUINO dan foydalangan holda yuzni kuzatish !!!: 7 qadam
ARDUINO dan foydalangan holda yuzni kuzatish !!!: 7 qadam

Video: ARDUINO dan foydalangan holda yuzni kuzatish !!!: 7 qadam

Video: ARDUINO dan foydalangan holda yuzni kuzatish !!!: 7 qadam
Video: Control 360 непрерывного сервопривода с кнопочными переключателями и Arduino 2024, Noyabr
Anonim
ARDUINO dan foydalangan holda yuzni kuzatish !!!
ARDUINO dan foydalangan holda yuzni kuzatish !!!

Oldingi yo'riqnomada men "pyserial" moduli yordamida Arduino va Python o'rtasida qanday muloqot qilish va LEDni boshqarish haqida gaplashdim. Agar siz uni ko'rmagan bo'lsangiz, mana bu erda ko'ring: ARDUINO & PYTHON O'rtasidagi Aloqa!

Va qanday qilib siz ob'ektning rangini aniqlay olasiz va uni ekranda kuzatib borishingiz mumkin, bu erda tekshiring: OPENCV VA PITONDAN QO'LLANGAN Rangni aniqlash.

Bu yo'riqnomada men sizga Arduino va Python yordamida yuzlarni qanday kuzatishni va kamerani yuzga kuzatishni ko'rsataman. Bu qiyin tuyulishi mumkin, lekin menga ishoning, unday emas, sizga Arduino va Python haqida asosiy bilim kerak.

Shunday qilib, boshlaylik …

1 -qadam: Sizga kerak bo'lgan narsalar:

Sizga kerak bo'lgan narsalar
Sizga kerak bo'lgan narsalar
Sizga kerak bo'lgan narsalar
Sizga kerak bo'lgan narsalar
Sizga kerak bo'lgan narsalar
Sizga kerak bo'lgan narsalar

Talablar minimal. Bu erda men sizga kerak bo'lgan narsalarning ro'yxatini taqdim etdim:

Uskuna talablari:

  • Arduino UNO (Amazon AQSh / Amazon EU)
  • Veb -kamera (Amazon AQSh / Amazon EU)
  • Servos x 2 (Amazon AQSh / Amazon EU)
  • Non paneli (Amazon AQSh / Amazon EU)
  • Servo Pan Tilt to'plami (Amazon AQSh / Amazon EU)

Dastur talablari:

  1. Python 2.7 (O'rnatilishi kerak, odatda Linux operatsion tizimi oldindan o'rnatilgan)
  2. OpenCV (Siz uni alohida yuklab olishingiz yoki "pip install" yordamida o'rnatishingiz mumkin)
  3. Pyserial (pip bilan o'rnatilishi mumkin)
  4. uyqusiz
  5. Haarcascade.

Hamma narsa yig'ilgandan so'ng, biz o'rnatish bosqichiga o'tamiz …

2-qadam: Python muhitini sozlash:

Python muhitini sozlash
Python muhitini sozlash
Python muhitini sozlash
Python muhitini sozlash
Python muhitini sozlash
Python muhitini sozlash

Python -ni o'rnatish:

Shunday qilib, birinchi navbatda, biz Python 2.7 ni ishga tushiramiz. Buning uchun avval python 2.7.14 -ni yuklab oling va o'rnating. To'g'ri o'rnatilganligini tekshirish uchun Goto: Windows qidiruvi >> "IDLE" yozing >> Enter tugmasini bosing. Python Shell paydo bo'lishi kerak.

YoKI

Qidiruvga "CMD" kiriting va buyruq satrini ochish uchun "Enter" ni bosing. "Python" CMD turiga kiriting va "Enter" tugmasini bosing, Python interfeysi ko'rsatilishi kerak.

Agar siz CMD -da xato ko'rsangiz, vahima qo'ymang, ehtimol siz muhit o'zgaruvchisini o'rnatishingiz kerak bo'ladi. Atrof -muhit o'zgaruvchilarini sozlash uchun siz bu erda o'qishingiz mumkin.

Pythonda "pyserial", "OpenCV" va "numpy" ni o'rnatish:

Ushbu modullarni o'rnatish uchun biz pip install dan foydalanamiz, Avval CMD-ni oching va quyidagi kodlarni kiriting:-

pip o'rnatish ketma -ket

pip install opencv-python> pip install numpy

bu buyruqlar kerakli modullarni o'rnatadi. Endi biz kodlash qismiga o'tishimiz mumkin …

3 -qadam: Python skript:

Python skriptlari
Python skriptlari

Kod yozishni boshlashdan oldin, birinchi navbatda, yangi papkani yaratish kerak, chunki barcha kodlar bitta papkada saqlanishi kerak. Shunday qilib, yangi papka yarating, xohlagan narsangizga nom bering. va pastdan "Haarcascade" ni yuklab oling va uni papkaga joylashtiring.

Endi bloknotni oching va quyida berilgan skriptni yozing, uni haarcascade bilan bir xil papkada 'face.py' sifatida saqlang. (Siz quyidagi faylni taqdim etgan kodni yuklab olishingiz mumkin):

#barcha kerakli modullarni import qiling

import numpy sifatida np import ketma -ket import vaqti import sys import cv2 #Setup Arduino uchun aloqa yo'li ('COM5' o'rniga sizning arduino ulangan portni qo'ying) arduino = serial. Serial ('COM5', 9600) time.sleep (2) chop etish ("Arduino -ga ulangan …") #yuzni aniqlash uchun Haarcascade -ni import qilish face_cascade = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') #Veb -kameradan video oqimini olish uchun. cap = cv2. VideoCapture (0) #Rasmni o'qing, kulrang tasvirga aylantiring va 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) kulrang = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) yuzlar = face_cascade.detectMultiScale (kulrang, 1.3) # yuzni aniqlang va uning atrofida to'rtburchaklar qiling. yuzidagi (x, y, w, h) uchun: cv2. to'rtburchak (img, (x, y), (x+w, y+h), (0, 255, 0), 5) roi_gray = kulrang [y: y+h, x: x+w] roi_color = img [y: y+h, x: x+w] arr = {y: y+h, x: x+w} chop etish (arr) chop etish ('X: '+str (x)) chop etish (' Y: '+str (y)) chop etish (' x+w: '+str (x+w)) chop etish (' y+h: '+str (y+h))) # Roi markazi (To'rtburchak) xx = int (x+(x+h))/2 yy = int (y+(y+w))/2 bosma (xx) bosma (yy) markazi = (xx, yy) # ma'lumotlarni arduino printga yuborish ("To'rtburchak markazi:", markaz) data = "X {0: d} Y {1: d} Z". format (xx, yy) chop etish ("chiqish = '" +ma'lumotlar +) "'") arduino.write (ma'lumotlar) #Oqimni ko'rsatish. cv2.imshow ('img', img) #Ijro qilishni tugatish uchun "Esc" tugmasini bosing k = cv2.waitKey (30) & 0xff agar k == 27: tanaffus

Bu bajarilgandan so'ng, arduino kodini yozishga o'ting …

4 -qadam: Arduino kodi:

Arduino kodi
Arduino kodi

Python skripti tayyor bo'lgandan so'ng, servoni boshqarish uchun bizga arduino eskizi kerak bo'ladi. Quyidagi kodga murojaat qiling, uni Arduino IDE -ga joylashtiring va "servo.ino" sifatida saqlang. kodni yuklang va ulanish uchun keyingi bosqichga o'ting.

(Yuklab olinadigan fayl quyida keltirilgan)

#qo'shing

Servo servoVer; // Vertikal Servo Servo servoHor; // Gorizontal Servo int x; int y; int prevX; int prevY; void setup () {Serial.begin (9600); servoVer.attach (5); // Vertikal Servo pin 5 servoHor.attach (6) ga ulang; // 6 -gachasi servoVer.write -ga gorizontal Servo ulang (90); servoHor.write (90); } void Pos () {if (prevX! = x || prevY! = y) {int servoX = map (x, 600, 0, 70, 179); int servoY = xarita (y, 450, 0, 179, 95); servoX = min (servoX, 179); servoX = maksimal (servoX, 70); servoY = min (servoY, 179); servoY = maksimal (servoY, 95); servoHor.write (servoX); servoVer.write (servoY); }} void loop () {if (Serial.available ()> 0) {if (Serial.read () == 'X') {x = Serial.parseInt (); if (Serial.read () == 'Y') {y = Serial.parseInt (); Pos (); }} while (Serial.available ()> 0) {Serial.read (); }}}

5-qadam: Panjara mexanizmi:-

Burilish mexanizmi
Burilish mexanizmi
Burilish mexanizmi
Burilish mexanizmi

Men Pan-Tilt uchun tayyor to'plamdan foydalandim. Agar xohlasangiz, uni yog'ochdan/plastmassadan yoki hatto 3D bosib chiqarishdan o'zingiz qilishingiz mumkin.

Men ishlatganim juda arzon va yig'ish juda oson. Agar siz buni qanday qilishni ko'rsatma olishni xohlasangiz, uni bu erda topishingiz mumkin.

6 -qadam: Ulanishlar:

Ulanishlar
Ulanishlar
Ulanishlar
Ulanishlar

O'chirish sxemasi juda oddiy. Arduino -ga ikkita servo ulang.

  1. 5 -pin uchun vertikal
  2. 6 -gachasi gorizontal
  3. Quvvat +5V gacha
  4. GND uchun asos

Malumot uchun elektron sxemasini tekshiring.

7 -qadam: TEST:

  • Hamma narsa bajarilgandan so'ng, oxirgi narsa - uning ishlayotganligini tekshirish. Sinash uchun avval servolarning arduino -ga to'g'ri ulanganligiga va eskiz yuklanganligiga ishonch hosil qiling.
  • Eskiz yuklangandan so'ng, IDE -ni yopganingizga ishonch hosil qiling, shunda port pythonga ulanishi mumkin.
  • Endi "face.py" ni Python IDLE bilan oching va kodni ishlatish uchun "F5" tugmasini bosing. Arduino -ga ulanish uchun bir necha soniya kerak bo'ladi, shunda siz veb -kamera oqayotgan oynani ko'rishingiz kerak. Endi kod sizning yuzingizni aniqlaydi va servolar uni kuzatib boradi.
  • Ob'ektni harakatlantirganda Servo harakatlanishi kerak. Endi kamerani servolarga ulang, shunda u servo bilan birga harakatlanadi.

Rahmat.

Tavsiya: