Portál AbcLinuxu, 13. května 2024 14:45

OCR filmových titulků

22.8.2020 03:09 | Přečteno: 2371× | Výběrový blog

Nedávno jsem tady v poradně řešil, jak přečíst titulky z filmu které jsou natrvdo zapečené v obraze. Ukázalo se že pro linux pořádně nic neexistuje. Nezbývalo nic než zkusit vypotit něco vlastního. Zezačátku to docela drhlo protože nejsu programátor a z shellu umím jenom takové ty uživatelské základy, no nakonec se to dostalo do stavu kdy už to začíná být trochu zajímavé.
#!/bin/bash
if not [ -s "$1" ]; then
  printf "%s\n" "video not found!"
  exit 1
fi

for p in ffmpeg ffprobe bc convert tesseract; do 
  if not which $p > /dev/null 2>&1; then 
  printf "%s\n" "$p not found!"
  exit 1
  fi     
done

video="$1"
language=ces
output_file="$(readlink -f "$video")-$(date +%s).srt"

until [ "$c" = "w" -o "$c" = "y" ]; do
printf "\n"
read -n 1 -p "Select subtitle color [w]hite / [y]ellow : " c
if [ "$c" = "w" ]; then sub_color=white
elif [ "$c" = "y" ]; then sub_color=yellow
fi
done

printf "\n%s\n%s\n%s\n" "sub_color=$sub_color" "output_file=$output_file" "Processing ....."

duration=$(ffprobe -i "$video" -v error -select_streams v:0 \
    -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 | \
    cut -d. -f1)

get_time() {
hh=$(echo "$t/3600" | bc)
mm=$(echo "($t-$hh*3600)/60" | bc)
ss=$(echo "$t-$hh*3600-$mm*60" | bc)
if [ $hh -lt 10 ]; then hh=0$hh; fi
if [ $mm -lt 10 ]; then mm=0$mm; fi
if [ $ss -lt 10 ]; then ss=0$ss; fi
time="$hh:$mm:$ss"
}

t=0
while [ $t -lt $duration ]; do
get_time
t=$((t+1))
sub=$(ffmpeg -ss $time -i "$video" -an -sn -vf "crop=iw:ih/2:0:ih" -c:v png \
       -vframes 1 -f image2pipe - 2> /dev/null |
       convert - -fuzz 25% -fill black +opaque "$sub_color" -threshold 50% -negate - |
       tesseract stdin stdout -l $language 2> /dev/null |
       grep [[:alnum:]])

if [ -n "$sub" -a -z "$sub_start" ]; then sub_start=$time sub_old="$sub"; fi
if [ -z "$sub" -o "$sub_old" != "$sub" ]; then sub_end=$time; fi
if [ -n "$sub_start" -a -n "$sub_end" ]; then
  n=$((n+1))
  printf "%s\n%s %s %s\n%s\n\n" "$n" "$sub_start,000" "-->" "$sub_end,999" "$sub_old" |
  tee -a "$output_file"
  sub_start=""
fi
sub_end=""
done

Celý ten proces probíhá tak, že ffmpeg vytáhne z filmu obrázek, ustřihne pryč vrchní půlku, pošle se to přes imagemagick convert filtr a nakonec to tesseract zkusí přečíst. Titulky bývají nejčasteji žluté nebo bílé. To byl docela oříšek protože když už to jakžtakž četlo bílé titulky, tak to zas nečetlo žluté a naopak. Vyřešil jsem to tak, že se skript na začáktu prostě zeptá jakou mají titulky barvu a podle toho potom nastaví convert filtr. Barva titulků se nechá a zbytek se vyplní černou

Chtělo by ale přesnější časování, občas se stane že titulek co trvá míň jak jednu sekundu to nezachytí. Milisekundy v tom výstupním srt souboru jsem provizorně obešel takovým megahnusným hackem v printf. Asi by se to dalo zpřesnit tak, že by ffmpeg tahal z filmu obrázky né po sekundě ale třeba po 100ms. Ale to by to celé trvalo nesmyslně dlouho. Už tak to trvá skoro hodinu. Další neduh to má ten, že stačí aby tesseract v jedné větě v jenom snímku přečetl třeba tečku místo čárky a i když je věta na první pohled stejná, tak skript z toho udělá dva titulky. Takže je ten srt soubor trochu větší. Klidně 100KB a víc. Záleží jak moc se ve filmu kecá. Největší peklo je, když se ve filmu v dolní polovině obrazu začnou objevovat nějaké nápisy v barvě titulků, ale s tím asi nejde dělat nic.

Výsledek to vypisuje jak na terminál a zároveň přes tee do souboru. Testovat se to dá hezky tak, že se ten film prostě pustí, ty vygenerované externí titulky se posunou na vrchní půlku obrazu (klávesy r t) a hned je v reálném čase vidět jak moc se to povedlo. U některých filmů je ten výsledek k pláči, no u některých to příjemně překvapilo až jsem čubrněl.

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

Jendа avatar 22.8.2020 04:04 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: OCR filmových titulků
Odpovědět | Sbalit | Link | Blokovat | Admin
Zkusil bych obraz průměrovat po celou dobu trvání daného titulku (což už nepůjde shell skriptem, chtělo by to napsat v nějakém „plnohodnotném“ jazyce) -- myšlenka je, že všechno ostatní se hýbe a rozmaže se to, a titulky z toho hezky vystoupí.
Já to s tou denacifikací Slovenska myslel vážně.
Jendа avatar 22.8.2020 04:05 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: OCR filmových titulků
A zjištění, že je další titulek, ideálně nějakou podobnostní metrikou (přímo toho obrazu?), která nebude reagovat na drobné změny (tečka/čárka).
22.8.2020 04:34 jejda | skóre: 24 | blog: jejda
Rozbalit Rozbalit vše Re: OCR filmových titulků
Ono když je ten film puštěný, tak ta změna není vidět protože ty časy jsou natvrdo nastavené 000-999 milisekund, tak se žádné rušivé probliknutí nekoná. Ty titulky akorát vypadají hnusně v textovém editoru třeba.
23.8.2020 22:08 Bherzet | skóre: 19 | blog: Bherzetův blog
Rozbalit Rozbalit vše Re: OCR filmových titulků
Myslíš to nějak tak, že bys bral snímek po snímku, porovnával je mezi sebou pixel po pixelu a ty pixely (resp. jejich souřadnice), kde zaznamenáš změnu, bys zahazoval? Je to sice zajímavá myšlenka, ale na statickém pozadí by to nefungovalo vůbec a u scén, kde je třeba spodní část obrazovky hodně tmavá, taky moc ne. Asi by to šlo zkombinovat s tím prostým filtrováním podle barvy, ale stojí to za ty zvýšené výpočetní nároky?
24.8.2020 00:04 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OCR filmových titulků
Příloha:
Vy jste divní. Já bych šel na to úplně jinak a použil bych nástroje z netpbm

1, Především bych přes ffmpeg vyjel všechny snímky z filmu do png (pnm zabírá zbytečně moc místa)
ffmpeg -i video.mp4 -r 1/1 $filename%03d.png
Když jsem to zkoušel, tak minutovou sekvenci vyblil cca za 6 sekund

2, Pak bych vybral jeden reprezentativní keyframe, ze kterého bych pomocí výběru podle barev vybral optimální selekci, tak aby zabrala pokud možno všechny barvy titulku. A z té bych pak udělal mapu barev:
pngtopnm title_yellow.pnm | pnmcolormap all > mapa.pnm
Redukcí barev se výrazně zjednoduší a zrychlí následné zpracování.

3, No a pak bych s využitím této mapy bych projel ve smyčce všechny snímky:

for i in (ls *.png) ; do pngtopnm $i | pnmremap -map=mapa.pnm -missingcolor=white > ${i/png/pnm} ; done

Ještě víc by se to dalo urychlit tím, že bych před ten pnmremap předřadil pnmcut, aby se zpracovávala jen ta část obrazu, kde se vyskytují titulky. Čímž by ještě víc zredukoval objem dat s nimiž by se pak měl tesseract zabývat.

A k jejich zpracování bych si napsal jednoduchý skriptík, který by bral jeden po druhém a přes pnmpsnr, porovnál jestli nedošlo ke změně. Pokud jo, tak pokud by šlo o začátek titulku, tak by zavolal tesseract, a když by to byl konec, tak by zapsal výsledek s číslem počátečního a koncového keyframe do souboru s titulky.
24.8.2020 02:02 jejda | skóre: 24 | blog: jejda
Rozbalit Rozbalit vše Re: OCR filmových titulků
U toto exportu všech obrázků na jednu hromadu je trochu problém, jak potom ten obrázek přiřadit k času. Nejsu si jistý jestli ffmpeg vůbec umí vložit timestamp do názvu souboru. Prý se to dá nějak zpětně dopočítat nevypadá to ale moc intuitivně.
24.8.2020 07:41 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OCR filmových titulků
Zmíněno níže. Nepoužívá se jen časování přes časová razítka, ale také přes klíčové snímky. Má to ale jeden háček - musí to být titulky ke konkrétnímu videu. Nicméně pokud ho máš k dispozici, nebo víš jakou měl snímkovovou frekvenci, není problém s konverzí.
24.8.2020 02:26 Bherzet | skóre: 19 | blog: Bherzetův blog
Rozbalit Rozbalit vše Re: OCR filmových titulků
Přílohy:
Zkoušel jsem ten Jendův algoritmus, resp. to, jak jsem ho pochopil, aplikovat na krátký sample, a nefunguje to. Naivní implementace (p1 ≠ p2, tedy nulová tolerance), dle očekávání nefunguje vůbec (test01.png je výsledek po průchodu přes všechny snímky, test02.png pouze přes dva), trochu chytřejší implementace (d(p1, p2) > t) není o nic lepší (test04.png je výsledek po průchodu přes všechny snímky při t=10). Zvyšování thresholdu nepomáhá. Co je zvláštní, tak že i pokud threshold nastavím tak absurdně vysoko (dejme tomu na 300), že téměř všechny pixely ve scéně zůstanou netknuty, titulky to stejně částečně usekne (viz test07.png). Napadá mě jediné logické vysvětlení, že tam dochází k nějakému nepatrnému posunu, což je věc, kterou jsem fakt nepředpokládal. Čekal bych, že titulek bude pozicovaný vždy stejně.

No ale zkoušel jsem ty framy projet od oka a žádného viditelného posunu jsem si nevšiml, tak fakt nevím. Protože pokud tam k tomu posunu nedochází, tak by to aspoň o trochu lepší výsledky produkovat mělo, ne? Pak by bylo na čase přemýšlet, jak to optimalizovat (zmenšení viewportu na relevantní část, nějaké půlení intervalu, aby to nebralo úplně všechny snímky, …). Pokud je to ale opravdu tím skákáním a neudělal jsem teď v rychlosti někde jen nějakou stupidní chybu, bylo by nutné místo jednotlivých pixelů sledovat nějaké matice sousedních pixelů atd. Natrénovat nějaký model přímo na čtení titulků by v dnešní době asi byla rozumnější cesta.
24.8.2020 03:30 Bherzet | skóre: 19 | blog: Bherzetův blog
Rozbalit Rozbalit vše Re: OCR filmových titulků
Záhada vyřešena, je to opravdu způsobené poskakováním titulků – při přecházení mezi snímky v menším okně je to dobře patrné. Aplikace např. na prvních 50 snímků dává podstatně lepší výsledky, kde dochází k postupnému odmazávání scény a nikoliv titulků. Jakmile se ale ke slovu dostane třeba snímek č. 108, cca třetinu titulků pošle do hrobu, protože on je má pozicované trochu jinak.

Takže řešení by bylo buď neporovnávat jednotlivé snímky přímo pixel po pixelu, ale mít nějakou toleranci i tímto směrem, nebo z nich zkoušet počítat nějaký průměr, o kterém Jenda vlastně mluvil původně, ale to si asi neumím úplně představit, jak by fungovalo (protože pokud titulky skáčou, budou rozmazané, resp. dělat duchy). Další věc je, že perioda, po kterou je titulek zobrazený, potažmo změna ve scenérii, která během ní proběhne, nemusí být ani zdaleka dostatečně velká na to, aby zmizely opravdu všechny ostatní pixely a nakonec to stejně skončí implementací algoritmu „plechovky“, vybíráním souvislých bloků pixelů o cca barvě titulků… a takto složitě vyprodukovaný výsledek bude opět trpět stejnými problémy jako popisuje OP v blogu (bude to chytat i jiné nápisy o stejné/podobné barvě atp). Čili tudy cesta nevede.

Dobrou noc.
24.8.2020 06:28 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OCR filmových titulků
No a co to takhle zkusit postupem který jsem popsal?

Kdybych měl k dispozici vzorek takového videa a nejenom jeden snímek, tak už by byl ten skript dávno na světě. Já totiž ve své sbírce žádný takový film nemám. Vždy jsem se snažil sehnat originální verzi, češtinu mít jako další stopu a titulky mimo soubor, aby je bylo možné editovat a případně překládat.
24.8.2020 20:30 Bherzet | skóre: 19 | blog: Bherzetův blog
Rozbalit Rozbalit vše Re: OCR filmových titulků
Tvůj postup očividně funguje, OPův taky. Já to nepotřebuji, tohle jsem zkoušel jen ze zvědavosti, protože mi to přišlo jako zajímavý nápad, ale byl jsem trochu skeptický k tomu, že bude fungovat. Ale nevím, jak to Jenda myslel, a jestli jsem ho pochopil úplně správně (spíš ne, přinejmenším s tím průměrováním vůbec netuším, co myslel).
24.8.2020 20:58 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OCR filmových titulků
Kdybych měl něco, na čem bych to mohl testovat, tak bych ten skript napsal. Ale bohužel nemám.
24.8.2020 00:09 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OCR filmových titulků
U bílých titulek bych pochopitelně použil pozadí černé a pak to inverzně přemapoval.
30.8.2020 20:22 panejo
Rozbalit Rozbalit vše Re: OCR filmových titulků
Uz to tady zaznelo, pokud by tazatel nahral ten klip nekam na ulozto, uz ma titulky i s ocr programem. Filozofovat naprazdno se o tom samozrejme da taky :)

V pripade zajmu o test s klicovyma snimkama, ja si kdysi napsal toto (vynecha 'hodinu', kdyz tak doplnte // prip misto python asi staci echo "scale=20; x*y+z" | bc -l):
# all frames::

# mkdir all_frames_orig
# cd all_frames_orig
# ffmpeg -i ../Trailer_2020.orig.mp4 -vsync 0 -r 25 -f image2 %04.png
# cd ..

## tohle ale muze trvat dooost dlouho (4000 asi 4 hodiny):
## vysekne jen vybrane snimky
for f in $(seq 0 4752); do
fn=$(printf "%04d.png" $f)
ffmpeg -i ../Trailer_2020.orig.mp4  -vf "select=eq(n\,$f)" -vframes 1 $fn
done


#######
mkdir key_frames_orig_hms
cd key_frames_orig_hms
# ffprobe -select_streams v -show_frames -show_entries frame=pict_type -of csv ../Trailer_2020.orig.mp4
ffprobe -select_streams v -show_frames -of csv ../Trailer_2020.orig.mp4 > trailer_ffprobe.out

cat trailer_ffprobe.out | awk -F',' '{print $5,$6,$19}' > trailer_ffprobe_types.out

grep 'I' trailer_ffprobe_types.out > trailer_ffprobe_types_keys.out

## vyzaduje all_frames nebo vysekavat po jednom (viz vyse)
cat trailer_ffprobe_types_keys.out | while read a b c; do
zpframe=$(printf '%04d' $a); secs=$(printf '%.2f' $b);
ms=$(python -c"print('{}m{:02.2f}s'.format(int($b//60),$b % 60))")
convert ../all_frames_orig/$zpframe.png -quality 80 ./${zpframe}_${secs}s_${ms}.jpg;
done


Josef Kufner avatar 22.8.2020 10:52 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: OCR filmových titulků
Odpovědět | Sbalit | Link | Blokovat | Admin
Teoreticky bys mohl jít po klíčových snímcích, neboť titulek by mohl být dost velká změna, aby takový snímek byl vždy na začátku titulku.

Jinak pokud bys použil rozumný programovací jazyk a nespouštěl ffmpeg + cca 10 dalších procesů pořád dokola, tak by to mohlo být řádově rychlejší. Neměl by být problém projet všechny políčka videa rychleji než je doba přehrávání, při tom nějakým průměrováním nadetekovat změny v titulcích a pak vyexportovat jeden snímek na titulek. Tipnul bych si, že pokud si vyneseš graf podobnosti mezi snímky, tak změny titulků budou vidět jako špičky.
Hello world ! Segmentation fault (core dumped)
22.8.2020 14:11 jejda | skóre: 24 | blog: jejda
Rozbalit Rozbalit vše Re: OCR filmových titulků
Podle toho co se píše v manuálu ffmpeg při tom seekování klíčové snímky používá. Jsem to pochopil tak, že se mu zadá přesný čas, ffmpeg doskáče na nejbližší keyframe a přesnou pozici potom nějak dopočítá. Samotné klíčové snímky mají rozestup klidně několik sekund. Pro seekování jenom podle keyframes to má volbu -noaccurate_seek

Když to čte jenom každý pětadvacátý snímek tak to zas až tak zoufale pomalé není. Nejvíc na tom zdržuje to OCR které se nakonec zavolat stějně musí. Když by se ffmpeg překompiloval s volbou --enable-libtesseract tak se tím zpřístupní filtr ocr. Ale to moc nechápu jak to funguje.

Josef Kufner avatar 22.8.2020 23:44 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: OCR filmových titulků
Ano, používá je. Ono to ani jinak nejde.

Co jsem však chtěl říct je, že když vemeš ffmpeg knihovnu a naprogramuješ si to s ní, tak nebudeš na každý snímek číst hlavičku souboru, obtížně seekovat do prostřed souboru a radovat se, že zvládneš načíst každý 25. snímek, když bys mohl zpracovat všechny snímky a ještě několikanásobně rychleji.
Hello world ! Segmentation fault (core dumped)
JiK avatar 22.8.2020 17:59 JiK | skóre: 13 | blog: Jirkoviny | Virginia
Rozbalit Rozbalit vše Re: OCR filmových titulků
Odpovědět | Sbalit | Link | Blokovat | Admin
co takhle na to natrenovat nejakou neuronovou sit?
Jirka Cech
22.8.2020 19:17 nadtržítko
Rozbalit Rozbalit vše Re: OCR filmových titulků
Dafuq? Pred 20ti lety kdyz jsme ripovali dvd do divx tak na to byl softik co to OCRkovalo a rovnou prehnalo pres slovnik MS Wordu. Jo aha, v linuxu? Tak to muzete jit do <>e i po 20ti letech :o)
xsubway avatar 22.8.2020 20:16 xsubway | skóre: 13 | blog: litera_scripta_manet
Rozbalit Rozbalit vše Re: OCR filmových titulků
Chodí taky zbloudilý uživatelé Linuxu na Win fóra a dělají tam dlouhý nos jako malý dečka? :)
22.8.2020 20:19 nadtržítko
Rozbalit Rozbalit vše Re: OCR filmových titulků
Samozrejme, to parti k linuxovimu fanatismu ;o)
23.8.2020 09:20 nadtržítko
Rozbalit Rozbalit vše Re: OCR filmových titulků
Zadny linuxovy fanatismus neexistuje. Linuxaci jsou proste dusevne nemocni lide zijici v bludu. Kdyz jim to nekdo vytkne tak jenom bekotaji a strkaji hlavu do pisku. Nechapu co je na tom tezkyho normalne se vztycenou hlavou to priznat a zaspivat hymnu linuxaku: Radujme se veselme se, hovno mame, podelme se.
25.8.2020 10:32 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OCR filmových titulků
Pořád lepší než si ji strkat do prdele jako ty.
=^..^= AmigaPower® avatar 10.9.2020 15:03 =^..^= AmigaPower® | skóre: 30 | blog: BLB | Praha
Rozbalit Rozbalit vše Re: OCR filmových titulků
To je nějaký dítě vole, ani Win BFU nemůže bejt takhle blbý...
23.8.2020 04:20 billgates | skóre: 27
Rozbalit Rozbalit vše Re: OCR filmových titulků
Ako, uprimne, nevidel som este jedinu diskusiu o nejakom Windows bugu na lubovolnom fore, kde by nevyrukoval niekto s linuxom.
Gréta avatar 23.8.2020 16:04 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: OCR filmových titulků

jo :D :D ;D ;D

a furt jim tam řikám jak je jako ten linux supr jak všecko funguje aže takovej a takovej problémek by v linuxu vubec nebyl možnej i když vim žeto jako neni pravda a každou chvilku se musí v linuxu něco vopravovat :O :D :D ;D

23.8.2020 15:37 mimi.vx | skóre: 37 | blog: Mimi.VX | Praha
Rozbalit Rozbalit vše Re: OCR filmových titulků

Az na to ze na DVD jsou titulky ve vlastnich stopach ...

 

coz tady autor resi uplne jiny  problem o oplne jine komplexite ... HardCoded SUBS :D , ale u uzivatele windows clovek neceka ze pochopi psany text a nebo vi neco o technologii na pozadi

USE="-gnome -kde";turris
23.8.2020 18:10 nadtržítko
Rozbalit Rozbalit vše Re: OCR filmových titulků
To v jake stope jsou je irelevantni protoze DVD ma titulky jako obrazky a tedy OCR se nevyhnes. Ze se autor musel srat s cernenim obrazu je jen proto, ze je pirat a nema orginalni disk.
23.8.2020 18:33 mimi.vx | skóre: 37 | blog: Mimi.VX | Praha
Rozbalit Rozbalit vše Re: OCR filmových titulků

ne, je to celkem relevantni .. chtel bych videt tn X let stary program na widle co to udela na kliknuiti ..

 

to jestli je autor pirat nebo ne je irelevatni, i ten kdo grabuje orig dvd a OCRkem protahuje titulky je pirat ..

USE="-gnome -kde";turris
Josef Kufner avatar 24.8.2020 00:47 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: OCR filmových titulků
DVD titulky jsou průhledné video, které přehrávač plácne přes film. Takže OCR to má velmi snadné, neboť dostane velmi čistá data. Pokud je OCR natrénované na konkrétní font, tak by úspěšnost měla být velmi slušná. A ano, ripovací programy mají podporu OCR v sobě už nějakou tu dekádu.
Hello world ! Segmentation fault (core dumped)
24.8.2020 07:11 SubRip
Rozbalit Rozbalit vše Re: OCR filmových titulků
https://en.wikipedia.org/wiki/SubRip Ten software má přes 17 let a pořád se udržuje. Když vám vadí použití pokrokovějšího operačního systému než je ten váš, tak je možné to pustit přes Wine.
24.8.2020 07:36 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OCR filmových titulků
Ty matelo, než podstupovat ten oser s tím tvým "pokrokovějším systémem", to bych ty titulky raději přeťukal na klávesnici.
25.8.2020 09:06 Mumin
Rozbalit Rozbalit vše Re: OCR filmových titulků
Ten SubRip konec konců zřejmě používá neuronku, protože u nejasných znaků se ptá co to je, pár krát mu pomůžeš a pak se to už naučí. Zřejmě je natrénovaný na anglosaské jazyky protože se ptal povětšinou na znaky s diakritikou.
25.8.2020 10:31 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OCR filmových titulků
Ale houbeles. Učení uměly OCR aplikace už před dvaceti lety. Kdyby používal "neuronku", tak se neptá.

Zaobírám se OCR už docela dlouho a úspěšnost výsledku záleží víc na kvalitě zdroje, než na nějakém učení. Proto je hovadina aplikovat OCR na neupravený filmový snímek, kde titulek tvoří jen malou malou plochu. Nejefektivnější je ten snímek ořezat(titulky se zpravidla vyskytují v dolní třetině snímku, pak mimo barev titulků vše ostatní remapovat na jednu barvu pozadí – je-li plocha pozadí bílá a titulky jakákoliv barevná směs, je výsledek rozpoznání lepší, než pokud je pozadí černé – a teprve pak na to poštvat nějaký OCR engine pochopitelně s doporučením jazyka rozpoznávaného textu. Pak totiž použije i další finty, které zvyšují úspěšnost až na 99%.
25.8.2020 11:21 Bherzet | skóre: 19 | blog: Bherzetův blog
Rozbalit Rozbalit vše Re: OCR filmových titulků
Kdyby používal "neuronku", tak se neptá.
Ptá, protože potřebuje trénovací data.
Josef Kufner avatar 25.8.2020 11:29 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: OCR filmových titulků
Pokud by se použila neuronka, tak by se jí dalo předhodit neupravené video a natrénovat ji, ať si ho upraví sama. Mělo by stačit jí udělat trochu hlubší, aby vstupní vrstvy měly dost prostoru na zpracování obrazu a ještě zbylo na zpracování textu.

Trénovací data nebude nijak obtížné obstarat, neboť videí s titulky se válí všude hromada a stačí titulky zapéct do obrazu. V ten okamžik máš jak vstup, tak 100% správný výstup a může se trénovat.
Hello world ! Segmentation fault (core dumped)
25.8.2020 12:28 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OCR filmových titulků
Přesně tak. S tím ale ať si hraje někdo jiný. Mně vyhovuje OCR software co není úzce specializovaný a jak už jsem napsal tesseract funguje, pokud se mu dodá slušná předloha dostatečně. A s mizernýma předlohama by měl problém i člověk na trávě.
Gréta avatar 23.8.2020 15:56 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: OCR filmových titulků
Odpovědět | Sbalit | Link | Blokovat | Admin

co tohleto hele :O :O

oslavná píseň na pana soudruha generalisima prezidentčíka Petra Pavla Pávka 🎶🫡🦚🎶
23.8.2020 21:31 jejda | skóre: 24 | blog: jejda
Rozbalit Rozbalit vše Re: OCR filmových titulků
Příloha:

No to je vlastně původní důvod, proč toto celé vzniklo. Protože se mi ten videocr nepodařilo rozhýbat. :-D Taky autor toho videocr píše, že dvacetisekundové video to čte tři minuty. To se mi zdá hodně pomalé. Teď zrovna překopávám tady ten bash skript tak, že čte za sekundu ne jeden obrázek ale dva a zjišťuju že to stačí. Žádné titulky netrvají míň jak 500ms. V té původní verzi co je navrchu v blogu se mi občas krátký titulek ztratil. Hodně se tím zvýšila přesnost časování. Bohužel s tím ale narostl počet duplikátů (asi v tom mám bug) a taky to celé trvá dvakrát dýl. Přibližně je to stejně rychlé jak přehrávání. Dám to do přílohy. Přijde mi že je to o maličko víc použitelné jak ta původní verze.

Našel jsem na toto téma pár zajímavých odkazů Pre-processing for OCR (outlined font) a converting fuzzy outlined text for ocr.
24.8.2020 00:13 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OCR filmových titulků
Taky autor toho videocr píše, že dvacetisekundové video to čte tři minuty.
No to je fakt HODNĚ pomalé. Jak bych na to šel já jsem popsal o kousek výše.
Josef Kufner avatar 24.8.2020 00:49 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: OCR filmových titulků
Hele a jak dopadne časování titulků? Pokud máš každý titulek +/- 200 ms, tak to musí být děsně otravné.
Hello world ! Segmentation fault (core dumped)
24.8.2020 02:29 jejda | skóre: 24 | blog: jejda
Rozbalit Rozbalit vše Re: OCR filmových titulků
To časování je dost bída to uznávám zvlášť když je ten film hodně ukecaný, no ve filmech kde se mluví trochu normálně mi přijde ta vůle 500ms docela snesitelná. Kdyby v tom čtení neměl tesseract tak moc chyb, šlo by číst obrázek třeba každých 100ms. To už by zvýšilo přesnost dostatečně ale zas za cenu pětinásobného zpomalení.
24.8.2020 16:41 jejda | skóre: 24 | blog: jejda
Rozbalit Rozbalit vše Re: OCR filmových titulků
Jenom tak na zkoušku jsem to nechal číst snímek každých 0.1s a je to jak jsem předpokládal. Přesnost časování už se blíží k dokonalosti ale jedna minuta videa se počítá zhruba 8 minut. To je neúnosně dlouho. Sice mám 12 roků staré dvoujádro ale nemyslím si že by to na nějakém moderním CPU běželo o moc rychlejš. :-(
24.8.2020 06:23 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OCR filmových titulků
Co furt máte sakra s tím časováním titulků? To fakt nevíte, že jsou formáty, které jsou časované nikoliv přes timestamp, ale přes čísla snímků, což je mnohem jednodušší? A že není problém udělat přes aegisub korekturu rozpoznaného textu a opravené titulky pak libovolně převádět do libovolného formátu?
24.8.2020 08:45 Nebo
Rozbalit Rozbalit vše Re: OCR filmových titulků
V pirátských kruzích vyhrály časové titulky ponevac číslo snímku závisí od snímkové frekvence. U časových jedny titulky dokážou pokrýt vícero video norem.
24.8.2020 09:34 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OCR filmových titulků
Toho, kdo si titulky sám píše nějaké pirátské kruhy nezajímají.
24.8.2020 13:06 jejda | skóre: 24 | blog: jejda
Rozbalit Rozbalit vše Re: OCR filmových titulků
On spíš naráží na to, že ten skript zaokrouhluje začátek titulku dolů a konec nahoru a tím tam vzniká trochu rozptyl. Udělal jsem to tak protože se kvůli rychlosti nečtou všecky obrázky a taky pro případ že když by se tam náhodou objevil duplikát, tak aby to neblikalo. Dělat ocr kompletně na všech snímkoch mi přijde zbytečné. A nemusíš tak vůbec řešit fps.
24.8.2020 13:20 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OCR filmových titulků
Bohužel nemám k dispozici nic, na čem bych to mohl porovnat s řešením přes netpbm.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.