Képfelismerés webkameráról 10-15 fps-sel

Sziasztok!

A feladat az, hogy egy vonalat (felsővezeték) kövessek a webkamera képén és némi transzformáció után egy fileba írjam ki, hogy mekkora a kígyózás.
Annak idején láttam (lehet itt?) egy linuxos kis programot, ami azt csinálta, hogy a webkamera előtt kézzel mozogva lehetett rajzolni, megjelenő labdákat "megérinteni" (vagy hasonló).
Emlékszik valaki erre? Vagy van ötletetek hogyan lehet egyszerűen és hatékonyan megoldani?

Üdv és köszi,
Roland

Hozzászólások

OpenCV-t ismered?

Crossplatform, rakás algoritmus. Ha másra nem is, de arra biztos jó, hogy kezeld a kamerát.
A vonal kereséséhez szerintem valami "egyedi" algoritmus kell neked...

Ha nagyon új vagy a témában, tudok adni egyetemi slide-okat amik elég jók az alapokhoz.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Azt hiszem nem hadititok: http://visual.ipan.sztaki.hu/ELTEfoliak/

Alapok benne vannak, alul-felüláteresztő filterek, mintaillesztés, él-, sarokkeresés, stb. Szerintem elég érthető.

Egyébként tudtommal sztaki elég nyitott, tehát be lehet menni cégként segítséget kérni, a segítség anyagi vonzatairól persze fogalmam nincs. :)

Az viszont biztos, hogy elég jók a gépi látás területén...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Érdekesen hangzik. Mit jelent pontosan, hogy felsővezetéket követni?
Egy mozgó járműből van fényképezve és ezt a videót kell elemezni? Online, vagy utólag a felvételt? És mi célból.
Azt kell rajta látni, hogy merre megy, hogy például egy robotrepülő végig tudjon repülni a távvezetéket követve Szászhalombattáról Budapestre? Vagy mi?

Amúgy nem hinném, hogy képfeldolgozásra, meg térérzékelésre lenne általánosan jó megoldás, de egy csomó algoritmust tényleg lehet olvasni egyetemi jegyzetekből. Ezek akkor is hasznosak lesznek, ha "csak" meglévő programokat használsz fel. A paraméterezésük, korlátaik stb így érthetővé válnak.

Azért nem ennyire szárnyaló dolog! :) Vasúti mérőkocsin; villamoson lévő áramszedőre van felépítve a kamera és a felsővezeték állapotának felmérésében szerepel a kígyózás. Ezt kellene tudni pl. 5-8 mm pontosan követni.
Valami olyasmire gondoltam, hogy egy meglévő programmal (camserv, mplayer) elkapom a képeket és kitúrom folyamatosan egy pipe-ba, majd egy általam írt szoftverrel azonosítom a felsővezetéket és a helyzetét tárolom.
Vagy még imagemagick-kal megszűrögetem, vágom és innen tovább dolgozom fel.
Ja, a lényeg, hogy on-line és off-line is lehet a mérés.

ha a "kigyózást" nézed az nem olyan a képen hogy ha pl. függőlegesen van rajta a vezeték, huzol két függőleges vonalat, vagy több párat (kicsit rossz, rossz, nagyon rossz,...), és ha azokból kimeg a vonal (ami a vezeték), akkor ott rossz.
Remélem érthető voltam.
Igy csak a képeket kell elemezni. Hogy hol lóg ki a "lóláb" :)

igy elgondolva neked mérni kell a távolságot is. pl.: az áramszedőre felkerül valami jeladó hogy miylen magasan van. Így akkor a kamera képéből kiszámolható a mozgás. Képelemzésben nem vagyok otthon, de ha be lehet állítani egy kamerával egy többszáz lábú IC pozicióját, tizedfokra pontosan, akkor biztos nem olyan nagy dolog egy vonalat végigvezetni a kép két oldala között.
Ha valami hardware segítség kell szívesen bármikor, pl. távolságérzékeléshez.
Egy jó algoritmust kell irni a vonal érzékelésére. Mondjuk szerintem a vezetékek talákozásipontjai jó kihívások lennének.
Egy ötlet most jutott eszembe:
Mi lenne ha az áramszedő, nem egy normál áramszedő lenne, hanem lenne melette egy sikágyas scannerhez hasonló fej, és onnan olvasná be a papír helyett, a vezetéket. :)
Ehhez kellene egy illyesztést megoldani, lehet hogy annyira nem is lenne benyolult és igy nem kavarna be a távoli vezeték és egyéb dolgok.
Mondjuk a felméréshez még kellene pontos utjeladó is.
Meg még biztos egy pár dolog. :)

Én is gondolkodtam már azon, hogy valami útjeladószerűséggel mérni a vezeték helyzetét a széncsúszón. De gyorsan elvethető, mert az áramszedő saru tömege eléggé meghatározott.
Viszont a kamerással lehetne pl. egy mérőlécet (vonalzót) figyelni, ami a széncsúszóval van párhuzamosan -> egyből látszik a helyzet és könnyű is!

Útjeladót a sinen megtett útra gondoltam :)
Szerintem annyira egy scannerfej nem emelné meg a súlyát a dolognak és eléggé ponos képet kapnál a vezeték mozgésáról, nem biztos hogy jó uton jársz a kamerással, mert sok dolog bezvarhat, pl. falevél, másik vezeték, madár, nap (jól belesüt és nem is látsz, szinte csak este használható egy jó megvilágitással a vezeték felé).
Ellenben a scanneres, nem lát messzire, használható éjjel, nappal.
Ha már annyira adott az áramszedő súly, akkor ne itt sporolják ki, hanem pl. a 100. réteg festéket kaparják le. :)
Ha van kedved beszélgethetük róla, csak itt már egy kicsit lassú a dolog.
Veszteni nem veszthetsz vele semmit, elmondom mit látok, mit nem, mérlegeled és legfejebb nem úgy csiálod ahogy mondom, mert rájössz hogy szar az ötlet. :)
Vegyél fel msn-en ha gondolod, címem a profilomban.

A falevél talán annyira nem zavar be, elvégre nem kell a felsővezeték mindenkori pozíciója, csak a szélsőértékek. Tehát ha valami bezavar, akkor azt nem mérjük. Mondjuk a szélsőértékek a felfüggesztéseknél vannak, tehát jó lenne nem pont azokat kiszórni. :)

Mondjuk az a 8 mm pontosság elég durva, elvégre webkamera felbontása elég kevés, utána kéne számolni, hogy egyáltalán lehetséges-e a kivánt pontosság elérése, főleg, hogy a vezeték magassága is változhat, amit nem feltétlenül tudsz mérni...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Igen, lehet, hogy kevés a felbontás. De most hirtelen utánaszámoltam:
A kamera digizett képe legyen 640x480, és tegyük fel, hogy úgy van a kamera felrögzítve az áramszedőre, hogy a széncsúszót vízszintesen látja.
És a távolság a széncsúszó és a kamera között - megfelelő látószög - akkora, hogy a lefutószarv éppen belefér még a képbe, azaz a látószögből adódó vízszintes távolság a széncsúszó függőleges síkjában 1700 mm.
Így ha egy pixelt veszek a felbontás határának, akkor
1700mm / 640px = 2.65625 mm/px.
Ebből az derül ki (remélem helyesen gondolom!), hogy a 640x480 felbontás megfelelő.
Nem jól okoskodom ezt?

Ez attól is függ mennyire homemade a dolog. 640x480-at csak a drágábbak tudnak.
A látószög problémás, vagy a kamerát kell úgy felszerelni, vagy optika kell ugye...

Az optika torzít a széleken, a kábelt nem tudod pixelpontosan megtalálni...

Lehet egyszerűbb igiboy megoldása. Nem feltétlen scannerfej kell, hiszen nem kell a 300 dpi felbontás :).

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Bizonyára, csak nem tudom hogyan :)
Legalábbis egzakt képletet nem ismerek, de nyilván pár kalibrációs méréssel jó eredményt lehet elérni.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Mivel nagyon közel lakom ehhez a gazdasághoz, és az egyik rokonom is termelő nagyban a fent említett gazd. mellett, gondoltuk kiugrunk kicsit "kombájnozni" a gyerekekkel, én meg megnézem a cuccot. Hát sajna éppen nem volt bent a gép, de ahogy kikérdeztem őket, a gyomokat nem feltétlenül kamerával figyeli, hanem éppen a sorokat határozza meg lézerrel és azoktól tartja a távolságot szinte cm pontosan!!! A hátsó kaparészt egy motorral igazítja, ha véletlenül a gépvezető kicsit eltér a megfelelő iránytól.
Sajna az sem derült ki, hogy linux fut rajta.
Mindegy megnézem amikor bent lesz a gép. De nem hiszem, hogy van "gazfigyelő neutron-háló" benne!