OCR z stacionárního videa

plouk

OCR z stacionárního videa
« kdy: 06. 05. 2017, 10:54:22 »
Kamera snímá displej zobrazující číslo z digitálek (kamera se nebude hýbat)). Potřeboval bych nějak provést OCR s určitou samplovací frekvencí (například každý 50 snímek z 25 fps videa) a převést na integer tu hodnotu a zapsat do souboru. Poradíte free program, který takovéto OCR Zvládne? Buď by to mělo umět all in one z videa a nebo by to mělo mít dobrou ovladatelnost z CLI, aby se to dalo naskriptovat.

PS: Další level by byl realtime OCR, tudíž že by například ffmpeg snímal video zdroj a pak bych to potřeboval průběžně zapisovat do souboru. existuje nějaký takovýhle komplexní program, který to udělá od grabování zdroje videa, přes výřez části obrazu a výběru snímku každých n sekund, samotné ocr a zalogování? Nebo si to mohu sám poskládát, ale tady bych potřeboval poradit ten samotný program, co provede OCR spolehlivě (jako v minulém odstavci) a plus také poradit jak z toho ffmpegu každých n sekund vytáhnout snímek a provést OCR (spustit skript s daným snímkem. Jak řešit předání snímku? Jde to přes schránku? Nebo přes dočasný soubor?).


PS: umí OCR programy nějak zohlednit font (že bych nějak určil přímo font-jednotlivé číslice ,aspoň podle podobnosti a nebo aspoň druh textu) nebo formát textu ( 4 znaky, všechno čísla), aby spolehlivost byla lepší?

PS2: taky bude ten program nějak umět signalizovat, že se mu rozpoznání daného snímku případně daného textu nebo daného znaku nepovedlo? Umí pak případně dát hint, že třeba poznal znak, ale je to buď 1 nebo 7.


E

Re:OCR z stacionárního videa
« Odpověď #1 kdy: 06. 05. 2017, 11:06:26 »
Program nevím, já bych si to asi udělal v OpenCV. Najdeš i tutorialy na rozpoznání a OCR SPZ, dopravních značek, obličejů,...

zx ax xc

Re:OCR z stacionárního videa
« Odpověď #2 kdy: 06. 05. 2017, 11:15:00 »
urcite pomoci opencv, z videa lze ziskat snimky a nalezat v nich spz nemusi byt az takovy problem, podle barvy, obdelnikoveho tvaru.
ukladal bych obrazky z vysekem spz a az nasledne pripadne ocr.

plouk

Re:OCR z stacionárního videa
« Odpověď #3 kdy: 06. 05. 2017, 11:20:17 »
Pro upřesnění, není tam potřeba žádné luštění tvarů a značek. To co budu snímat je například  číselný displej digitálního teploměru nebo pageru

E

Re:OCR z stacionárního videa
« Odpověď #4 kdy: 06. 05. 2017, 11:34:42 »
No ale chceš dělat OCR něčeho specifického, takže pokud není hotové řešení, bude třeba si ho udělat, třeba pomocí OpenCV.

Rozpoznání číslic a písmen nakonec není nic jiného než rozpoznání tvarů.
Bežně dostupné OCR (na text) ti pravděpodobně ani spolehlivě nerozpozná znaky na 7 segmentovém digitálním displeji.

Klidně sem můžeš hodit zkušební snímek.


Fantomas

Re:OCR z stacionárního videa
« Odpověď #5 kdy: 06. 05. 2017, 12:11:47 »
Ty chces jeden programek na vsechno? Tak takovy neznam. Ale ocr se v linuxu da pekne udelat pomoci tesseract, pokud ovladas shell, muzes pomoci ffmpeg/libav vytahovat jednotlive snimky a tesseractem je prevadet na text. Opencv se pouziva na rozpoznavani objektu v obrazku, at uz obliceju, tvaru nebo pismen a cislic, samotne ocr ale neresi, to se dela treba zase pomoci tesseractu (myslim, ze v opencv 3 je uz implementovane, ja delam v cv2), kdyz pouzijes opencv 2 v pythonu, pak potrebujes pytesseract. Pokud se nechces drbat s programovanim v pythonu, pak shellem to bude nejschudnejsi (i kdyz netusim, jestli tesseract rozpozna digi font, klasickou hulkovou latinku treba rucne psanou to zvladne v pohode).

Re:OCR z stacionárního videa
« Odpověď #6 kdy: 06. 05. 2017, 14:18:25 »
Rozpoznání segmentového displeje by mohlo být triviální, ne? Stačí poznat které segmenty svítí a porovnat se vzorem. Akorát by se musela nakalibrovat poloha displeje a světelné podmínky - asi nejsložitější část, aby to bylo prakticky použitelné. Takže OCR snad ani není potřeba (a nevím, zda by se vyplatilo ho použít).

Re:OCR z stacionárního videa
« Odpověď #7 kdy: 06. 05. 2017, 14:51:08 »
Rozpoznání segmentového displeje by mohlo být triviální, ne? Stačí poznat které segmenty svítí a porovnat se vzorem. Akorát by se musela nakalibrovat poloha displeje a světelné podmínky - asi nejsložitější část, aby to bylo prakticky použitelné. Takže OCR snad ani není potřeba (a nevím, zda by se vyplatilo ho použít).
Presne to me taky napadlo, jedina podminka je, aby byl displej ve fixni pozici.

Dalo by se to i bez vetsich problemu udelat samokalibracni - udelat si pri kazdem rozpoznavani histogram svetelnosti definovane oblasti obrazu, kde je displej, v nem rozpoznat 2 peaky (svetly a tmavy). Mezi nimi pak nastavit threshold a s nim porovnavat svetelnost vybranych ploch (staci treba mensi obdelnikova ploska), kde jsou segmenty.
To cele bud nad cernobilym obrazem, nebo nad barevnym kanalem, ktery ma pro ten displej nejlepsi kontrast. A pokud je displej vypnuty, pozna se to tak, ze ten peak v tom histogramu bude jen jeden.

Jenda

Re:OCR z stacionárního videa
« Odpověď #8 kdy: 06. 05. 2017, 21:18:43 »
a plus také poradit jak z toho ffmpegu každých n sekund vytáhnout snímek a provést OCR (spustit skript s daným snímkem. Jak řešit předání snímku? Jde to přes schránku? Nebo přes dočasný soubor?)
Ne, přes pajpu. ffmpegu řekneš, aby ti dával data jako RGB24 (nebo YUV a zahodit chroma složky, protože stejně chceš černobílý obraz) a pak prostě pokaždé načteš pole bajtů a to je jeden frame.

plouk

Re:OCR z stacionárního videa
« Odpověď #9 kdy: 06. 05. 2017, 23:40:27 »
Ano, klidně přes |, ale jak tedy udělám, že při každým n tým obrázku (nebo prostě každý snímek, když zvolím vhodnou framerate přes -r nebo -framerate ve vhodném pořadí)  se spustí příkaz, který provede ocr a uloží. Tedy dotaz na ffmpeg. Možná je to jednoduché, ale nevím jak na to.
Toto je výchozí příkaz, pípa je tam jen kvůli tomu, abych viděl obraz, zda to funguje . Na linuxu místo dshow je něco jiného )
ffmpeg    -f dshow -i "video=Integrated Camera" -r 1 -f mpegts - | ffplay -
Tady ho umím uložit do jpg (uloží to jeden, a pak hází hlášky, že nemůže vygenerovat jméno souboru a -frames 1 jsem schválně vynechal)
ffmpeg    -f dshow -i "video=Integrated Camera" -r 1 -f image2 > soubor.jpg
A představuji si něco takového (>> funguje i v windows), -speciální_flag jsem tam dal, abych řekl ffmpeg, aby každý snímek videa poslal do pípy (nevím, jestli to bude synchroní nebo asynchroní)
ffmpeg    -f dshow -i "video=Integrated Camera" -r 1 -f  image2 -speciální_flag - | ocr >> output.txt 

Jenda

Re:OCR z stacionárního videa
« Odpověď #10 kdy: 07. 05. 2017, 03:18:36 »
Ano, klidně přes |, ale jak tedy udělám, že při každým n tým obrázku se spustí příkaz
To jsem napsal v té větě hned za tím… Tak teda ještě příklad:

i=0; ffmpeg -i Umbrtka\ -\ Práce\,\ radost\,\ válka-AB3Gj2PkYZc.mkv -f rawvideo -vcodec rawvideo -pix_fmt rgb24 -y /dev/stdout | while true; do head -c $(( 640*480*3)) | convert -size 640x480 -depth 8 rgb:/dev/stdin file$i.png; i=$(( $i+1 )); done

Ondrej

Re:OCR z stacionárního videa
« Odpověď #11 kdy: 08. 05. 2017, 08:29:12 »
Ty chces jeden programek na vsechno? Tak takovy neznam. Ale ocr se v linuxu da pekne udelat pomoci tesseract, pokud ovladas shell, muzes pomoci ffmpeg/libav vytahovat jednotlive snimky a tesseractem je prevadet na text. Opencv se pouziva na rozpoznavani objektu v obrazku, at uz obliceju, tvaru nebo pismen a cislic, samotne ocr ale neresi, to se dela treba zase pomoci tesseractu (myslim, ze v opencv 3 je uz implementovane, ja delam v cv2), kdyz pouzijes opencv 2 v pythonu, pak potrebujes pytesseract. Pokud se nechces drbat s programovanim v pythonu, pak shellem to bude nejschudnejsi (i kdyz netusim, jestli tesseract rozpozna digi font, klasickou hulkovou latinku treba rucne psanou to zvladne v pohode).
Když tesseract nakrmíš patřičnejma datama tak ti přečte i to, ale je to otrava...

PJ

Re:OCR z stacionárního videa
« Odpověď #12 kdy: 08. 05. 2017, 11:12:45 »
Na 7segment displej je ssocr.