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.
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!