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

 ( roleez | 2007. június 30., szombat - 9:31 )

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ás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

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

Nem ismertem, most nézegetem!
Annyira nagyon nem vagyok új,de elkérném a slideokat. Ok?
Köszi!

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

Köszi!

É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" :)

Értelek, de ennél több kell. Gyakorlatilag számszerűen megmondani, hogy mi az a két szélső érték, ami között kígyózik a vezeték. Vagy ennek csak a különbsége, pl. 800 mm a kígyózás ezen a szakaszon.

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

Hát ipari kivitelben kell, nem homemade. Természetesen ipari kivitelű kamera és optika. Az optika torzítását lehet számítással kompenzálni, nem?

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

Ok, felveszlek. De jobban bírom a skype-ot! :)
Létezhet ilyen széles scannerfej? A széncsúszó minimum 1000 mm, ezen belül kell tudni a felsővezeték helyzetét.

pdgin-em van nem msn... :) eddig még nem látszol hogy felvettél volna.
amúgy van skype is csak hang nem akaródzik menni. (igiboy_hu1)

Igyekszem, igyekszem. De ezen a fostalicska gépen éppen csak net van, ha elérem a sajátom, akkor felveszlek!

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!

Vonalkereső algoritmus: http://en.wikipedia.org/wiki/Hough_transform

Petya

Használtad is már ezt? Első átolvasásra nem tűnik rossznak! Köszi.

Nem használtam még, egyetemen Képfeldolgozás tárgyból volt szó róla. Amúgy nem lehet nagy nehézség lekódolni.

Petya

Kutakodtam a neten és láttam a MathWorks MATLAB-jának egy Video and Image Processing Blockset kiterjesztését. (http://www.mathworks.com/products/viprocessing/description5.html)
Ismeri valaki?

Talán ez volt az képfelismerő program amit itt láttál:
http://hup.hu/node/21744
Egyébként egy játéknak készült, természetesen másra is használható, ha újra előkerül a forráskódja. Talán írj egy mail-t az írójának.

-------
Developers! Developers!! Developers!!! Developers!!!!

Köszönöm! Ez lesz az, bár nem érem el az oldalt...