Spisu treści:
- Krok 1: WYMAGANE RZECZY:
- Krok 2: ZASADA DZIAŁANIA:
- Krok 3: PRZECHWYTYWANIE I PRZETWARZANIE WEJŚCIA:
- Krok 4:
- Krok 5:
- Krok 6: CZĘŚĆ PRZETWARZANIA:
- Krok 7:
- Krok 8:
- Krok 9:
- Krok 10:
- Krok 11:
- Krok 12: KONTROLA RUCHU:
- Krok 13:
Wideo: Gesture Hawk: Robot sterowany gestami ręcznymi za pomocą interfejsu opartego na przetwarzaniu obrazu: 13 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
Gesture Hawk został zaprezentowany w TechEvince 4.0 jako prosty interfejs człowiek-maszyna oparty na przetwarzaniu obrazu. Jego użyteczność polega na tym, że do sterowania zrobotyzowanym samochodem, który działa na zasadzie napędu różnicowego, nie są wymagane żadne dodatkowe czujniki ani urządzenia do noszenia poza rękawicą. W tej instrukcji przeprowadzimy Cię przez zasadę działania śledzenia obiektów i wykrywania gestów używanych w systemie. Kod źródłowy tego projektu można pobrać z Github poprzez link:
Krok 1: WYMAGANE RZECZY:
- Sterownik silnika L298N
- Silniki prądu stałego
- Podwozie samochodu robota
- Arduino Uno
- Akumulatory LiPo
- Kabel USB Arduino (długi)
- Biblioteka OpenCV z Pythonem
Krok 2: ZASADA DZIAŁANIA:
Gesture Hawk to trójfazowy system przetwarzania, jak widać na powyższym schemacie.
Krok 3: PRZECHWYTYWANIE I PRZETWARZANIE WEJŚCIA:
Przechwytywanie danych wejściowych można rozumieć w szerszych kategoriach podanych na powyższym schemacie.
Aby wydobyć kształt dłoni z otoczenia, musimy zastosować maskowanie lub filtrowanie określonego koloru (w tym przypadku – fioletowo-niebieskiego’). W tym celu należy przekonwertować obraz z formatu BGR na HSV, co można zrobić za pomocą poniższego fragmentu kodu.
hsv = cv2.cvtColor(ramka, cv2. COLOR_BGR2HSV)
Teraz następnym krokiem jest znalezienie pożądanego zakresu parametrów HSV, aby wyodrębnić rękę za pomocą maski lub filtra. W tym celu najlepszym sposobem jest użycie drążków do znalezienia odpowiedniego zakresu. Oto zrzut ekranu paska śledzenia używanego w tym projekcie.
Krok 4:
Krok 5:
Oto fragment kodu podany poniżej, aby stworzyć taki trackbar do budowy maski:
importuj cv2
importuj numpy jako npdef Nothing(x): pass cv2.namedWindow('image') img = cv2. VideoCapture(0) cv2.createTrackbar('l_H', 'image', 110, 255, Nothing) cv2.createTrackbar('l_S ', 'obraz', 50, 255, nic) cv2.createTrackbar('l_V', 'obraz', 50, 255, nic) cv2.createTrackbar('h_H', 'obraz', 130, 255, nic) cv2. createTrackbar('h_S', 'image', 255, 255, nic) cv2.createTrackbar('h_V', 'image', 255, 255, nic) while(1): _, frame = img.read()
hsv = cv2.cvtColor(frame, cv2. COLOR_BGR2HSV)lH = cv2.getTrackbarPos('l_H', 'image') lS = cv2.getTrackbarPos('l_S', 'image') lV = cv2.getTrackbarPos('l_V', 'image') hH = cv2.getTrackbarPos('h_H', 'image') hS = cv2.getTrackbarPos('h_S', 'image') hV = cv2.getTrackbarPos('h_V', 'image') lower_R = np. array([lH, lS, lV]) wyższe_R = np.array([hH, hS, hV]) maska = cv2.inRange(hsv, niższe_R, wyższe_R) res = cv2.bitwise_and(ramka, ramka, maska= maska) cv2.imshow('image', res) k = cv2.waitKey(1) & 0xFF jeśli k == 27: zerwij cv2.destroyAllWindows()
Krok 6: CZĘŚĆ PRZETWARZANIA:
Cóż, mamy już geometryczny kształt dłoni, teraz nadszedł czas, aby go wykorzystać i wykorzystać do wymyślenia gestu dłoni.
Wypukły kadłub:
Poprzez wypukły kadłub staramy się dopasować przybliżony wielokąt poprzez skrajne punkty obecne w kształcie. Obraz po lewej pokazuje przybliżony wielokąt, który został przypisany do kształtu z wypukłymi punktami zaznaczonymi na czerwono.
Punkty wypukłe to te punkty w kształcie, które znajdują się najdalej od boku tego przybliżonego wielokąta. Ale problem z wypukłą powłoką polega na tym, że podczas jej obliczania otrzymamy tablicę wszystkich punktów wypukłych, ale to, czego potrzebujemy, to niebieski punkt wypukły. Powiemy Ci, dlaczego jest to wymagane.
Aby znaleźć ten wypukły punkt, musimy zastosować wzór na odległość prostopadłą, aby znaleźć odległość punktu wypukłego o najbliższym boku. Zaobserwowaliśmy, że niebieski spiczasty punkt ma maksymalną odległość od boku i tak otrzymujemy ten punkt.
Krok 7:
Krok 8:
Następnie musimy znaleźć nachylenie linii łączącej czubek kciuka (lub punkt skrajny) z tym wypukłym punktem z poziomym.
Krok 9:
W powyższym przypadku kąt α powinien wynosić od 0 do 90 stopni, jeśli gest dotyczy skrętu w lewo. Oznacza to, że tan(α) powinno być dodatnie.
Krok 10:
W powyższym przypadku kąt α powinien wynosić od 180 do 90 stopni, jeśli gest dotyczy skrętu w prawo. Oznacza to, że tan(α) powinno być ujemne.
Dlatego jeśli Tan α jest dodatnie, to skręt w lewo. Jeśli Tan α jest ujemne, to skręt w prawo. Teraz nadszedł czas, aby zobaczyć, jak wykryć najważniejsze polecenie zatrzymania.
Tutaj sprawdzany jest określony stosunek (znaleziony przez trafienie i próbę) i w maksymalnych przypadkach ten stosunek odległości pozostaje w tym konkretnym zakresie.
Krok 11:
Na koniec gest ruchu do przodu jest analizowany przez funkcję matchShape() w OpenCV. Ta funkcja porównuje kształt dwóch liczników, w tym przypadku, między przykładem treningu na prawym na powyższym obrazku a konturem po lewej stronie powyższego obrazu. Zwraca wartość z zakresu od 0 do 2 lub 3, w zależności od zmiany występującej w kształcie dwóch konturów. Dla identycznego konturu zwraca 0.
ret = cv2.matchShapes(cnt1, cnt2, 1, 0.0)
Tutaj cn1 i cnt2 są dwoma konturami, które należy porównać.
Krok 12: KONTROLA RUCHU:
PySerial:
Wykorzystaliśmy bibliotekę Pythona PySerial do konwersji przetworzonych danych na dane szeregowe w celu komunikacji z Arduino Uno za pomocą kabla Arduino USB. Po wykryciu określonego gestu przez opencv utworzyliśmy tymczasową zmienną "x" i przypisaliśmy jej unikalną wartość i przekonwertowaliśmy ją na wejście szeregowe za pomocą następującego wiersza poleceń: -
import serial #aby zaimportować bibliotekę Pyserial
serial. Serial('', baudrate = '9600', timeout = '0') # ustawienie wyjścia szeregowego.. NAZWA PORTU to nazwa portu, przez który nastąpi transmisja danych.
serial.write(b'x') # x to alfabet wysyłany do portu …b ma za zadanie przekonwertować ten ciąg na bajty.
Przetwarzanie Arduino:
Teraz arduino jest zakodowane w taki sposób, że każdy inny serial x jest liniowo mapowany do określonej akcji odpowiedzialnej za płynny ruch robota (powiedzmy, że wykrycie lewego gestu uruchomi silniki na prawo, aby skręcić w lewo). Możemy kontrolować ruch każdego koła zarówno translacyjnie, jak i obrotowo poprzez odpowiednią zmianę kodu.
L298N Sterownik silnika:-
Sterownik silnika służy jako pośrednik między silnikiem a źródłem zasilania, ponieważ silników nie można bezpośrednio zasilać ze względu na niskie napięcie znamionowe. Akumulator Li-Po jest podłączony do jego zacisku wejściowego 12 V, a gniazdo 5 V arduino łączymy z gniazdem wejściowym 5 V sterownika silnika, ostatecznie łącząc masę Li-Po, a także arduino we wspólnym gnieździe masy sterownika silnika.
Teraz zaciski silników są połączone w podanych gniazdach. Na koniec podłączamy zaciski wejściowe silnika do gniazd wyjściowych PWM arduino, pozwalając nam swobodnie decydować o dokładnych aspektach ruchu obrotowego i translacji.
Zalecana:
Robot sterowany gestami za pomocą Arduino: 7 kroków
Robot sterowany gestami korzystający z Arduino: Roboty są używane w wielu sektorach, takich jak budownictwo, wojsko, produkcja, montaż itp. Roboty mogą być autonomiczne lub półautonomiczne. Roboty autonomiczne nie wymagają interwencji człowieka i mogą działać samodzielnie w zależności od sytuacji. Zobacz
System rozpoznawania i gaszenia ognia oparty na przetwarzaniu obrazu: 3 kroki
System rozpoznawania i gaszenia ognia oparty na przetwarzaniu obrazu: Witajcie przyjaciele, jest to system wykrywania i gaszenia ognia oparty na przetwarzaniu obrazu przy użyciu Arduino
Przetwarzanie obrazu za pomocą Raspberry Pi: Instalacja OpenCV i separacja kolorów obrazu: 4 kroki
Przetwarzanie obrazu za pomocą Raspberry Pi: Instalowanie OpenCV i separacji kolorów obrazu: Ten post jest pierwszym z kilku samouczków dotyczących przetwarzania obrazu, które mają zostać wykonane. Przyglądamy się bliżej pikselom, które składają się na obraz, dowiadujemy się, jak zainstalować OpenCV na Raspberry Pi, a także piszemy skrypty testowe do przechwytywania obrazu, a także c
ROBOT STEROWANY GESTAMI IOT: 10 kroków (ze zdjęciami)
ROBOT STEROWANY GESTAMI IOT: Ten robot jest sterowany gestami, który może być kontrolowany z dowolnego miejsca za pomocą Internetu. W tym projekcie akcelerometr MPU 6050 służy do zbierania danych dotyczących ruchów naszej ręki. Mierzy przyspieszenie naszej ręki w trzech
Ruchomy sterowany gestami za pomocą akcelerometru i pary nadajnik-odbiornik RF: 4 kroki
Łazik sterowany gestami za pomocą akcelerometru i pary nadajnik-odbiornik RF: Cześć, kiedykolwiek chciałeś zbudować łazik, którym można sterować za pomocą prostych gestów, ale nigdy nie odważysz się zagłębić w zawiłości przetwarzania obrazu i połączenia kamery internetowej ze swoim mikrokontroler, nie mówiąc już o podjeździe