Budapesti Műszaki Főiskola – Neumann János Informatikai Kar Informatikai és Automatizált Rendszerek szakirány
Közúti Forgalomfigyelő Rendszer (A1Build4) Dokumentáció
Kun Attila József Konzulens: Vámossy Zoltán
2008
Kun Attila József
1.
BMF-NIK, IAR
KFFR Project
Célkitűzés
Egy olyan gépi látás alapú valós idejű forgalomfigyelő rendszert szeretnék megvalósítani, amelynek főbb képességei a következők:
2.
valamilyen videó forrásból (rögzítő eszköz, vagy fájl) érkező képfolyamon detektálja a járműveket, képes forgalomszámlálásra, a járműveket osztályozza méretük alapján, ezzel különböző kimutatások végezhetők adott hely forgalmáról, leolvassa a rendszámokat és azokat eltárolja.
A megvalósításhoz használt eszközök-modulok
A projekt nagy része Microsoft Visual C# fejlesztőkörnyezetben készül, használatával egyszerűen és gyorsan megvalósítható a grafikus felület és a legtöbb programrész. A videók kezelésére Microsoft DirectShow-t használok, a NETMaster(Thomas Scheidegger) által kifejlesztett DShowNet wrapperen keresztül, valamint az általam kifejlesztett DSVideo modulon keresztül, mely ugyanazt a kényelmes felhasználást biztosítja a fájlból és a rögzítő eszközről történő feldolgozáshoz. A képfeldolgozáshoz a rendszer az Intel OpenCV könyvtárát használja Nagy Attila, szakirányos kollégám DirectCV nevű wrapperén keresztül, valamint Microsoft Visual C++ környezetben készítettem egy külön DLL-t, ami egyelőre BG kódnéven fut, egyetlen feladata van egy az OpenCV-ben megvalósított, háttér szegmentációhoz kapcsolódó típushoz, és függvényekhez való hozzáférés biztosítása.
3.
A rendszer felépítése
A rendszer a következő alrendszerekből épül fel (narancssárga = nincs még megvalósítva):
1. ábra – Alrendszerek
2
Kun Attila József
BMF-NIK, IAR
KFFR Project
3.1 Videó alrendszer
2. ábra - A Videó alrendszer felépítése
A program videó forrásként rögzítő eszközt, illetve fájlt kínál fel:
3. ábra - Videó forrás kiválasztása
3
Kun Attila József
BMF-NIK, IAR
KFFR Project
A 3. ábrán, balról jobbra, fentről lefele sorrendben: az első képen a forrás kiválasztása történik a fájl menüből; a második képen, ha a rögzítő eszközt választottuk, akkor egy ablakban ezek megjelennek számunkra, ha több eszközünk van; majd a harmadik képen látható ablakban a képfolyam különböző paraméterei állíthatók be; ha a fájlmenüből fájlt választottunk forrásként, akkor utolsó képen lévő fájlmegnyitó ablak jelenik meg. A bejövő képkockát egy eseménytől kapjuk meg, valójában nem is magát a képkockát csak az aktuális képkocka kezdőcímét a memóriában, majd ezt alakítom át OpenCV-s képformátumra. Utóbbi képkockát lemásolom és eltárolom későbbi feldolgozás céljából, melyet majd a Rendszámfelismerő alrendszer dolgoz fel. Mielőtt továbbítanám a bejövő képet a Mozgásérzékelő alrendszernek, az eredeti képkocka felbontását 320x240-es felbontásra interpolálom a gyorsabb feldolgozás érdekében.
3.2 Mozgásérzékelő alrendszer
4. ábra - Mozgásérzékelő alrendszer vázlatos felépítése
Ez az alrendszer megkapja a Videó alrendszertől az aktuális képkockát, azt kezdetben egy inicializáló rész dolgozza fel majd később utóbbit felváltja a detektáló rész, ezután tovább lehet küldeni a Megjelenítésért felelős alrendszernek. Mielőtt leírnám bővebben, hogy hogyan is működik ez az alrendszer, kitérnék a mozgás detektálás módszerére, hogy értsük az Inicializálás és Detektálás jelentését. Mozgást detektálni sokféleképpen lehet, minden módszernek megvan a maga előnye és hátránya. Én a mozgásdetektáláshoz statisztikai alapú módszert használok, ezek közül is a Gauss-féle keverési modellt (S. Nadimi, B. Bhau: PAMI Vol. 26, August 2004, Physical Models for Moving Shadow and Object Detection in Video) alkalmazom a háttér szegmentálására, ezzel dinamikus hátteret kialakítva. Ez a módszer minden pixelt külön folyamatként kezel, egy képpont közelmúltbeli értékeit – természetesen minden színcsatornára külön-külön – g db normális eloszlású függvény keverékeként ábrázolja. A háttérszegmentáló módszer azon alapul, hogy megnézi, hogy mennyi a valószínűsége annak, hogy adott pixel háttér pixel, ezt a következő képlettel lehet felírni: . A képletben
jelöli a normális eloszlású függvényt, melynek paraméterei: az aktuális pixel ,
az átlagértéket,
pedig a kovarianciát. Ezután
-t súlyozzuk valamilyen
jelöli
-vel. A módszer
implementálva van az OpenCV CVAux részében, ezért magát a technikát nem kellett megírni, csak a BG.dll wrapper könyvtárat. Mivel ezek a számítások nagyon időigényesek ezért nem lehet őket minden képkockára használni, valamint nem is célszerű, mert az egyéb mellékhatásokkal jár, pl. dugók esetén elkezdenek az autók is a háttérhez tartozni. Ez az egyik ok, amiért szükség van az 4
Kun Attila József
BMF-NIK, IAR
KFFR Project
Inicializálás részre, a másik ok pedig a hardver miatt van – kell egy kis idő, amíg a kamera a fényerősséget beállítja. A háttér szegmentáció azt eredményezi, hogy egyszerűen eltűnnek a mozgó objektumok a képről csak a statikus háttér marad. 3.2.1 Inicializálás Ebben a részben a Mozgásérzékelő alrendszer Inicializálás részét fejteném ki.
5. ábra - Mozgásérzékelés/Inicializálás
Konstans 100 képkocka kamera fényerősség beállítási időt választottam, ekkor a rendszer gyakorlatilag csak megjeleníti az aktuális képkockákat. Miután letelt a 100 képkockányi idő a 101. képkocka fogja inicializálni a háttérmodellt, az ezt követő képkockák csak frissítik azt, mindaddig, amíg a le nem telik még 99 képkocka, innentől a felhasználó amint megnyomja a detektálás gombot, véget ér az Inicializálás fázis.
6. ábra - Háttérmodell inicializálása/frissítésének folyamata
A háttérmodelltől a BG.dll-n keresztül lekérdezem a háttérképet, innentől az bekerül a rendszerbe. A sebesség érdekében, csak mutatókkal dolgozok. 3.2.2 Detektálás A Mozgásérzékelő alrendszer Detektálás fázisa sokkal összetettebb, mint az Inicializálás. Ebben a részben a rendszer csak időnként frissíti a hátteret, plusz emellett elvégzi a mozgások detektálását (8. ábra). A következő ábra a beállítások ablakot mutatja be, mellyel ez a fázis paraméterezhető.
5
Kun Attila József
BMF-NIK, IAR
KFFR Project
7. ábra - Beállítások ablak
8. ábra - Mozgásérzékelés/Detektálás
Mivel az árnyék eltávolító rész még nincs megírva, így az aktuális képkockából vonom ki a háttérképet, ezzel megkapom a háttértől való eltérést. A kivonás eredményét szürkeárnyalatos képpé konvertálom, majd ezt küszöbölöm (zajszint beállítások ablakban állítható). Minél zajosabb a kép annál nagyobbra kell állítani a küszöböt. Ezután végrehajt egy Opening és egy Closeing morfológiai szűrőt, ezzel is csökkentve a még megmaradt kisebb zajokat és az esetleges szétvágásokat összenöveszti.
9. ábra - Morfológiai szűrők után
A morfológiai szűrők után már meg lehet határozni az egyes objektumokat, ehhez a Firorio Összefüggő komponens kereső algoritmus módosított változatát használom, mely Union-Find 6
Kun Attila József
BMF-NIK, IAR
KFFR Project
adatstruktúrát, valamint döntési fát használ a sebesség növelése érdekében (Kesheng Wu, Ekow Otoo, Kenji Suzuki: http://crd.lbl.gov/~kewu/ps/LBNL-59102.pdf). Ebbe az algoritmusba beágyaztam egy méret szűrőt, ezzel ki lehet szűrni pl. az embereket, egyéb kisebb mozgó objektumokat (minimális objektumméret), és ugyanez végzi az egyes objektumok behatárolását (bal-felső és jobbalsó sarok), ezzel információt szolgáltatva a mozgó járművek téglalapokkal való jelölésére. További lehetősége a programnak, hogy maszkolható az a terület, ahol érzékelni szeretnénk a mozgást, így csak ott fut le az utóbbi algoritmus.
3.3 Megjelenítésért felelős alrendszer Ez az alrendszer felelős a felhasználói felületért és az egyes alrendszerek által feldolgozott képek és egyéb információk megjelenítéséért.
10. ábra - Megjelenítésért felelős alrendszer
Mivel eddig csak a Mozgásérzékelő alrendszer készült el csak ennek az eredményét tudja megjeleníteni az alrendszer.
11. ábra - Eredmény kép
7
Kun Attila József
BMF-NIK, IAR
KFFR Project
3.3.1 GUI
12. ábra – Főablak
A főablak menüvel rendelkezik, ez egyelőre három menüpontot jelent a Fájl, Nézet, Eszközök menüpontokat. A legnagyobb területet az eredménykép foglalja el, alatta található a Detektálás gomb, mely a 200 képkocka után válik aktívvá. Van még egy Szünet gomb is, ez fájlok esetén alkalmazható csak - szüneteltetni lehet vele a feldolgozást. Alul a státusz sorban megjelenítem a videó forrását, hogy Inicializálás vagy Detektálás fázis van-e folyamatban, az eddig feldolgozott képkockák számát és a képkocka feldolgozási idejét milliszekundumban. A Fájl menüben a fentebb ismertetett módon lehet betölteni a videót. A program három nézetet különböztet meg, melyeket a Nézet menüpontból lehet kiválasztani: Háttér, Binarizált, Maszk.
13. ábra - Nézetek
8
Kun Attila József
BMF-NIK, IAR
KFFR Project
A Háttér nézet megmutatja az aktuális szegmentált hátteret a felhasználónak, segítségével el lehet dönteni Inicializálás fázisban, hogy elég jó-e már a háttér, segít a paraméterezésben. A Binarizált nézet csak a Detektálás fázisban működik, a rajta látható objektumokat keretezi be a szoftver az eredeti képen, segítséget nyújt a beállítások finomhangolásában. A Maszk nézet tulajdonképpen nem egy egyszerű nézet, mert ebben lehet megadni azt a területet, ahol a Mozgásérzékelő alrendszer érzékeli a mozgásokat. Egyszerűen, ha rákattintunk a képre, megjelenik egy piros telített négyzet, a négyzetek segítségével kifeszítünk egy poligont, melynek belsejében vesszük csak figyelembe a mozgásokat. Ez azért jó, nekünk, mert pl. ha nem szeretnénk figyelembe venni a másik irányból jövő autókat, ha egy folyó is látható a képen, esetleg az út széle tele van fákkal, ezek, ha benne maradnának az érzékelési területben hibás mozgásdetektáláshoz vezetnének. A négyzetek elhelyezkedésének megváltoztatása ugyanolya egyszerű, mint az lerakásuk, újból rájuk kattintva törlődnek és máris máshova tehetünk egy újat.
14. ábra - Nézetek balról jobbra: Háttér, Binarizált, Maszk
Az Eszközök menüben finomhangolni lehet a rögzítő eszközt – ebben az esetben az eszköz tulajdonságlapja jelenik meg csak akkor aktív, ha rögzítő eszközt választottunk videó forrásként – a Beállítások menüpontban pedig a program paraméterein változtathatunk.
15. ábra - Eszközök menü
9
Kun Attila József
BMF-NIK, IAR
KFFR Project
16. ábra - Eszközök menüpontból megnyitható ablakok: Rögzítő eszköz beállításai (bal), Beállítások (Jobb)
4.
Problémák
Mivel a szoftver aktuális verziója egy köztes verzió, a fent említett alrendszerek hiánya mellett, csak bizonyos megkötések mellett, illetve problémákkal együtt használható. Főbb problémák:
Mivel nincs még megoldva az árnyékok leszedése, azok miatt összenövések keletkezhetnek. A háttérmodell nem boldogul az erősen tükröződő felületekkel, pl. esős időben vizes út. Ha a megvilágítás hirtelen változik, az megint csak problémához vezethet. Gyengébb teljesítményű gépek esetén problémát jelenthet a háttér frissítése. A nézetek aktiválása, többlet processzor időt igényel. Nagy objektumszám lassabb feldolgozási időt eredményez.
A fenti problémákon kívül, azonban pozitívumként lehet említeni a működés során megfigyelt stabil memória, illetve processzorhasználatot.
5.
Tesztelés
A teszteléshez a Notebookomat használtam (Acer Aspire 5310), melynek főbb paraméterei:
Intel Celeron M processor 530 (1,73 GHz, 533 MHz FSB, 1MB L2 cache) Intel Graphics Media Accelerator 950 2 GB DDR2
10
Kun Attila József
BMF-NIK, IAR
KFFR Project
A tesztelést nagyrészt videó fájlokon végeztem, melyeket az internetről töltöttem le, illetve én rögzítettem őket. Eredmények: Videó
Felbontás/fps
tI
tD
Problémák
320x240 15 fps
43,37 ms
8,97 ms
összenövések árnyék
640x480 30 fps
44,53 ms
9,30 ms
-
1280x1024 15 fps
45,11 ms
14,20 ms
árnyék
tI: Átlagos Inicializálási idő/képkocka tD: Átlagos Detektálási idő/képkocka Külső helyszínen is végeztem egy tesztet ekkor a rendszert több mint 20 percig teszteltem, melysorán tökéletesen működött, kisebb hibáktól eltekintve. A program és a tesztvideók letölthetők a project honlapjáról: http://bmfnik.hu/iar/2007_2008/KFFR/.
11
Kun Attila József
BMF-NIK, IAR
KFFR Project
Tartalom 1.
Célkitűzés......................................................................................................................................... 2
2.
A megvalósításhoz használt eszközök-modulok.............................................................................. 2
3.
A rendszer felépítése....................................................................................................................... 2 3.1
Videó alrendszer...................................................................................................................... 3
3.2
Mozgásérzékelő alrendszer..................................................................................................... 4
3.2.1
Inicializálás....................................................................................................................... 5
3.2.2
Detektálás........................................................................................................................ 5
3.3 3.3.1
Megjelenítésért felelős alrendszer...........................................................................................7 GUI................................................................................................................................... 8
4.
Problémák ......................................................................................................................................10
5.
Tesztelés .........................................................................................................................................10
12