Számos projekt segítségével erősítheti számítógépes látásmóddal és Pythonnal kapcsolatos készségeit. Az egyik ilyen projekt egy egyszerű push-up számláló létrehozása Python használatával. A projekt programját egyetlen fájlba is megírhatja.
A program videó bemenetet vagy valós idejű bemenetet vesz a kamerából, emberi pózbecslést végez a bemeneten, és megszámolja a személy által végzett fekvőtámaszok számát. Az emberi pózbecslés végrehajtásához a program a MediaPipe emberi pózbecslési modellt fogja használni.
Ez a Google által kifejlesztett modell, amely harminchárom tereptárgyat követ az emberi testen. Ezenkívül előrejelzi a teljes test szegmentációját, amelyet kétosztályos szegmentációként képvisel. A következő képen látható az összes tereptárgy, amelyet a modell képes azonosítani. A számozott pontok azonosítják az egyes tereptárgyakat, és vonalakkal kapcsolódnak egymáshoz.
A push-up számlálóprogram a vállak és a könyök helyzetét használja ki. A fenti képen a váll iránypontok a 11 és 12, míg a könyök iránypontok a 13 és 14.
Környezetének beállítása
Már ismernie kell a Python alapjai. Nyisson meg egy Python IDE-t, és hozzon létre egy új Python-fájlt. Futtassa a következő parancsot a terminálon a megfelelő csomagok telepítéséhez a környezetében:
pip telepítése OpenCV-Python
Az OpenCV-Pythont használja a program videobemenetének felvételéhez és feldolgozásához. Ez a könyvtár adja meg a programját számítógépes látási képességek.
pip telepítése MediaPipe
A MediaPipe segítségével emberi pózbecslést végezhet a bemeneten.
pip install imutils
Az imutilok segítségével átméretezheti a videobemenetet a kívánt szélességre.
Importálja a három könyvtárat, amelyet korábban telepített a környezetére. Ez lehetővé teszi függőségeik felhasználását a projektben.
import cv2
import imutilok
import mediapipe mint mp
Ezután hozzon létre három MediaPipe objektumot, és inicializálja őket a megfelelő funkciók segítségével. Az mp.solutions.drawing_utilsfunction segítségével megrajzolhatja a különböző tereptárgyakat a bemeneten. Az mp.solutions.drawing_styles segítségével módosíthatja azokat a stílusokat, amelyekben a tereptárgyak rajzai megjelennek, az mp.solutions.pose pedig azt a modellt, amelyet ezen tereptárgyak azonosítására fog használni.
mp_draw = mp.solutions.drawing_utils
mp_draw_styles = mp.solutions.drawing_styles
mp_pose = mp.solutions.pose
Az emberi testhelyzet becslése
Az ember pózának felismerése az a folyamat, amely során az ízületek azonosításával és osztályozásával meghatározzák a test orientációját.
A változók deklarálása
Deklarálja azokat a változókat, amelyeket a fekvőtámaszok számának, a vállak és a könyökök helyzetének, valamint a videobemenet tárolásához fog használni.
szám = 0
pozíció = Egyik sem
cap = cv2.VideoCapture("v4.mp4")
Inicializálja a pozícióváltozót None értékre. A program a könyök és a váll helyzetétől függően frissíti.
Hívja meg a MediaPipe pózbecslési modellt, amely érzékeli az emberi pózt a bemenetben.
val vel mp_pose. Póz(
min_detection_bizalom = 0.7,
min_tracking_bizalom = 0.7) mint póz:
Az észlelési megbízhatóság és a nyomon követési megbízhatóság inicializálása a modelltől szükséges pontossági szintet jelenti. A 0,7 hasonló a 70%-os pontossághoz. Módosíthatja a kívánt szintre.
A bemenet felvétele és előfeldolgozása
Vegyük azt a bemenetet, amelyet később átadunk a pózbecslési modellnek. Módosítsa a videobemenet szélességét az imutils könyvtár segítségével. Konvertálja a bemenetet BGR-ről RGB-re, mivel a MediaPipe csak RGB-bemenettel működik. Végül adja át a konvertált bemenetet az emberi pózbecslési modellnek a tereptárgyak azonosításához.
míg cap.isOpened():
siker, image=cap.read()hanem siker:
nyomtatás("üres kamera")
szünet
kép = imutils.resize (kép, szélesség=500)
image = cv2.cvtColor (cv2.flip (kép, 1), cv2.COLOR_BGR2RGB)
eredmény = póz.folyamat (kép)
A bevitel feldolgozása után azonosította a bemeneten lévő tereptárgyakat.
Az azonosított tereptárgyak megrajzolása a bemeneten
Hozzon létre egy üres listát, amely az egyes tereptárgyak koordinátáit tárolja. A draw_landmarks osztály segítségével rajzoljon egy pontot minden tereptárgyra és a köztük lévő kapcsolatokra. A for ciklus használatával ismételje meg a tereptárgyakat, és tárolja el az egyes tereptárgyak azonosítóját és koordinátáit a létrehozott listában. Használja az image.shape osztályt a videobemenet szélességének és magasságának kiszámításához.
lmList = []
ha result.pose_landmarks:
# Megrajzolja a tereptárgyak pontjait, és összekapcsolja őket
mp_draw.draw_landmarks (image, result.pose_landmarks,
mp_pose. POSE_CONNECTIONS)számára id, im ban ben felsorol (result.pose_landmarks.landmark):
# A videobemenet hosszának és szélességének meghatározása
h, w, _ = kép.alak
# A testpontok pontos koordinátáinak megtalálása
X, Y = int (im.x * w), int (im.y * h)
lmList.append([id, X, Y])
Az azonosító a MediaPipe pózbecslési modell által adott tereptárgynak adott szám. Miután azonosította az ember pózát a bevitelben, meg kell számolnia a fekvőtámaszok számát, ha vannak ilyenek.
A fekvőtámaszok számának számolása
Hozzon létre egy feltételt, amely összeveti a vállak helyzetét a könyök helyzetével. Amikor a bemeneti személy vállai magasabban vannak, mint a könyökök, a személy felfelé áll. Ha a vállak alacsonyabban vannak, mint a könyök, a személy lent van. Ezt úgy ellenőrizheti, hogy összehasonlítja a vállak tereptárgyainak azonosítóit a könyökök iránypontjaival.
# Ellenőrzi, hogy vannak-e azonosított tereptárgyak
ha len (lmList) != 0:
# Az alsó pozíciót azonosító feltétel
ha (lmList[12][2] és lmList[11][2] >= lmList[14][2] és lmList[13][2]):
pozíció = "le"
# Feltétel, amely azonosítja a felső pozíciót
ha (lmList[12][2] és lmList[11][2] <= lmList[14][2] és lmList[13][2])
és pozíció == "le":
pozíció = "fel"
szám +=1
Ahhoz, hogy egy személy teljesítsen egy teljes fekvőtámaszt, le kell ülnie, majd vissza kell térnie a felső pozícióba. A teljes push-up után a program eggyel frissítheti a számlálást.
A kimenet megjelenítése
Meg kell jelenítenie a program által megszámolt fekvőtámaszok számát. Nyomtassa ki a számláló értékét a terminálon, minden alkalommal, amikor a felhasználó teljes fekvőtámaszt hajt végre. Végül jelenítsd meg a fekvőtámaszt végző személy eredményeit a testére rajzolt tereptárgyakkal.
nyomtatás (számlálás)
cv2.imshow("Push-up számláló", cv2.flip (kép, 1))
key = cv2.waitKey(1)# A program leáll, ha megnyomja a q gombot
ha kulcs == ord('q'):
szünet
cap.release()
A kimenetnek valahogy így kell kinéznie:
Figyelnie kell egy frissítést a terminálon, mivel a kimeneten lévő személy teljes push-up-ot hajt végre.
Erősítse számítógépes látási készségeit
A számítógépes látás széles. A push-up számláló egyike azon számos projektnek, amellyel számítógépes látási készségeit a gyakorlatba is átültetheti. Ezeknek a készségeknek a erősítésének legjobb módja az, ha több olyan projektet építünk, amelyek számítógépes látást foglalnak magukban.
Minél több projektet épít, annál többet fog tanulni!