I dette prosjektet har jeg brukt Python (versjon 3.11.9) sammen med OpenCV og Google sitt MediaPipe-bibliotek for håndsporing (hand tracking).
Premisset for programmet er enkelt: Når kameraet detekterer X antall fingre, vises et bilde med tilsvarende X antall katter på skjermen.
Per nå fungerer løsningen best med venstre hånd, men jeg jobber videre med å få den til å fungere med begge hender.
OpenCV er et bibliotek for datamaskinsyn og bildebehandling. I dette prosjektet brukes det blant annet til:
-
å lese kamerafeed
-
håndtere bilder og videoframes
-
vise bilder/vinduer på skjermen
MediaPipe er et bibliotek fra Google som tilbyr ferdigtrente modeller for blant annet hånd- og kroppsdeteksjon. Her brukes MediaPipe Hands til å:
-
detektere hånd
-
finne håndens landemerker (fingre og ledd)
-
gjøre det mulig å telle fingre på en relativt enkel måte
Prosjektet består av to Python-filer, som begge ligger i samme mappe:
/ prosjektmappe
│
├── Katter.py
├── Hand_module.py
├── katt1.jpg
├── andre bilder...
Hovedprogrammet som:
-
starter kameraet
-
mottar finger-informasjon
-
viser riktig bilde basert på antall fingre
Er modulen som inneholder logikken for:
-
å lage en topografisk markering/oversikt av hånda (å “mappe” hånden)
-
tolke MediaPipe-landmarks
-
telle antall fingre som holdes oppe
Denne modulen importeres og brukes direkte i hovedprogrammet.
Bildene som brukes i programmet må (som forklart tidligere) dessuten ligge i samme mappe som Python-filene, ellers vil ikke programmet finne dem korrekt. (Det er forsåvidt mulig å kunne legge til filstier, men opplevde selv komplikasjoner ved utføring av dette)
Merk også at det kan hende at OpenCV-funksjonen cv2.imread() returnerer None (altså et bilde ikke blir funnet uten å kaste en eksplisitt feilmelding). For eksempel kan dette forekomme dersom programmet kjører fra en annen working directory enn der bildefilene ligger. Men det kan også hende dersom filnavn og filendelser ikke matcher nøyaktig. Dersom dette skjer er det viktig å sikre at bildefilene ligger i riktig mappe og at korrekte filstier brukes, samt å sjekke at bildene faktisk er laster før de brukes i videre kode. En annen mulig løsning er også å kjøre koden fra samme working directory som filene ligger i.
inspirasjonen bak modulen:
https://www.youtube.com/watch?v=vQZ4IvB07ec&t=281s
https://www.youtube.com/watch?v=6gVL0hbxIzo
https://github.com/MohamedAlaouiMhamdi/Hand_Tracking/blob/main/handtracking.py
info om Mediapipe finnes her:
https://mediapipe.readthedocs.io/en/latest/solutions/hands.html
https://ai.google.dev/edge/mediapipe/solutions/vision/hand_landmarker/python
info om openCV finnes her:
https://www.geeksforgeeks.org/computer-vision/opencv-overview/
https://opencv-tutorial.readthedocs.io/en/latest/intro/intro.html