- Подешавање Распберри Пи-а са Бустером и ОпенЦВ-ом
- Додавање зујалице на Распберри Пи 5Инцх екран
- Програмирање Распберри Пи за ЦЦТВ откривање покрета
- Откривање покрета на ОпенЦВ помоћу Распберри Пи
- Подешавање аларма за откривање покрета
- Надгледање температуре и употребе ЦПУ-а
- Покретање вашег Пи ЦЦТВ детектора покрета
ОпенЦВ је моћан алат који у комбинацији са Распберри Пи може отворити врата многим преносним паметним уређајима. У нашем претходном чланку о надзору за Распберри Пи ЦЦТВ, научили смо како да снимимо ЦЦТВ видео уживо са ДВР-а помоћу РТСП-а и прикажемо на Распберри Пи, проверите то пре него што наставите. У овом чланку ћемо научити како да искористимо снагу ОпенЦВ-а и изградимо систем за откривање покрета Распберри Пи на нашим видео снимцима уживо. Ако немате инсталиран ЦЦТВ, и даље можете да направите Распберри Пи надзорни систем тако што ћете директно повезати УСБ камере на свој Пи. А ако нисте велики љубитељ Пи-а и Питхона-а, можете да направите нешто слично са ЕСП32-ом, погледајте ЕСП32 Ви-Фи-звоно за врата за више детаља.
Написаћемо питхон скрипту која може истовремено надгледати све четири ЦЦТВ камере за било какве активности (покрете). Ако се на било којој камери открије активност, наша Распберри Пи ће се аутоматски променити у тај екран камере и истакнути која се активност одвијала, све то у реалном времену са само 1,5 секунде кашњења. Такође сам додао функцију аларма, попут зујалице, која може упозорити корисника звучним сигналом ако се открије нека активност. Али ово можете лако прилагодити тако да пошаљете поруку или е-маил или шта већ не! Узбудљиво право !! Хајде да почнемо
Подешавање Распберри Пи-а са Бустером и ОпенЦВ-ом
Користим Распберри Пи 3 Б + са оперативним системом Бустер, а верзија ОпенЦВ-а је 4.1. Ако сте потпуно нови, следите упутства у наставку пре него што започнете.
Циљ је да ваш Пи буде спреман за развој. У реду је имати било коју верзију Распбиан ОС-а на Пи-у, али уверите се да је верзија ОпенЦВ-а 4.1 или новија. Можете пратити горњи водич да бисте саставили свој ОпенЦВ који ће потрајати сатима, али је поузданији за тешке пројекте или га једноставно инсталирати директно из пипа користећи следеће наредбе.
$ пип инсталирајте опенцв-цонтриб-питхон == 4.1.0.25
Ако први пут инсталирате ОпенЦВ са пипом, морате да инсталирате и остале зависности. За то користите наредбе у наставку.
$ судо апт-гет инсталл либавцодец-дев либавформат-дев либсвсцале-дев либв4л-дев $ судо апт-гет инсталл либквидцоре-дев либк264-дев $ судо апт-гет инсталл либатлас-басе-дев гфортран $ судо апт-гет инсталл либхдф5- дев либхдф5-сериал-дев либхдф5-103 $ судо апт-гет инсталл либктгуи4 либктвебкит4 либкт4-тест питхон3-пикт5
Већ смо изградили многе пројекте Распберри Пи ОпенЦВ, можете то да погледате и за још инспирација.
Додавање зујалице на Распберри Пи 5Инцх екран
С хардверске стране, осим дисплеја од 5 инча и зујалице, немамо много више. Након повезивања 5-инчног екрана са Распберри Пи, можемо директно монтирати зујалицу на задњу страну екрана која нам је проширила неке ГПИО пинове. Повезао сам звучни сигнал као што је приказано доле -
Ако сте заинтересовани за коришћење више И / О пинова, тада ће вам бити користан опис пин-а у наставку. Као што можете видети међу продуженим чиодама, већину пинова сам екран користи за интерфејс екрана осетљивог на додир. Али ипак, имамо пинове 3,5,7,8,10,11,12,13,15,16 и 24 који немају везу и можемо их користити за сопствену апликацију. У овом упутству сам повезао зујалицу на ГПИО 3.
Програмирање Распберри Пи за ЦЦТВ откривање покрета
Комплетна питхон скрипта за овај пројекат налази се на дну ове странице, али хајде да разговарамо о сваком сегменту кода да бисмо разумели како то функционише.
Надгледање вишеструких камера без закашњења на Распберри Пи помоћу РТСП-а
Изазовни део у обављању овог посла био је смањење оптерећења Распберри пи како би се избегло заостајање у стримовању. У почетку сам покушао да пребацим између све четири камере како бих тражио покрет, али било је врло заостало (око 10 секунди). Тако сам објединио све четири камере у једну слику и обавио све активности детекције покрета на тој слици. Написао сам две функције, наиме, стварање камере и читање камере.
Функција креирања камере користи се за отварање камере са одговарајућим бројем канала. Имајте на уму да се УРЛ РТСП-а завршава са „02“, што значи да користим видео фид под-стрима који ће бити ниске резолуције и стога бржи за читање. Такође, врста видео кодека који такође доприноси брзини. Експериментисао сам са различитим кодовима и открио да је ФФМПЕГ постили.
деф цреате_цамера (цханнел): ртсп = "ртсп: //" + ртсп_усернаме + ":" + ртсп_пассворд + "@" + ртсп_ИП + ": 554 / Стреаминг / цханнелс /" + цханнел + "02" #промените ИП како одговара твој цап = цв2.ВидеоЦаптуре (ртсп, цв2.ЦАП_ФФМПЕГ) цап.сет (3, цам_видтх) # ИД број за ширину је 3 цап.сет (4, цам_хеигхт) # ИД број за висину је 480 цап.сет (10, 100) # ИД број за осветљеност је 10 повратних слова
У функцији очитавања камере очитаћемо све четири камере, наиме цам1, цам2, цам3 и цам4 да бисмо их све објединили у једну слику која се зове Маин_сцреен . Једном када је овај главни екран спреман, обавићемо све своје ОпенЦВ радове на овој слици.
деф реад_цамера (): суццесс, цуррент_сцреен = цам1.реад () Маин_сцреен = цуррент_сцреен суццесс, цуррент_сцреен = цам2.реад () Маин_сцреен = цуррент_сцреен успех, цуррент_сцреен = цам3.реад () Маин_сцреен = цуррент_сцреен успех, цуррент_сцреен = цам4.реад Маин_сцреен = повратак тренутног_екрана (Маин_сцреен)
Слика на главном екрану са све четири комбиноване камере изгледаће као слика приказана доле.
Откривање покрета на ОпенЦВ помоћу Распберри Пи
Сада када имамо слику спремну, можемо почети са нашом детекцијом покрета. Унутар вхиле петље започињемо читањем два различита оквира, наиме фраме1 и фраме2, а затим их претварамо у сиве нијансе
фраме1 = реад_цамера () # Прочитајте први кадар граиИмаге_Ф1 = цв2.цвтЦолор (фраме1, цв2.ЦОЛОР_БГР2ГРАИ) # Претвори у сиви фраме2 = реад_цамера () #Прочитајте други кадар ГраиИмаге_Ф2 = цв2.цвтЦолор (фраме2, цв2.ГОРИ)
Затим направимо разлику између обе слике да бисмо видели шта се променило и са прагом групишемо сва места која су се променила, некако попут мрље. Такође је уобичајено замућивање и ширење слике како би се избегле оштре ивице.
диффИмаге = цв2.абсдифф (греиИмаге_Ф1, греиИмаге_Ф2) # гет тхе дистинранце --тхис цоол блурИмаге = цв2.ГауссианБлур (диффИмаге, (5,5), 0) _,ресхолдИмаге = цв2.тхресхолд (блурИмаге, 20,255, цв2.ТХРЕСХ) дилатедИмаге = цв2.дилате (прагИмаге, кернал, итерације = 5)
Следећи корак је пронаћи бројаче и проверити површину сваког бројача, проналазећи површину, можемо схватити колики је покрет. Ако је површина већа од наведене вредности у променљивој мотион_детецтед , тада то сматрамо активношћу и нацртамо оквир око промене да бисмо је истакли кориснику.
цонтоурс, _ = цв2.финдЦонтоурс (дилатедИмаге, цв2.РЕТР_ТРЕЕ, цв2.ЦХАИН_АППРОКС_СИМПЛЕ) #финд цонтоур је магична функција за контуре у контурама: # за сваку откривену промену (к, и, в, х) = цв2.боундингРецт (контура) # прибави локацију на којој је пронађена промена ако је цв2.цонтоурАреа (контура)> праг_кретања: цв2.рецтангле (фраме1, (к, и), (к + в, и + х), (255, 255, 0), 1) дисплаи_сцреен = финд_сцреен ()
Функција финд_сцреен () користи се за проналажење места одвијања активности међу четири камере. То можемо пронаћи пошто знамо к и и вредности кретања. Упоређујемо ове вредности к и и са локацијом сваког екрана да бисмо пронашли који је екран дао активност и поново обрежемо тај одређени екран, тако да га можемо приказати на пи додирном екрану.
деф финд_сцреен (): иф (к <ширина_камери): иф (и <висина_камери): сцреен = фраме1 принт ("Ацтивити ин цам сцреен 1") елсе: сцреен = фраме1 принт ("Ацтивити ин цам сцреен 2") елсе: иф (и <висина_камери): сцреен = фраме1 принт ("Ацтивити ин цам сцреен 3") елсе: сцреен = фраме1 принт ("Ацтивити ин цам сцреен 4") повратак (екран)
Подешавање аларма за откривање покрета
Једном када сазнамо на ком екрану се детектује кретање, лако је додати било који тип аларма који нам је потребан. Овде ћемо огласити звучни сигнал повезан са ГПИО 3. Израз иф проверава да ли је покрет откривен на екрану 3 и повећава променљиву која се назива триг_аларм . Можете открити било који екран по вашем избору или чак на више екрана.
иф ((к> ширина_камба) и (и
Ако вредност триг_аларм достигне више од 3, једном ћемо огласити звучни сигнал. Разлог за ово бројање је тај што сам понекад приметио како сенке или птице стварају лажни аларм. Тако ћемо на овај начин добити само аларм ако имамо континуирану активност током 3 кадра.
иф (триг_аларм> = 3): # сачекајте наставак 3 покрета # Звук звучника ГПИО.излаз (БУЗЗЕР, 1) тиме.слееп (0.02) ГПИО.оутпут (БУЗЗЕР, 0) триг_аларм = 0
Надгледање температуре и употребе ЦПУ-а
Систем је увучен да ради 24к7, па се Пи може јако загрејати, па сам одлучио да надгледам температуру и употребу процесора приказивањем тих вредности на екрану. До ових података смо дошли помоћу библиотеке гпиозеро.
цпу = ЦПУТемпературе () лоад = ЛоадАвераге () цпу_температуре = стр ((цпу.температуре) // 1) лоад_авераге = стр (лоад.лоад_авераге) #принт (цпу.температуре) #принт (лоад.лоад_авераге) цв2.путТект (дисплаи_сцреен, цпу_температуре, (250,250), цв2.ФОНТ_ХЕРСХЕИ_СИМПЛЕКС, 0,4, (0,0,255), 1) цв2.путТект (дисплаи_сцреен, лоад_авераге, (300,250), цв2.ФОНТ_ХЕРСХЕИ_СИМПЛЕКС, 0,4, (0,255,0), 2)
Покретање вашег Пи ЦЦТВ детектора покрета
Тестирао сам ово данима да скупим и то ради сваки пут и било је заиста забавно док нисам оштетио једну камеру,