Можете користити многе пројекте да ојачате своје вештине у компјутерском виду и Питхон-у. Један од ових пројеката је креирање једноставног бројача за склекове користећи Питхон. Програм овог пројекта можете написати у једној датотеци.
Програм ће узети видео улаз или улаз у реалном времену са камере, извршити процену људске позе на улазу и избројати број склекова које особа ради. Да би извршио процену људске позе, програм ће користити МедиаПипе модел процене људске позе.
Реч је о моделу који је развио Гугл и који прати тридесет три обележја на људском телу. Такође предвиђа сегментацију целог тела коју представља као двокласну сегментацију. Следећа слика приказује све оријентире које модел може да идентификује. Нумерисане тачке идентификују сваки оријентир и повезују се једна са другом линијама.
Ваш програм бројача за склекове ће користити положаје рамена и лактова. На горњој слици, оријентири рамена су 11 и 12, док су оријентири на лакту 13 и 14.
Подешавање вашег окружења
Требало би да сте већ упознати са основе Пајтона. Отворите Питхон ИДЕ и креирајте нову Питхон датотеку. Покрените следећу команду на терминалу да бисте инсталирали одговарајуће пакете у вашем окружењу:
пип инсталл ОпенЦВ-Питхон
Користићете ОпенЦВ-Питхон да узмете видео улаз у свом програму и обрадите га. Ова библиотека даје ваш програм способности компјутерског вида.
пип инсталирај МедиаПипе
Користићете МедиаПипе да извршите процену људске позе на улазу.
пип инсталл имутилс
Користићете имутил да промените величину видео улаза на жељену ширину.
Увезите три библиотеке које сте претходно инсталирали у свом окружењу. Ово ће омогућити да се њихове зависности користе у пројекту.
увоз цв2
увоз имутилс
увоз медиапипе као мп
Затим креирајте три МедиаПипе објекта и иницијализујте их користећи одговарајуће функције. Користићете мп.солутионс.дравинг_утилсфунцтион да нацртате различите оријентире на улазу. мп.солутионс.дравинг_стилес да промените стилове у којима се појављују цртежи оријентира и мп.солутионс.посе који је модел који ћете користити да идентификујете ове оријентире.
мп_драв = мп.солутионс.дравинг_утилс
мп_драв_стилес = мп.солутионс.дравинг_стилес
мп_посе = мп.солутионс.посе
Извођење процене људске позе
Откривање позе човека је процес идентификације оријентације његовог тела идентификацијом и класификацијом њихових зглобова.
Декларисање ваших променљивих
Наведите варијабле које ћете користити за чување броја склекова, положаја рамена и лактова и видео улаза.
цоунт = 0
позиција = Ниједан
цап = цв2.ВидеоЦаптуре("в4.мп4")
Иницијализујте променљиву позиције на Ништа. Програм ће га ажурирати у зависности од положаја лактова и рамена.
Позовите МедиаПипе модел процене позе који ће детектовати позу човека у улазу.
са мп_посе. поза(
мин_детецтион_цонфиденце = 0.7,
мин_трацкинг_цонфиденце = 0.7) као поза:
Иницијализације поузданости детекције и поузданости праћења представљају ниво тачности који вам је потребан од модела. 0,7 је слично прецизности од 70%. Можете га променити на жељени ниво.
Узимање и претходна обрада улаза
Узмите улаз који ћете касније проследити моделу процене позе. Промените ширину видео улаза користећи имутил библиотеку. Конвертујте улаз из БГР у РГБ јер МедиаПипе ради само са РГБ улазом. На крају, проследите конвертовани унос у модел процене људске позе да бисте идентификовали оријентире.
док цап.исОпенед():
успех, имаге=цап.реад()аконе успех:
штампа ("празна камера")
пауза
слика = имутилс.ресизе (слика, ширина=500)
слика = цв2.цвтЦолор (цв2.флип (слика, 1), цв2.ЦОЛОР_БГР2РГБ)
резултат = поза.процес (слика)
Након обраде уноса, идентификовали сте оријентире на улазу.
Цртање идентификованих оријентира на улазу
Направите празну листу која ће чувати координате сваког оријентира. Користите класу драв_ландмаркс да нацртате тачку на сваком оријентиру и везама између њих. Користећи фор петљу, пређите преко оријентира и сачувајте ИД и координате сваког оријентира на листи коју сте креирали. Користите класу имаге.схапе да бисте израчунали ширину и висину видео улаза.
лмЛист = []
ако ресулт.посе_ландмаркс:
# Црта тачке оријентира и повезује их
мп_драв.драв_ландмаркс (имаге, ресулт.посе_ландмаркс,
мп_посе. ПОСЕ_ЦОННЕЦТИОНС)за ид, им ин наброји (ресулт.посе_ландмаркс.ландмарк):
# Проналажење дужине и ширине видео улаза
х, в, _ = слика.облик
# Проналажење тачних координата тачака тела
Кс, И = инт (им.к * в), инт (им.и * х)
лмЛист.аппенд([ид, Кс, И])
ИД је број који је дат одређеном оријентиру од стране МедиаПипе модела за процену положаја. Након што сте идентификовали позу човека у уносу, морате да избројите број склекова који раде ако их има.
Бројање броја склекова
Направите услов који проверава положај рамена у односу на положај лактова. Када су рамена особе у инпуту виша од лактова, особа је подигнута. Када су рамена нижа од лактова, особа је доле. Ово проверите тако што ћете упоредити ИД обележја рамена са обележјима лактова.
# Провера да ли постоје идентификовани оријентири
ако лен (лмЛист) != 0:
# Стање које идентификује доњу позицију
ако (лмЛист[12][2] и лмЛист[11][2] >= лмЛист[14][2] и лмЛист[13][2]):
позиција = "доле"
# Услов који идентификује горњу позицију
ако (лмЛист[12][2] и лмЛист[11][2] <= лмЛист[14][2] и лмЛист[13][2])
и позиција == "доле":
позиција = "горе"
цоунт +=1
Да би особа извршила један пун склек, мора заузети доњи положај, а затим се вратити у горњи положај. Након потпуног склека, програм може ажурирати број за један.
Приказ излаза
Потребно је да прикажете број склекова које је програм избројао. Одштампајте вредност бројања на терминалу, сваки пут када корисник уради потпуни склек. На крају, прикажите резултат особе која ради склекове са оријентирима нацртаним на њеном телу.
штампа (број)
цв2.имсхов("Склекови", цв2.флип (слика, 1))
кључ = цв2.ваитКеи(1)# Програм се прекида када се притисне к
ако кључ == орд('к'):
пауза
цап.релеасе()
Излаз би требао изгледати отприлике овако:
Требало би да посматрате ажурирање на терминалу док особа на излазу ради потпуни склек.
Ојачајте своје вештине компјутерског вида
Компјутерски вид је широк. Бројач за склекове је један од многих пројеката које можете користити да примените своје вештине компјутерског вида у пракси. Најбољи начин да се ојачају ове вештине је изградња више пројеката који укључују компјутерску визију.
Што више пројеката изградите, више ћете научити!