Az Önhöz hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk. Olvass tovább.

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.

instagram viewer
Kép jóváírása: MediaPipe/GitHub

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!