Spisu treści:

Urządzenie do śledzenia twarzy! Python i Arduino: 5 kroków
Urządzenie do śledzenia twarzy! Python i Arduino: 5 kroków

Wideo: Urządzenie do śledzenia twarzy! Python i Arduino: 5 kroków

Wideo: Urządzenie do śledzenia twarzy! Python i Arduino: 5 kroków
Wideo: OpenCV i wykrywanie twarzy - Projekt w Pythonie 2024, Lipiec
Anonim
Image
Image
Urządzenie do śledzenia twarzy! Python i Arduino
Urządzenie do śledzenia twarzy! Python i Arduino
Urządzenie do śledzenia twarzy! Python i Arduino
Urządzenie do śledzenia twarzy! Python i Arduino

Autor: Techovator0819Mój kanał na YoutubeObserwuj więcej autora:

IoT: Weather Box (z niestandardowymi alarmami i zegarami)
IoT: Weather Box (z niestandardowymi alarmami i zegarami)
IoT: Weather Box (z niestandardowymi alarmami i zegarami)
IoT: Weather Box (z niestandardowymi alarmami i zegarami)
Wielofunkcyjny robot autonomiczny: „Zasób”
Wielofunkcyjny robot autonomiczny: „Zasób”
Wielofunkcyjny robot autonomiczny: „Zasób”
Wielofunkcyjny robot autonomiczny: „Zasób”

O: Po prostu uwielbiam tworzyć nowe rzeczy. Jak rzeczy związane z mikrokontrolerami, inżynierią mechaniczną, sztuczną inteligencją, informatyką i wszystkim, co mnie interesuje. A tutaj znajdziesz wszystkie… Więcej o Techovator0819 »

Witam wszystkich, którzy czytają tę instrukcję. Jest to urządzenie do śledzenia twarzy, które działa na bibliotece Pythona o nazwie OpenCV. CV oznacza „Wizję komputerową”. Następnie skonfigurowałem interfejs szeregowy między moim komputerem a moim Arduino UNO. Oznacza to, że nie działa to tylko w Pythonie.

To urządzenie rozpoznaje Twoją twarz w kadrze, a następnie wysyła określone polecenia do Arduino, aby ustawić kamerę w taki sposób, aby pozostała w kadrze! Brzmi nieźle? Wskoczmy więc w to.

Kieszonkowe dzieci

1. Arduino UNO

2. 2 x serwomotory (każdy serwosilnik będzie w porządku, ale użyłem Tower Pro SG90)

3. Instalacja Pythona

4. Instalowanie OpenCV

5. Kamera internetowa

Krok 1: Instalacja Pythona i OpenCV

Instalacja Pythona jest całkiem prosta!

www.python.org/downloads/

Możesz skorzystać z powyższego linku, aby pobrać wersję Pythona (Mac, Windows lub Linux), która najbardziej Ci odpowiada (64-bitowa lub 32-bitowa). Reszta procesu instalacji jest prosta i zostaniesz poprowadzony przez interfejs.

Po zakończeniu instalacji otwórz wiersz polecenia i wpisz następujące polecenie:

pip zainstaluj opencv-python

To powinno zainstalować bibliotekę openCV. W przypadku rozwiązywania problemów możesz sprawdzić TĘ stronę.

Po skonfigurowaniu środowiska i wszystkich wymagań wstępnych zobaczmy, jak możemy to zbudować!

Krok 2: Jakie są cechy podobne do Haara?

Cechy przypominające haar są cechami obrazu cyfrowego. Nazwa pochodzi od falek Haar. Są to fale o kształcie kwadratu, które służą do identyfikacji cech obrazu cyfrowego. Kaskady Haar to w zasadzie klasyfikator, który pomaga nam wykrywać obiekty (w naszym przypadku twarze) za pomocą cech podobnych do haar.

W naszym przypadku, dla uproszczenia, użyjemy wstępnie przeszkolonych kaskad Haar do identyfikacji twarzy. Możesz kliknąć TEN link na stronie github i pobrać plik xml dla kaskady Haar.

1. Kliknij „haarcascade_frontalface_alt.xml”

2. Kliknij przycisk „Surowy” w prawym górnym rogu okna kodu.

3. Przekieruje Cię na inną stronę z samym tekstem.

4. Kliknij prawym przyciskiem myszy i naciśnij „Zapisz jako…”

5. Zapisz go w tym samym katalogu lub folderze, co kod Pythona, który chcesz napisać.

Krok 3: Kodowanie w Pythonie

importuj cv2

import numpy as np import seryjny czas importu

Importujemy wszystkie potrzebne nam biblioteki.

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

Tworzymy obiekt seryjny o nazwie 'ard'. Jako parametry określamy również nazwę portu i szybkość transmisji.

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

Tworzymy kolejny obiekt dla naszej Kaskady Haar. Upewnij się, że plik HaarCascade pozostaje w tym samym folderze, co ten program Pythona.

vid = cv2. VideoCapture(0)

Tworzymy obiekt, który przechwytuje wideo z kamery internetowej. 0, ponieważ parametr oznacza pierwszą kamerę internetową podłączoną do mojego komputera.

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

podczas gdy prawda:

_, frame = vid.read()#czyta bieżącą klatkę do zmiennej frame gray = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY)#konwertuje ramkę -> obraz w skali szarości #następująca linia wykrywa twarze. #Pierwszy parametr to obraz, na którym chcesz wykryć. #minSize=() określa minimalny rozmiar twarzy w pikselach #Kliknij powyższy link, aby dowiedzieć się więcej o twarzach klasyfikacji kaskadowej = face_cascade.detectMultiScale(gray, minSize =(80, 80), minNeighbors=3) # Pętla for do wykrywania twarzy. for (x, y, w, h) w ścianach: cv2.rectangle(ramka, (x, y), (x+w, y+h), (255, 0, 0), 2)#rysuje prostokąt wokół lica Xpos = x+(w/2)#oblicza współrzędną X środka lica. Ypos = y+(h/2)#oblicza współrzędną Y środka twarzy, jeśli Xpos > 280: #Poniższy kod blokuje sprawdzanie, czy twarz to ard.write('L'.encode()) #on lewą, prawą, górną lub dolną w stosunku do time.sleep(0.01) #środek kadru. elif Xpos 280: ard.write('D'.encode()) time.sleep(0.01) elif Ypos < 200: ard.write('U'.encode()) time.sleep(0.01) else: ard.write ('S'.encode()) time.sleep(0.01) break cv2.imshow('ramka', ramka)#wyświetla ramkę w osobnym oknie. k = cv2.waitKey(1)&0xFF if(k == ord('q')): #jeśli 'q' zostanie naciśnięte na klawiaturze, wychodzi z pętli while. przerwa

cv2.destroyAllWindows() #zamyka wszystkie okna

ard.close() #zamyka komunikację szeregową

vid.release() #przestaje odbierać wideo z kamery internetowej.

Krok 4: Programowanie Arduino

Zapraszam do modyfikowania programu zgodnie z konfiguracją sprzętową zgodnie z własnymi potrzebami.

#włączać

serwo serwoX;

serwo serwo;

int x = 90;

int y = 90;

pusta konfiguracja () {

// wstaw tutaj swój kod konfiguracyjny do jednorazowego uruchomienia: Serial.begin(9600); servoX.attach(9); serwoY.attach(10); servoX.write(x); serwoY.zapis(y); opóźnienie (1000); }

wprowadzanie znaków = ""; //wejście szeregowe jest przechowywane w tej zmiennej

pusta pętla () {

// wstaw tutaj swój główny kod, aby uruchamiał się wielokrotnie: if(Serial.available()){ //sprawdza, czy w buforze szeregowym znajdują się jakieś dane input = Serial.read(); //wczytuje dane do zmiennej if(input == 'U'){ servoY.write(y+1); //dostosowuje kąt serwa zgodnie z danymi wejściowymi y += 1; //aktualizuje wartość kąta } else if(input == 'D'){ servoY.write(y-1); y-= 1; } else{ servoY.write(y); } if(input == 'L'){ servoX.write(x-1); x-= 1; } else if(input == 'R'){ servoX.write(x+1); x += 1; } else{ servoX.write(x); } wejście = ""; //czyści zmienną } //proces się powtarza!!:) }

Krok 5: Wniosek

Jest to jeden miły i interaktywny sposób, dzięki któremu możesz projektować, aby włączyć funkcję Computer Vision do swoich projektów Arduino. Widzenie komputerowe jest całkiem zabawne. I naprawdę mam nadzieję, że wam się podobało. Jeśli tak, daj znać w komentarzach. I proszę zasubskrybuj mój kanał na youtube. Z góry dziękuję <3<3

youtube.com/channel/UCNOSfI_iQ7Eb7-s8CrExGfw/videos

Zalecana: