Saturday, October 8, 2016

Geweegde bewegende gemiddelde opencv

Glad Images Doelwitte Leer om: Blur imagess met verskeie lae slaag filters toe te pas op maat filters om beelde (2D konvolusie) 2D Konvolusie (Foto Filtering) Soos vir eendimensionele seine, beelde ook kan gefiltreer met verskeie lae-pass filters (LPF ), 'n hoë-pass filters (HPF), ens 'n LPF help in die verwydering van geraas, of vervaag die beeld. A HPF filters help met die vind van kante in 'n beeld. OpenCV bied 'n funksie, cv2.filter2D (). 'n kern met 'n beeld oprollen. As 'n voorbeeld, sal ons probeer om 'n gemiddelde filter op 'n beeld. Filtering met die bogenoemde kern resultate in die volgende verrig: 'n 5x5 gemiddelde filter kern kan as volg gedefinieer word vir elke pixel, is 'n 5x5 venster gesentreer op hierdie pixel, is al pixels wat binne hierdie venster opgesom, en die resultaat is dan gedeel deur 25. dit is gelykstaande aan die berekening van die gemiddelde van die pixel waardes binne die venster. Hierdie operasie is uitgevoer vir al die pixels in die beeld uitset gefiltreer beeld te produseer. Probeer hierdie kode en kyk die resultaat: Image vervaging (Foto Smoothing) Image vervaag word bereik deur convolving die beeld met 'n laaglaatfilter kern. Dit is nuttig vir die verwydering van geraas. Dit verwyder eintlik 'n hoë frekwensie inhoud (bv: geraas, kante) van die beeld wat lei tot rande wat vervaag wanneer dit filter toegepas. (Wel, daar is vervaag tegnieke wat nie kante nie vervaag). OpenCV voorsien hoofsaaklik vier tipes vervaag tegnieke. 1. gemiddeld Dit word gedoen deur convolving die beeld met 'n genormaliseerde boks filter. Dit neem net die gemiddeld van al die pixels onder kern gebied en vervang die sentrale element van hierdie gemiddelde. Dit word gedoen deur die funksie cv2.blur () of cv2.boxFilter (). Kyk op die dokumente vir meer besonderhede oor die kern. Ons moet die hoogte en breedte van kern spesifiseer. 'N 3x3 genormaliseer boks filter sal lyk: As jy don8217t wil 'n genormaliseerde boks filter gebruik, gebruik cv2.boxFilter () en slaag die argument normalizeFalse om die funksie. Kyk op die monster demo hieronder met 'n kern van 5x5 grootte: 2. Gaussiese filter In hierdie benadering, in plaas van 'n boks filter bestaande uit gelyke filter koëffisiënte, word 'n Gaussiese kern gebruik. Dit word gedoen met die funksie, cv2.GaussianBlur (). Ons moet die hoogte en breedte van die kern wat positiewe en vreemd moet wees spesifiseer. Ons moet ook die standaardafwyking in die X en Y rigtings, Sigmax en sigmaY onderskeidelik spesifiseer. Indien slegs Sigmax gespesifiseer, is sigmaY geneem as gelykstaande aan Sigmax. As beide word as nulle, word hulle gereken vanaf die kern grootte. Gaussiese filter is hoogs effektief in die verwydering van Gaussiese ruis van die beeld. As jy wil, kan jy 'n Gaussiese kern te skep met die funksie, cv2.getGaussianKernel (). Bogenoemde kode kan verander word vir Gaussiese vervaging: 3. Mediaan Filtering Hier is die funksie cv2.medianBlur () bere die mediaan van al die pixels onder die kern venster en die sentrale pixel vervang met hierdie mediaanwaarde. Dit is hoogs effektief in die verwydering van sout-en-peper geraas. Een interessante ding om daarop te let is dat, in die Gaussiese en boks filters, die gefilterde waarde vir die sentrale element kan 'n waarde wat nie kan bestaan ​​in die oorspronklike beeld te wees. Dit is egter nie die geval in mediaan filter, aangesien die sentrale element altyd vervang deur 'n paar pixel waarde in die beeld. Dit verminder die geraas effektief. Die kern grootte moet 'n positiewe vreemd heelgetal wees. In hierdie demo, voeg ons 'n 50 geraas om ons oorspronklike beeld en gebruik 'n mediaan filter. Gaan die uitslag: 4. Bilaterale Filtering Soos ons opgemerk, die filters ons vroeër aangebied is geneig om kante te laat vervaag. Dit is nie die geval vir die bilaterale filter, cv2.bilateralFilter (). wat gedefinieer word, maar is hoogs effektief teen geraas verwydering terwyl die behoud van kante. Maar die operasie is stadiger in vergelyking met ander filters. Ons het reeds gesien dat 'n Gaussiese filter neem die 'n woonbuurt in die pixel en vind sy Gaussiese geweegde gemiddelde. Dit Gaussiese filter is 'n funksie van die ruimte alleen, dit wil sê in die buurt pixels beskou terwyl filter. Dit maak nie oorweeg of pixels het byna dieselfde intensiteit waarde en nie oorweeg of die pixel lê op 'n voorsprong of nie. Die gevolglike effek is dat Gaussiese filters is geneig om kante te laat vervaag, wat is ongewens. Die bilaterale filter gebruik ook 'n Gaussiese filter in die spasie domein, maar dit maak ook gebruik van 'n meer (multiplikatiewe) Gaussiese filter komponent wat 'n funksie van pixel intensiteit verskille. Die Gaussiese funksie van ruimte maak seker dat slegs pixels is 8216spatial neighbors8217 kom in aanmerking vir die filter, terwyl die Gaussiese komponent toegepas in die intensiteit domein (a Gaussiese funksie van intensiteit verskille) verseker dat net diegene pixels met intensiteite soortgelyk aan dié van die sentrale pixel ( 8216intensity neighbors8217) is ingesluit om die versteurde intensiteit waarde te bereken. As gevolg hiervan, hierdie metode bewaar kante, want vir pixels lê naby kante, naburige pixels geplaas op die ander kant van die rand, en dus uitstal groot intensiteit variasies in vergelyking met die sentrale pixel, sal nie ingesluit word vir vervaag. Die onderstaande voorbeeld demonstreer die gebruik van bilaterale filter (Vir meer inligting oor die argumente, sien die OpenCV dokumente). Let daarop dat die tekstuur van die oppervlak is weg, maar rand steeds preserved. Smoothing Images Die onderstaande verduideliking behoort aan die boek Computer Vision: Algoritmes en aansoeke deur Richard Szeliski en LearningOpenCV Smoothing. ook bekend as vervaag. is 'n eenvoudige en dikwels gebruikte beeldverwerking werking. Daar is baie redes vir glad. In hierdie handleiding word daar gefokus op glad om geraas te verminder (ander gebruike sal gesien word in die volgende tutoriale). Om 'n glad aksie uit te voer sal ons 'n filter van toepassing op ons beeld. Die mees algemene tipe filters is lineêr. waarin 'n uitset pixel8217s waarde (dit wil sê) is bepaal as 'n geweegde som van insette pixel waardes (dit wil sê): Dit help om 'n filter te visualiseer as 'n venster van koëffisiënte gly oor die beeld. Daar is baie soorte filters, hier sal ons praat van die mees gebruikte: genormaliseerde Box Dit filter is die eenvoudigste van alle Elke uitset pixel is die gemiddelde van sy kern bure (almal bydra met gelyke gewigte) Die kern is hieronder: Gauss filter Waarskynlik die mees bruikbare filter (hoewel nie die vinnigste). Gaussiese filter word gedoen deur convolving elke punt in die insette array met 'n Gaussiese kern en dan optel almal aangemoedig om die uitset verskeidenheid produseer. Net om die prentjie duideliker te maak, onthou hoe 'n 1D Gaussiese kern lyk veronderstelling dat 'n beeld is 1D, kan jy sien dat die pixel geleë in die middel van die grootste gewig sou hê. Die gewig van sy bure daal as die ruimtelike afstand tussen hulle en die sentrum pixel toeneem. Onthou dat 'n 2D Gaussiese kan voorgestel word as: Mediaan Filter Die mediaan filter loop deur elke element van die sein (in hierdie geval die beeld) en vervang elke pixel met die mediaan van die naburige pixels (geleë in 'n vierkantige omgewing rondom die geëvalueer pixel ). Bilaterale Filter Tot dusver het ons 'n paar filters wat hoofdoel is om 'n invoer beeld glad verduidelik. Maar soms die filters nie net los die geraas, maar ook weg glad die kante. Om dit te voorkom (op sekere mate ten minste), kan ons 'n bilaterale filter gebruik. In 'n soortgelyke wyse as die Gaussiese filter, die bilaterale filter is ook van mening die naburige pixels met gewigte aan elkeen van hulle. Hierdie gewigte het twee komponente, waarvan die eerste is die dieselfde gewig wat gebruik word deur die Gauss filter. Die tweede komponent in ag neem die verskil in intensiteit tussen die naburige pixels en die geëvalueer een. Vir 'n meer gedetailleerde verduideliking wat jy kan kyk op hierdie skakel Kode Wat beteken hierdie program doen Loads 'n beeld Pas 4 verskillende soorte filters (verduidelik in teorie) en wys die gefiltreer beelde agtermekaar Verduideliking Let8217s die OpenCV funksies wat slegs die smoothing prosedure behels kyk, aangesien die res is reeds bekend teen hierdie tyd. Genormaliseer Blok Filter: OpenCV bied die funksie vervaag uit te voer glad met hierdie filter. Ons spesifiseer 4 argumente (meer besonderhede, kyk die Verwysingsgroep): src. Bron beeld dst. beeld bestemming Grootte (w, h). Definieer die grootte van die kern te gebruik (met wydte w pixels en hoogte h pixels) Punt (-1, -1). Dui aan waar die anker punt (die pixel geëvalueer) is geleë ten opsigte van die omgewing. As daar 'n negatiewe waarde, dan is die middelpunt van die kern is van mening dat die anker punt. Dit word gedoen deur die funksie GaussianBlur: Hier gebruik ons ​​4 argumente (meer besonderhede, kyk die OpenCV verwysing): 'n Agtergrond aftrek Biblioteek Laaste blad Update: 15/06/2016 Laaste Biblioteek Weergawe: 1.9.2 (sien Release Notes vir meer inligting ) Die BGSLibrary is ontwikkel deur Andrews Sobral en bied 'n maklik-om-te gebruik C raamwerk gebaseer op OpenCV om agtergrond aftrek (BGS) in video's uit te voer. Die BGSLibrary stel onder Linux, Mac OS X en Windows. Tans is die biblioteek bied 37 BGS algoritmes. 'N Groot hoeveelheid algoritmes is verskaf deur 'n paar skrywers. Die bron-kode is beskikbaar onderhewig aan GNU GPL v3 lisensie, die biblioteek is gratis en open source vir akademiese doeleindes. Vir Windows-gebruikers, is 'n demo projek vir Visual Studio 2010/2013 voorsien. 'N uitvoerbare weergawe van BGSLibrary is beskikbaar vir Windows 32 stukkies en 64 stukkies. Vir Linux en Mac-gebruikers, kan 'n makefile gebruik word om al die lêers op te stel. Let wel: die BGSLibrary is gebaseer op OpenCV 2.X, as jy wil gebruik met OpenCV 3.x asseblief check-out ons opencv3 tak. Die PBAS algoritme is verwyder van BGSLibrary want dit is gebaseer op gepatenteerde algoritme vibe. Sommige algoritmes van die bgslibrary is gratis vir kommersiële doeleindes en ander nie. Eerstens moet jy kontak met die outeurs van die gewenste agtergrond aftrek metode en kyk saam met hulle die toepaslike lisensie. Vir meer bykomende inligting, kyk: Kan ek 'n GPLv3 sagteware as 'n deel van my kommersiële toepassing. As jy hierdie biblioteek te gebruik vir jou publikasies, asseblief noem dit as: Sobral, Andrews. BGSLibrary: 'n OpenCV C Agtergrond aftrek Biblioteek. IX Workshop de Viso Computacional (WVC2013), Rio de Janeiro, Brasilië, Junie 2013 (PDF in Brasiliaanse Portugees met Engelse opsomming). Sobral, Andrews Konstruksie Mans, Thierry. BGS Biblioteek: 'n biblioteek Raamwerk vir Algoritmes Evaluering in die voorgrond / agtergrond Segmentering. Hoofstuk oor die handboek Agtergrond Modellering en voorgrond Detection vir Video Surveillance, CRC Press, Taylor en Francis Group, 2014 (PDF in Engels). Sommige algoritmes van die BGSLibrary is suksesvol gebruik in my volgende vraestelle: (2014) Sobral, Andrews Vacavant, Antoine. 'N Omvattende oorsig van agtergrond aftrek algoritmes geëvalueer met sintetiese en werklike video's. Computer Vision en Image Verstandhouding (CVIU), 2014 (Online) (PDF) (2013) Sobral, Andrews Oliveira, Luciano Schnitman, Leizer Souza, Felippe. (Best Paper Award) snelweg verkeersopeenhopings klassifikasie in terme van holistiese Properties. In Internasionale Konferensie oor seinverwerking, Patroonherkenning en Aansoeke (SPPRA2013), Innsbruck, Oostenryk, Februarie 2013 (Online) (PDF) Lys van die algoritmes in BGSLibrary Algoritme naam (klik om die bronkode te sien) Check uit nuutste projek bron kode. Lees die instruksies in README. TXT. Hoe om BGS Biblioteek gebruik in ander C-kode Aflaai nuutste projek bronkode, kopieer packagebgs gids om jou projek en config gids te skep (bgslibrary dit gebruik om XML konfigurasielêers te berg). Vir Windows-gebruikers, is 'n demo projek vir Visual Studio 2010 voorsien. Hoe om 'n bydrae met BGSLibrary projek Almal word uitgenooi met die BGSLibrary projek om saam te werk deur die stuur van 'n implementering van agtergrond aftrek (BS) algoritmes. Sien asseblief die volgende tutoriaal: GitHub / andrewssobral / bgslibrary / blob / Master / docs / bgslibraryhowtocontribute. pdf Volledige lys van BGSLibrary medewerkers Ek wil graag dankie almal wat bygedra het in een of ander manier tot die sukses van hierdie biblioteek, veral die volgende mense (in alfabetiese volgorde): Ahmed Elgammal (VSA), Antoine Vacavant (Frankryk), Benjamin Laugraud (België), Csaba Kertsz (Finland), Domenico Bloisi (Italië), Donovan Parke (Kanada), Eduardo Barreto Alexandre (Brasilië), Fida EL BAF (Frankryk), Iigo Martnez, Jean-Marc Odobez (Switserland), Jean-Philippe CONSTRUCTION (Kanada), JIA Pei (China), Jian Yao (China), Hemang Shah, Holger Friedrich, Laurence Bender (Argentinië), Lionel Robinault (Frankryk), Luca Iocchi (Italië), Luiz Vitor Martinez Cardoso (Brasilië), Martin Hofmann, Philipp Tiefenbacher en Gerhard Rigoll (Duitsland), Rim Trabelsi (Tunisië), Simone Gasparini (Frankryk), Stefano Tommesani (Italië), Thierry Konstruksie Mans (Frankryk), Vikas Reddy (Australië), Yani Ioannou (Kanada), Zhenjie Zhao (China) en Zirkovic (Nederland). Weergawe 1.9.2: Bygevoeg SuBSENSE en KREEF algoritmes van Pierre-Luc et al. (2014). Weergawe 1.9.1: Bygevoeg Sigma-Delta agtergrond aftrek-algoritme (SigmaDeltaBGS) van Manzanera en Richefeu (2004). Weergawe 1.9.0: Bygevoeg 'n nuwe kader vir die agtergrond aftrek Gebruik meerdere leidrade (SJNMultiCueBGS) van SeungJong Noh en Moongu Jeon (2012). Bygevoeg OpenCV 2.4.8 ondersteuning (al afhanklikhede is staties gekoppel). Weergawe 1.8.0: Bygevoeg Onafhanklike Modale Agtergrond aftrek (Imbs) van Domenico Daniele Bloisi (2012). Bygevoeg Adaptive-selektiewe Agtergrond Model Leer. Weergawe 1.7.0: meer tekstuur-gebaseerde Voorgrond Detection met MRF van Csaba Kertsz (2011). Sommige verbeterings en bug fixes. Weergawe 1.6.0: Bygevoeg KDE van A. Elgammal, D. Harwood, L. S. Davis, Nie-parametriese Model vir Agtergrond aftrek ECCV00 (te danke aan Elgammal). Bygevoeg Tekstuur-gebaseerde agtergrond aftrekking van Marko Heikkilä en Matti Pietikainen A-tekstuur gebaseerde metode vir die modellering van die agtergrond en die opsporing van bewegende voorwerpe PAMI06. Bygevoeg OpenCV 2.4.5 ondersteuning, 'n paar verbeterings en bug fixes. Weergawe 1.5.0: Bygevoeg VuMeter van Yann Goyat, Thierry Chateau, Laurent Malaterre en Laurent Trassoudaine (te danke aan Antoine Vacavant). Added OpenCV C MFC App (met bronkode) met behulp van BGS Biblioteek vir Windows-gebruikers. Bygevoeg OpenCV 2.4.4 ondersteuning (al afhanklikhede is staties gekoppel - bye DLLs), 'n paar verbeterings en bug fixes. Weergawe 1.4.0: Bygevoeg PBAS (-pixel gebaseer adaptive Segmenter) van M. Hofmann, P. Tiefenbacher en G. Rigoll. Bygevoeg T2F-GMM met MRF van Zhenjie Zhao, Thierry Konstruksie Mans, Xubo Zhang en Yongchun Fang. (Te danke aan Zhenjie Zhao en Thierry Konstruksie Mans) Bygevoeg GMG van A. Godbehere, A. Matsukawa, K. Goldberg (OpenCV moedertaal). Bygevoeg OpenCV 2.4.3 ondersteuning (al afhanklikhede is staties gekoppel - bye DLLs), 'n paar verbeterings en bug fixes. Weergawe 1.3.0: Bygevoeg fuzzy Sugeno en Choquet Integrale met Adaptive-selektiewe Agtergrond Model Update (danksy Thierry Konstruksie Mans) Voorgrond masker Ontleding opgradering, nou met verskeie Ware Positiewe (TP), True negatief (TN), Vals Positiewe (FP) , vals negatiewe (FN), opsporingskoers, Precision, Fmeasure, akkuraatheid, Vals negatiewe koerse (FNR), vals positiewe koers (FPR), True Positiewe Tempo (TPR) en ROC beelde (te danke aan Thierry Konstruksie Mans) Bygevoeg OpenCV 2.4 ondersteuning Sommige verbeterings, bug fixes. Weergawe 1.2.0: Bygevoeg multi-laag BGS (te danke aan Jian Yao en Jean-Marc Odobez) Bygevoeg Agtergrond aftrek modelle van Laurence Bender (Gewone Gaussiese, fuzzy Gaussiese, mengsel van Gaussians, Adaptive SOM en fuzzy Adaptive SOM) Bygevoeg Voorgrond masker Ontleding (similariteitsmaat) Weergawe 1.1.0: Bygevoeg Type2-fuzzy GMM UM en UV (danksy Thierry Konstruksie Mans) Bygevoeg ondersteuning aan gemiddelde tyd van algoritmes (sien param tictoc in ./config/FrameProcessor. xml) Weergawe 1.0.0 bereken: Eerste stabiele weergawe bygevoeg 14 agtergrond aftrek algoritmes (07 aangepas uit Donovan Parke) Beweging Analise en Object dop CV :: calcOpticalFlowPyrLK nietig calcOpticalFlowPyrLK (const Mat amp prevImg. const Mat amp nextImg. const vectorltPoint2fgtamp prevPts. vectorltPoint2fgtamp nextPts. vectorltuchar gtamp status. vectorltfloatgtamp dwaal. grootte winSizeSize (15. 15), int maxLevel3. TermCriteria criteriaTermCriteria (TermCriteria :: COUNTTermCriteria :: EPS. 30, 0,01), dubbel derivLambda0.5. int flags0) Bereken die optiese vloei vir 'n yl kenmerk stel met behulp van die iteratiewe Lucas-Kanade metode met piramides prevImg 8211 die eerste 8-bit enkel-kanaal of 3-kanaal beeld insette nextImg 8211 die tweede insette beeld van dieselfde grootte en dieselfde tipe as prevImg prevPts 8211 Vector punte waarvoor die vloei moet gevind word nextPts 8211 die uitset vector punte met die berekende nuwe posisies van die insette funksies in die tweede beeld status 8211 die uitset status vektor. Elke element van die vektor is ingestel op 1 indien die vloei vir die ooreenstemmende eienskappe is gevind, 0 anders dwaal 8211 Die uitset vektor wat die verskil tussen kolle rondom die oorspronklike sal bevat en verskuif punte winSize 8211 Grootte van die search venster op elke piramide vlak maxLevel 8211 0-gebaseerde maksimale piramide vlak getal. As 0, is piramides nie gebruik (enkele vlak), as 1, twee vlakke word gebruik ens kriteria 8211 Spesifiseer die beëindiging kriteria van die iteratiewe soekalgoritme (na die gespesifiseerde maksimum aantal iterasies criteria. maxCount of wanneer die search venster beweeg deur minder as criteria. epsilon derivLambda 8211 die relatiewe gewig van die ruimtelike beeld afgeleide impak op die vloei skatting optiese. as derivLambda0. net die beeld intensiteit gebruik word, indien derivLambda1. net afgeleide instrumente word gebruik. Enige ander waardes tussen 0 en 1 beteken dat beide afgeleides en die beeld intensiteit gebruik word (in die ooreenstemmende proporsies) vlae 8211 die operasie vlae:.. die funksie implemente die yl iteratiewe weergawe van die Lucas-Kanade optiese vloei in piramides, sien Bouguet00 CV :: calcOpticalFlowFarnebackMultiple kameras met die Framboos Pi en OpenCV I8217ll hou die inleiding tot post kort today8217s, want ek dink die titel van hierdie post en GIF animasie vir hulself bo praat. Binne hierdie post, I8217ll demonstreer hoe om verskeie kameras heg aan jou Framboos Pi8230 en toegang tot al van hulle gebruik te maak van 'n enkele Python script. Ongeag of jou opstel insluit: Verskeie USB webcams. Of die Framboos Pi kamera module ekstra USB cameras8230 8230the kode uiteengesit in hierdie post sal jou toelaat om toegang te verkry tot al jou video strome 8212 en voer bewegingsdetectie op elkeen van hulle die beste van alles, ons implementering van verskeie kamera toegang met die Framboos Pi en OpenCV in staat is om van die bestuur van in real-time (of naby real-time, afhangende van die aantal kameras wat jy aangeheg), maak dit ideaal vir die skep van jou eie multi-kamera huis toesig stelsel. Hou lees vir meer inligting. Verskeie kameras met die Framboos Pi en OpenCV Wanneer die bou van 'n Framboos Pi opstel van verskeie kameras hefboom, het jy twee opsies: Gebruik eenvoudig veelvuldige USB web cams. Of gebruik 'n Framboos Pi kamera module en ten minste een USB web kamera. Die Framboos Pi raad het net een kamera hawe. sodat jy sal nie in staat wees om verskeie Framboos Pi kamera borde gebruik (tensy jy wil 'n paar uitgebreide hacks om jou Pi voer). So ten einde meerdere kameras heg aan jou Pi, you8217ll moet hefboom ten minste een (indien nie meer) USB kameras. Dit gesê, om my eie multi-kamera Framboos Pi opstel bou, Ek het uiteindelik met behulp van 'n Framboos Pi kamera module kamera behuising (opsioneel). Ons is met die kamera met behulp van die picamera Python pakket of (verkieslik) die gestruktureerde video moontlikheid klas omskryf in 'n vorige blog post. A Logitech C920 webcam wat plug-and-play versoenbaar is met die Framboos Pi. Ons kan hierdie kamera met behulp van die cv2. VideoCapture funksie ingeboude om OpenCV of die video moontlikheid klas van hierdie les. Figuur 1: My veelvuldige kamera Framboos Pi opstel Jy kan 'n voorbeeld van my setup hieronder sien. Hier kan ons my Framboos Pi 2 sien, saam met die Framboos Pi kamera module (sit op die top van die Pi 2) en my Logitech C920 webcam. Die Framboos Pi kamera module is min of meer na my woonstel deur na iemand wat binne en buite gaan monitor, terwyl die USB webcam is wys na die kombuis, die waarneming van enige aktiwiteit wat mag aangaan: Figuur 2: Die Framboos Pi kamera module en USB kamera is albei speler wat aan my Framboos Pi, maar is die monitering van die verskillende gebiede van die kamer. Ignoreer die elektriese tape en karton op die USB kamera 8212 was dit uit 'n vorige eksperiment wat moet (hopelik) word op die PyImageSearch blog gou gepubliseer. Ten slotte, kan jy sien 'n voorbeeld van beide video feeds vertoon om my Framboos Pi in die beeld hieronder: Figuur 3: 'n Voorbeeld kiekie van die monitering van beide video feeds van die verskeie kamera Framboos Pi opstel. In die res van hierdie blog post, we8217ll definieer 'n eenvoudige bewegingsdetectie klas wat kan opspoor indien 'n persoon / voorwerp beweeg in die gebied van die oog van 'n gegewe kamera. We8217ll skryf dan 'n bestuurder Python script wat ons twee video strome instantiates en voer bewegingsdetectie in beide van hulle. Soos we8217ll sien, deur die gebruik van die gestruktureerde video stroomroof klasse (waar een draad per kamera word gewy aan ek voer / O bedrywighede, sodat die hoofprogram draad om voort te gaan geblok), kan ons maklik ons ​​bewegingsmelders vir verskeie kameras uit te voer in real-time op die Framboos Pi 2. Let8217s voort te gaan en te begin met die definisie van die eenvoudige beweging detector klas. Definiëring ons eenvoudige beweging detector In hierdie artikel, we8217ll bou van 'n eenvoudige Python klas wat gebruik kan word om beweging op te spoor in 'n gebied van die oog van 'n gegewe kamera. Vir doeltreffendheid, hierdie klas sal aanvaar daar is net een voorwerp beweeg in die kamera op 'n tyd 8212 in die toekoms blog boodskappe, we8217ll kyk na meer gevorderde bewegingsdetectie en agtergrond aftrek metodes om verskeie voorwerpe op te spoor. Trouens, ons het reeds (gedeeltelik) hierdie bewegingsdetectie metode in ons vorige les, huis toesig en bewegingsdetectie met die Framboos Pi, Python, OpenCV, en Dropbox 8212 ons nou die formalisering van hierdie implementering in 'n herbruikbare klas hersien eerder as om net inline kode. Let8217s te begin met die opening van 'n nuwe lêer, noem dit basicmotiondetector. py. en die toevoeging van die volgende kode: verskeie kameras met die Framboos Pi en OpenCV Oproep cv2. drumpel met behulp van die gegewe waarde van deltaThresh stel ons in staat om die beeld van die delta, wat ons dan kontoere vind in (Lines 37-45) binarize. Nota: Neem spesiale sorg wanneer die ondersoek van Lines 43-45. Soos ons weet, die cv2. findContours metode terugkeer handtekening verander tussen OpenCV 2.4 en 3. Dit codeblock stel ons in staat om cv2 gebruik. findContours in beide OpenCV 2.4 en 3 sonder om 'n reël van die kode verander (of bekommerd wees oor weergawes kwessies). Ten slotte, Lines 48-52 lus oor die bespeur kontoere, kyk om te sien of hul gebied is groter as die verskaf minArea. en indien wel, updates die lys locs. Die lys van kontoere met beweging word dan teruggekeer na die roeping metode op Line 55. Let wel: Weereens, vir 'n meer gedetailleerde oorsig van die bewegingsdetectie algoritme, kan jy sien die huis toesig handleiding. Toegang tot verskeie kameras op die Framboos Pi Noudat ons BasicMotionDetector klas is gedefinieer, ons is nou gereed om die multicammotion skep. py bestuurder script om toegang te verkry tot die verskeie kameras met die Framboos Pi 8212 en toe te pas bewegingsdetectie om elk van die video strome. Let8217s voort te gaan en te begin definieer ons bestuurder script: verskeie kameras met die Framboos Pi en OpenCV Waar die parameter src beheer die indeks van die kamera op jou rekenaar. Let ook daarop dat you8217ll moet webcam en picam vervang met webcam1 en webcam2. onderskeidelik in die res van hierdie skrif so goed. Ten slotte, Lines 19 en 20 instansieer twee BasicMotionDetector 8216s, een vir die USB kamera en 'n tweede vir die Framboos Pi kamera module. Ons is nou gereed om bewegingsdetectie voer in beide video voed: verskeie kameras met die Framboos Pi en OpenCV Ek het 'n reeks van 8220highlight frames8221 in die volgende GIF dat ons multi-kamera beweging detector demonstreer in aksie ingesluit: Figuur 4: 'n Voorbeeld van toepassing van bewegingsdetectie om verskeie kameras met behulp van die Framboos Pi, OpenCV, en Python. Let op hoe ek begin in die kombuis, maak 'n kas, bereik vir 'n beker, en kop na die wasbak om die beker te vul met water 8212 hierdie reeks gebeure en beweging bespeur word op die eerste kamera. Ten slotte, ek kop aan die asblik te gooi uit 'n papierhanddoek voordat die verlaat van die raam siening van die tweede kamera. 'N Volledige video demo van verskeie toegang kamera met behulp van die Framboos Pi kan hieronder gesien: Opsomming In hierdie blog post, het ons geleer hoe om toegang te verkry tot verskeie kameras met behulp van die Framboos Pi 2, OpenCV, en Python. Wanneer toegang tot verskeie kameras op die Framboos Pi, jy het twee keuses wanneer die bou van jou opstel: Óf gebruik verskeie USB webcams. Of die gebruik van 'n enkele Framboos Pi kamera module en ten minste een USB webcam. Sedert die Framboos Pi raad het net een kamera insette, kan jy nie ten minste hefboom verskeie Pi kamera borde 8212 sonder uitgebreide hacks om jou Pi. Met die oog op 'n interessante toepassing van verskeie kamera toegang met die Framboos Pi voorsien, ons het 'n eenvoudige bewegingsdetectie klas wat gebruik kan word om beweging op te spoor in die menings raam van elke kamera gekoppel aan die Pi. Terwyl basiese, hierdie beweging detector getoon dat verskeie toegang kamera in staat is om uitgevoer word in real-time op die Framboos Pi 8212 veral met die hulp van ons gestruktureerde PiVideoStream en video moontlikheid klasse in blog boodskappe geïmplementeer 'n paar weke gelede. As jy belangstel om meer te leer oor die gebruik van die Framboos Pi vir rekenaar visie, saam met ander wenke, truuks, en hacks wat verband hou met OpenCV is, is seker te aanteken vir die PyImageSearch nuusbrief met behulp van die vorm aan die onderkant van hierdie post. Sien julle volgende week te laai: Resource Guide (sy heeltemal gratis). Tik hieronder jou e-posadres my vry 11-bladsy Image Search Engine Resource Guide PDF kry. Ontbloot eksklusiewe tegnieke wat ek nie publiseer op hierdie blog en begin met die bou beeld soek enjins van jou eie Phil 19 Januarie 2016 by 07:32 Hi Adrian, dankie vir nog 'n groot handleiding. Tot nou toe, I8217ve loop OpenCV op my Framboos Pi, aangeteken in die GUI. Ek het probeer om net selflaai die Pi om die konsole plaas en op die bestuur van enige OpenCV projek wat 8216imread8217 gebruik, kry ek 'n GTK fout 8211 8216gtk waarskuwing kan nie oop display8217. I8217ve lees dat dit iets te doen met die X11 server. Het jy al probeer OpenCV wanneer geselflaai in die konsole in plaas van die GUI Eintlik sou ek graag in staat wees om my projek te begin sodra die Pi stewels en gedink dit sou 'n vermorsing van hulpbronne om die GUI wat in die agtergrond wees. Adrian Rosebrock 20 Januarie 2016 by 13:50 Inderdaad, wanneer jy wil om die cv2.imshow metode gebruik, you8217ll nodig om 'n venster bediener loop (soos X11) het. As jy wil 'n Python script op die boot begin en het dit loop in die agtergrond, net kommentaar lewer uit al jou cv2.imshow en cv2.waitKey oproepe en jou program sal net mooi loop. Girish 19 Januarie 2016 by 22:25 Groot werk, Thanks a lot vir die deel van die kode, ek geïmplementeer hierdie kode en dit getoets word. Ek kan sien dit werk, maar ek sien 'n fout boodskap op die opdrag venster is dit net sê 8220select tyd out8221. Kan ons ignoreer dit of is daar 'n manier om dit te BTW op te los het jy sien hierdie fout in jou implementering Adrian Rosebrock 20 Januarie 2016 by 13:48 Ek het nie daardie fout boodskap gesien nie. Dit lyk na 'n I / O verwante fout wees, miskien met Python toegang tot die Framboos Pi kamera Girish 21 Januarie 2016 by 01:58 Dankie vir jou reaksie, ek het die kode wat jy vir 'n lang tyd het gepubliseer en dit werk goed, denke ek sien die boodskap 8221 Select tyd out8221 dit nie blyk te wees wat 'n impak die funksie (kan val rame, maar nie seker) nog dit werk goed met Twee Logictec C170 Webcams. Ek het nie Pi kameras. (Ek is nie seker waarom jy nie hierdie boodskap sien.) Weereens, groot werk, 'n fantastiese post, baie dankie vir die deel van jou kode, sal ek die kode hardloop met meer tyd te integreer my eie beeldverwerking roetines en kyk hoe dit gaan Adrian Rosebrock 21 Januarie 2016 by 17:00 Stil Ek sien die boodskap 8220Select Timeout8221 my wilde dink dit kan wees as gevolg van die bedryfstelsel of die USB / Webcam bestuurders wat op my RPi, kan jy deel watter model van RPi jy gebruik wat Linux beeld wat jy gebruik, sodat ek die presiese setup jy kan herhaal en gee dit 'n probeer Nog 'n verskil wat ek kan dink is, gebruik ek C170 Logitech kamera nie seker dit sal 'n verskil maak of nie Bolkar 20 Januarie 2016 by 02:44 am Dankie vir die baie mooi post. Sou dit moontlik wees om IP kameras Ek het reeds n paar van hulle ontplooi op 'n gereelde DVR gebruik. Dit sou baie interessant wees om hierdie toepassing in 'n IP-opstelling. Adrian Rosebrock 20 Januarie 2016 by 13:43 Amancio 23 Januarie 2016 by 14:16 Hey Adrian, jou meervoudige cameras8211rpi nie die beelde op my monitorhowever vertoon, 'n aparte program om net te vang die beeld en die beeld onmiddellik vertoon gebruik van cv2.imgshow werk nie. Ek kyk rond in die netto en ek het gevalle waar mense het gekla dat cv2.imgshow die venster properly8230 enige idees oor hoekom jou script nie werk nie Dankie Adrian Rosebrock 25 Januarie 2016 Het jy by 16:14 As nie werk gesien jou ander kommentaar genoem, wat jy nodig het om die cv2.waitKey metode, wat die Python script insluit op Line 82. Mike Grainger April 2, 2016 gebruik by 9:40 Hou asseblief aan met hierdie blogs ek vind dit baie leersaam. My vraag, jy 'n verwysing na 'n 8216multi-voorwerp tracking8217 handleiding kom in die toekoms te maak. Ek wil graag 'n voeg tot daardie artikel in die hoop dat dit hoër sal die land op jou prioriteitslys. Aan die einde, jy het 'n idee wanneer jy so 'n artikel Adrian Rosebrock April 3, 2016 Hey Mike 8212 dankie vir suggereer multi-voorwerp dop sal die vrystelling by 10:28. Ek sal 'n handleiding te doen op dit, maar om eerlik te wees, I8217m nie seker presies wanneer dit sal wees. I8217ll seker wees om jou op hoogte te hou Comments soos hierdie help my prioritiseer poste, so dankie vir wat Glenn April 3, 2016 by 01:09 Toe ek hierdie script loop my pi herselflaai. Ek was in staat om beide kamera kry om te draai vir 'n split sekonde, maar dan is die pi gesluit redelik vinnig. Enige idee wat kan aangaan Adrian Rosebrock April 3, 2016 by 10:22 That8217s nogal vreemd, I8217m nie seker wat die probleem is. Dit lyk asof die kameras te veel mag dalk te teken en die Pi is gesluit Jy mag dalk wil om te plaas op die amptelike Framboos Pi forums en kyk of hulle enige voorstelle. William 10 Mei 2016 by 11:05 My konteks isnt presies dieselfde, want ek gebruik die C-koppelvlak van OpenCV, en ek gebruik Linux op 'n rekenaar (maar ek beplan om te gaan op Framboos Pi ná). Ek het 'n probleem met behulp van verskeie kameras al en ek hoop dat jy 'n paar leidrade oor die rede vir wat sou hê. Die probleem is dat ek nie 2 USB kameras gelyktydig kan oopmaak sonder 'n fout van Video4Linux (die Linux8217s API vir webcams, wat OpenCV staatmaak op, of so het ek verstaan). Het jy enige leidrade Adrian Rosebrock 10 Mei 2016 by 18:22 Hey William, dankie vir die kommentaar. I8217ve nooit probeer om die C-koppelvlak gebruik om toegang te verkry tot verskeie kameras voordat, sodat I8217m ongelukkig nie seker wat die fout is. Maar dit lyk asof dieselfde logika moet aansoek doen. Jy moet in staat wees om twee afsonderlike verwysings te skep, waar elke dui op die verskillende USB kamera src. James 25 Mei 2016 by 16:31 I8217m 'n probleem te installeer cv2. Ek het OpenCV geïnstalleer, maar cv2 nog nie gevind kan word op die Pi. Enige voorstelle Adrian Rosebrock 27 Mei 2016 by 13:36 Verwys asseblief na die 8220Troubleshooting8221 afdeling van hierdie post vir meer inligting oor die opsporing van jou OpenCV installeer.


No comments:

Post a Comment