Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo. Preberi več.

Za krepitev veščin računalniškega vida in Pythona lahko uporabite številne projekte. Eden od teh projektov je ustvarjanje preprostega števca sklece z uporabo Pythona. Program tega projekta lahko napišete v eno datoteko.

Program bo vzel video vnos ali vnos v realnem času iz kamere, izvedel oceno človeške drže na vnosu in preštel število sklec, ki jih oseba dela. Za izvedbo ocene človeške drže bo program uporabil model MediaPipe za oceno človeške drže.

Gre za model, ki ga je razvil Google in sledi triintridesetim mejnikom na človeškem telesu. Napoveduje tudi segmentacijo celotnega telesa, ki jo predstavlja kot segmentacijo dveh razredov. Naslednja slika prikazuje vse mejnike, ki jih je model sposoben prepoznati. Oštevilčene točke označujejo vsak mejnik in se med seboj povezujejo s črtami.

Avtorstvo slike: MediaPipe/GitHub

Vaš program števca za sklece bo uporabil položaje ramen in komolcev. Na zgornji sliki sta točki za ramena 11 in 12, mejniki za komolec pa 13 in 14.

Nastavitev vašega okolja

Morali bi že biti seznanjeni osnove Pythona. Odprite Python IDE in ustvarite novo datoteko Python. Zaženite naslednji ukaz na terminalu, da namestite ustrezne pakete v svoje okolje:

pip namestite OpenCV-Python

Uporabili boste OpenCV-Python, da vzamete video vhod v vaš program in ga obdelate. Ta knjižnica daje vaš program zmožnosti računalniškega vida.

pip namestite MediaPipe

MediaPipe boste uporabili za izvedbo ocene človeške drže na vhodu.

pip namestite imutils

Za spreminjanje velikosti video vhoda na želeno širino boste uporabili imutils.

Uvozite tri knjižnice, ki ste jih predhodno namestili v svoje okolje. To bo omogočilo uporabo njihovih odvisnosti v projektu.

uvoz cv2
uvoz imutils
uvoz mediapipe kot mp

Nato ustvarite tri objekte MediaPipe in jih inicializirajte z ustreznimi funkcijami. Uporabili boste mp.solutions.drawing_utilsfunction za risanje različnih mejnikov na vnosu. mp.solutions.drawing_styles, da spremenite sloge, v katerih se pojavljajo risbe mejnikov, in mp.solutions.pose, ki je model, ki ga boste uporabili za prepoznavanje teh mejnikov.

mp_draw = mp.solutions.drawing_utils
mp_draw_styles = mp.solutions.drawing_styles
mp_pose = mp.solutions.pose

Izvajanje ocene človeške postave

Zaznavanje položaja človeka je postopek ugotavljanja orientacije njegovega telesa s prepoznavanjem in razvrščanjem njegovih sklepov.

Deklariranje vaših spremenljivk

Navedite spremenljivke, ki jih boste uporabili za shranjevanje števila sklec, položaja ramen in komolcev ter video vhoda.

štetje = 0
položaj = Noben
cap = cv2.VideoCapture("v4.mp4")

Inicializirajte spremenljivko položaja na None. Program ga bo posodabljal glede na položaj komolcev in ramen.

Pokličite model ocenjevanja poze MediaPipe, ki bo zaznal človeško pozo v vnosu.

z mp_pose. Poza (
min_detection_confidence = 0.7,
min_tracking_confidence = 0.7) kot poza:

Inicializacije zanesljivosti zaznavanja in zanesljivosti sledenja predstavljajo raven natančnosti, ki jo potrebujete od modela. 0,7 je podobno 70-odstotni natančnosti. Lahko ga spremenite na želeno raven.

Sprejem in predhodna obdelava vnosa

Vzemite vnos, ki ga boste pozneje posredovali modelu za oceno položaja. Spremenite širino video vhoda s knjižnico imutils. Pretvorite vhod iz BGR v RGB, saj MediaPipe deluje samo z vhodom RGB. Nazadnje posredujte pretvorjen vnos modelu za ocenjevanje položaja človeka, da prepoznate mejnike.

medtem cap.isOpened():
uspeh, image=cap.read()

čene uspeh:
natisni("prazna kamera")
odmor

slika = imutils.resize (slika, širina=500)
slika = cv2.cvtColor (cv2.flip (slika, 1), cv2.COLOR_BGR2RGB)
rezultat = pose.process (slika)

Po obdelavi vnosa ste prepoznali orientacijske točke na vnosu.

Risanje prepoznanih orientacijskih točk na vhod

Ustvarite prazen seznam, ki bo shranil koordinate vsake orientacijske točke. Z razredom draw_landmarks narišite piko na vsako mejo in povezave med njimi. Z uporabo zanke for ponovite čez mejnike in shranite ID in koordinate vsake mejnike na seznam, ki ste ga ustvarili. Za izračun širine in višine video vhoda uporabite razred image.shape.

lmList = []

če result.pose_landmarks:
# Nariše točke mejnikov in jih poveže
mp_draw.draw_landmarks (slika, rezultat.pose_landmarks,
mp_pose. POSE_CONNECTIONS)

za id, im v naštej (result.pose_landmarks.landmark):
# Iskanje dolžine in širine video vhoda
v, š, _ = slika.oblika

# Iskanje natančnih koordinat telesnih točk
X, Y = int (im.x * w), int (im.y * h)
lmList.append([id, X, Y])

ID je številka, ki jo model ocenjevanja položaja MediaPipe dodeli določeni orientacijski točki. Ko določite pozo osebe v vnosu, morate prešteti število sklec, ki jih izvaja, če sploh.

Štetje števila sklec

Ustvarite stanje, ki preverja položaj ramen glede na položaj komolcev. Ko so ramena osebe v vhodu višja od komolcev, je oseba dvignjena. Ko so ramena nižje od komolcev, je oseba spuščena. To preverite tako, da primerjate ID mejnih točk ramen z mejnimi točkami komolcev.

# Preverjanje, ali obstajajo prepoznani mejniki
če len (lmList) != 0:
# Pogoj, ki označuje spodnji položaj
če (lmList[12][2] in lmList[11][2] >= lmList[14][2] in lmList[13][2]):
položaj = "dol"

# Pogoj, ki označuje položaj navzgor
če (lmList[12][2] in lmList[11][2] <= lmList[14][2] in lmList[13][2])
in položaj == "dol":
položaj = "gor"
štetje +=1

Da oseba opravi en polni skleco, mora zavzeti spodnji položaj in se nato vrniti v zgornji položaj. Po popolnem potiskanju lahko program posodobi štetje za eno.

Prikaz izhoda

Prikazati morate število sklec, ki jih je program preštel. Natisnite vrednost števca na terminalu vsakič, ko uporabnik naredi popoln skleco. Nazadnje prikažite rezultat osebe, ki dela sklece, z mejniki, narisanimi na njenem telesu.

 natisni (štej)

cv2.imshow("Števec sklecev", cv2.flip (slika, 1))
ključ = cv2.waitKey(1)

# Program se zaključi, ko pritisnete q
če ključ == red('q'):
odmor

cap.release()

Izhod bi moral izgledati nekako takole:

Opazovati morate posodobitev na terminalu, ko oseba na izhodu naredi popoln skleco.

Okrepite svoje sposobnosti računalniškega vida

Računalniški vid je širok. Števec za sklece je eden od mnogih projektov, ki jih lahko uporabite, da svoje sposobnosti računalniškega vida uporabite v praksi. Najboljši način za krepitev teh veščin je izgradnja več projektov, ki vključujejo računalniški vid.

Več projektov kot boste zgradili, več se boste naučili!