Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Multimedia ja grafiikka => Aiheen aloitti: kamara - 19.08.16 - klo:19.31

Otsikko: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: kamara - 19.08.16 - klo:19.31
Tämä ei ole vielä valmis, mutta laitetaan nyt tämä välivaihe talteen tänne 'pilveen'...

Tähän tarvitsee asentaa ainakin seuraavat: tesseract-ocr tesseract-ocr-fin python-pil project-x
Lisäksi:
Koodia: [Valitse]
wget http://www.guru-group.fi/~too/sw/m2vmp2cut/pxsup2dast.c
Infoa siitä...
http://www.guru-group.fi/~too/sw/m2vmp2cut/

makesrtfrompng.py
Koodia: [Valitse]
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
from PIL import Image, ImageDraw

max=0
min=0
halfy=0
if os.path.exists("spumux.xml"):
    file=open("spumux.xml","r")
    rows=file.readlines()
    file.close()
    rownumber=0
    for row in rows: #[-15:]: #rows:
        rownumber+=1
        if row[0:13]=="  <spu start=":
            idx=row.find(".png")
            imgfilename=row[idx-11:idx+4]
            #print(imgfilename)
            img=Image.open(imgfilename,'r')
            #print (img.getpalette())
            #break
            palette=[0, 0, 97, 0, 0, 0, 241, 241, 241, 180, 180, 180, 4, 4, 4]
            palettenow=img.getpalette()
            fixpalette=[0,1,2,3,4,5,6,7]
            #for pal in range(3*5):
            #    if palette[pal]!=palettenow[pal]:
            #        break
            #if palette[pal]!=palettenow[pal]:
            if palette[:3*5]!=palettenow[:3*5]:
                #print(palettenow[:3*5])
                #print (imgfilename)
                for i in range(5):
                    for j in range(5):
                        if palette[i*3:i*3+3]==palettenow[j*3:j*3+3]:
                            fixpalette[j]=i
                            #print ("Tuli Fiksaukseen")
                            #print (""+str(i)+","+str(j))
                            #break
            #else:
                #print ("EITULLUT")
            #for i in range(5):
            #    print (
            if fixpalette!=[0,1,2,3,4,5,6,7]:
                print palettenow[:3*5]
            #print (fixpalette)
            w,h=img.size
            #print(""+str(w)+"x"+str(h))
            imgtxtrows=h/50
            if imgtxtrows>1:
                if imgtxtrows==2:
                    res=0
                    halfy=h/imgtxtrows
                    while res==0:
                        res=1
                        for x in range(w):
                            px=img.getpixel((x,halfy))
                            if px!=0:
                                res=0
                        if (res==0) & (halfy==0):
                            res=2
                        else:
                            if res==0:
                                halfy-=1
                    #print (img.mode,img.size,halfy)
                ar=[0,0,0,0,0,0,0,0]
                #for x in range(w):
                #    for y in range(h):
                #        px=img.getpixel((x,y))
                #        ar[px]+=1
                #        if px!=0:
                #            #print (px)
                #            if px>max:
                #                max=px
                #            else:
                #                if px<min:
                #                    min=px
                #print (imgfilename)
                #print (ar)
                #print (imgtxtrows)
            ar=[0,0,0,0,0,0,0,0]
            #print (img.getpalette())
           
            newimg=Image.new("RGBA",(w,h))
            for x in range(w):
                for y in range(h):
                    px=fixpalette[img.getpixel((x,y))]
                   
                    #if px==2:
                    #    if x>0:
                    #        if img.getpixel((x-1,y))==0:
                    #            img.putpixel((x,y),0)
                    #        if y>0:
                    #            if img.getpixel((x-1,y-1))==0:
                    #                img.putpixel((x,y),0)
                    #        if y<h:
                    #            if img.getpixel((x-1,y+1))==0:
                    #                img.putpixel((x,y),0)
                    #    if x<w:
                    #        if img.getpixel((x+1,y))==0:
                    #            img.putpixel((x,y),0)
                    #        if y>0:
                    #            if img.getpixel((x+1,y-1))==0:
                    #                img.putpixel((x,y),0)
                    #        if y<h:
                    #            if img.getpixel((x+1,y+1))==0:
                    #                img.putpixel((x,y),0)
                    #    if y>0:
                    #        if img.getpixel((x,y-1))==0:
                    #            img.putpixel((x,y),0)
                    #    if y<h:
                    #        if img.getpixel((x,y+1))==0:
                    #            img.putpixel((x,y),0)
                   
                   
                   
                    fixblack=fixpalette[0]
                    if px==2:
                        if x>0:
                            if fixpalette[img.getpixel((x-1,y))]==0:
                                img.putpixel((x,y),fixblack)
                            if y>0:
                                if fixpalette[img.getpixel((x-1,y-1))]==0:
                                    img.putpixel((x,y),fixblack)
                            if y<h:
                                if fixpalette[img.getpixel((x-1,y+1))]==0:
                                    img.putpixel((x,y),fixblack)
                        if x<w:
                            if fixpalette[img.getpixel((x+1,y))]==0:
                                img.putpixel((x,y),fixblack)
                            if y>0:
                                if fixpalette[img.getpixel((x+1,y-1))]==0:
                                    img.putpixel((x,y),fixblack)
                            if y<h:
                                if fixpalette[img.getpixel((x+1,y+1))]==0:
                                    img.putpixel((x,y),fixblack)
                        if y>0:
                            if fixpalette[img.getpixel((x,y-1))]==0:
                                img.putpixel((x,y),fixblack)
                        if y<h:
                            if fixpalette[img.getpixel((x,y+1))]==0:
                                img.putpixel((x,y),fixblack)
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                    px=fixpalette[img.getpixel((x,y))]
                    if px==2:           
                        newimg.putpixel((x,y),(0,0,0,255))
                    #if px==1:
                    #    newimg.putpixel((x,y),(255,255,0,255))
                    if px==3:
                        newimg.putpixel((x,y),(0,0,0,255)) #Tämän voi kommentoida, mikäli tulee ongelmia
                    ar[px]+=1
                    if px!=0:
                        #print (px)
                        if px>max:
                            max=px
                        else:
                            if px<min:
                                min=px
            #print (min,max)
            newimg.save(imgfilename+"kuva.png","png")
                #print(""+str(w)+"x"+str(h))
                #os.system("touch "+imgfilename+"."+str(imgtxtrows)+".txt")
            #if (h!=52) & (h!=102) & (h!=54):
            #    print ("OHO")
           
            #for x in range(w):
            #    for y in range(h):
            #        px=img.getpixel((x,y))
            #        #if px!=0:
            #        #    print (px)
            #        if px>max:
            #            max=px
            #        else:
            #            if px<min:
            #                min=px
            print rownumber
else:
    print ("Eipäs löytynyt spumux-tiedostoa :(")
    #
newimg=Image.new("RGBA",(w,h))

max=0
min=0
ar=[0,0,0,0,0,0,0,0]
for x in range(w):
    for y in range(h):
        px=img.getpixel((x,y))
        if px==2:
            if x>0:
                if img.getpixel((x-1,y))==0:
                    img.putpixel((x,y),0)
                if y>0:
                    if img.getpixel((x-1,y-1))==0:
                        img.putpixel((x,y),0)
                if y<h:
                    if img.getpixel((x-1,y+1))==0:
                        img.putpixel((x,y),0)
            if x<w:
                if img.getpixel((x+1,y))==0:
                    img.putpixel((x,y),0)
                if y>0:
                    if img.getpixel((x+1,y-1))==0:
                        img.putpixel((x,y),0)
                if y<h:
                    if img.getpixel((x+1,y+1))==0:
                        img.putpixel((x,y),0)
            if y>0:
                if img.getpixel((x,y-1))==0:
                    img.putpixel((x,y),0)
            if y<h:
                if img.getpixel((x,y+1))==0:
                    img.putpixel((x,y),0)
        px=img.getpixel((x,y))
        if px==2:           
            newimg.putpixel((x,y),(0,0,0,255))
        if px==1:
            newimg.putpixel((x,y),(255,255,0,255))
        if px==3:
            newimg.putpixel((x,y),(0,0,255,255))
        ar[px]+=1
        if px!=0:
            #print (px)
            if px>max:
                max=px
            else:
                if px<min:
                    min=px
print (min,max)
#newimg.save(imgfilename+"kuva.png","png")
print (ar)
print (img.getpalette)
#os.system("bash -c \"../makestrsubtitles.sh\"")
f=os.popen("../makesrtsubtitles.sh") # spumux.xml|grep "+args[1])
rows=f.readlines()
f.close()
print rows
f=open("tekstitys.srt","wb")
for row in rows:
    f.write(row)
f.close()

makesrtsubtitles.sh
Koodia: [Valitse]
#!/bin/bash
declare -i i
i="0"
for f in *pngkuva.png
do
    i="$i+1"
    echo $i
    #echo ${f%kuva.png}
    python ../converttimestamps.py ${f%kuva.png} 
    tesseract -l fin $f stdout
done

converttimestamps.py
Koodia: [Valitse]
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys , os #, serial, threading
#import optparse
#converttimestamps.py

args = sys.argv
#print args
if len(args)>1:
    #print args[1]
    #sys.ex
    f=os.popen("cat spumux.xml|grep "+args[1])
    rows=f.readlines()
    f.close()
    #print("OK?:"+rows[0])
    row=rows[0].replace(".",",")
    print row[14:14+11] + " --> " + row[14+11+7:14+11+7+11]

Tämä on tosiaan ihan protoilua, mutta jo tässä vaiheessa se lukee kohtuullisesti Ylen tekstejä, kunhan projectx:n asetukset ovat jokseenkin tämän laisia...

Koodia: [Valitse]
# Project-X INI
# ProjectX 0.90.4.00 / 30.03.2006

# Application
Application.Agreement=1
Application.Language=en
Application.LookAndFeel=com.sun.java.swing.plaf.gtk.GTKLookAndFeel

# CollectionPanel
CollectionPanel.CutMode=0

# OptionPanel
OptionPanel.PanelIndex=0

# SubtitlePanel
SubtitlePanel.SubpictureColorModel=YLE
SubtitlePanel.SubtitleExportFormat=SRT
SubtitlePanel.TtxPage1=451
SubtitlePanel.TtxPage2=452
SubtitlePanel.TtxPage3=453
SubtitlePanel.TtxPage4=771
SubtitlePanel.decodeHiddenRows=1
SubtitlePanel.keepOriginalTimecode=1
SubtitlePanel.rebuildPTS=1

# WindowPosition
WindowPosition.Main.Height=680
WindowPosition.Main.Width=949
WindowPosition.Main.X=971
WindowPosition.Main.Y=209

Kysyä saa, ja vastaan, jos jaksan.

Ohje...

Kysyä saa, ja vastaan, jos jaksan. Tässä siis minun tarjoamat spagetit.

Edit - Täältä saatu vähän vinkkiä... https://www.linux.fi/wiki/DigiTV:n_tallennukset_DVD:lle

Jatkan vähän huomenna, mutta tällä sai jo savut Ylen ohjelmasta.
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: E_LE - 02.09.16 - klo:01.31
ProjectX osaa kyllä kaivaa ylen srt tekstit suoraankin textitv:n sivuilta. Kanavanumeroita tarvitaan http://yle.fi/aihe/artikkeli/2014/12/04/tekstitys (http://yle.fi/aihe/artikkeli/2014/12/04/tekstitys)
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: kamara - 02.09.16 - klo:11.56
ProjectX osaa kyllä kaivaa ylen srt tekstit suoraankin textitv:n sivuilta. Kanavanumeroita tarvitaan http://yle.fi/aihe/artikkeli/2014/12/04/tekstitys (http://yle.fi/aihe/artikkeli/2014/12/04/tekstitys)

Muuten hyvä, mutta Ubuntun vdr ei oletuksena tue tekstitv:tä, joten projectx:ään ei löydä srt-tekstejä, vaikka olisikin asetettu oikeat tekstitv:n sivut.
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: jarmala - 03.09.16 - klo:02.36
Muuten hyvä, mutta Ubuntun vdr ei oletuksena tue tekstitv:tä, joten projectx:ään ei löydä srt-tekstejä, vaikka olisikin asetettu oikeat tekstitv:n sivut.

Ööh, tarkoitin sitä, että Kaffeine osaa ne tekstitv-sivut tallentaa mukaan m2t-tiedostoihin, joista ne txtv-tekstitykset saa kaivettua projectx:llä ulos hyvin helposti. Tämä on selvästi yksinkertaisempi keino kuin yrittää ocr:llä saada tekstejä kuntoon DVB-T:n graafisista tekstityksistä. Sitäkin olen aikoinaan kokeillut, mutta jos tunnistusvirheitä on vaikka vain 2%, tekee se koko ocr-tunnistuksesta käyttökelvottoman.
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: nm - 03.09.16 - klo:03.23
Ööh, tarkoitin sitä, että Kaffeine osaa ne tekstitv-sivut tallentaa mukaan m2t-tiedostoihin, joista ne txtv-tekstitykset saa kaivettua projectx:llä ulos hyvin helposti.

Kyllä, mutta monet tykkäävät käyttää VDR:ää, joka vaatii koodiin paikkauksia, jotta tekstitv-tekstit tarttuisivat mukaan. yaVDR:n paketeilla onnistui aiemmin, mutta nykyisissä versioissa paikkaus on jätetty pois ja myös ttxtsubs-liitännäinen on rikki.

Tämä on selvästi yksinkertaisempi keino kuin yrittää ocr:llä saada tekstejä kuntoon DVB-T:n graafisista tekstityksistä. Sitäkin olen aikoinaan kokeillut, mutta jos tunnistusvirheitä on vaikka vain 2%, tekee se koko ocr-tunnistuksesta käyttökelvottoman.

OCR on kuitenkin periaatteessa ihan pätevä menetelmä tähän. Esimerkiksi osalla maksullisista kanavista ei ole tekstimuotoista tekstitystä vaan ainoastaan bittikarttatekstit. Oikein toteutettuna ja opetettuna OCR on täysin virheetön, koska vakiofonteilla esitettävä tekstitys on helposti tunnistettavissa.
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: Postimies - 05.09.16 - klo:19.18
Kyllä, mutta monet tykkäävät käyttää VDR:ää, joka vaatii koodiin paikkauksia, jotta tekstitv-tekstit tarttuisivat mukaan. yaVDR:n paketeilla onnistui aiemmin, mutta nykyisissä versioissa paikkaus on jätetty pois ja myös ttxtsubs-liitännäinen on rikki.
Ei VDR ole mahdoton kääntää lähdekoodista. Mutta jos on giga- tai teratolkulla tallenteita joissa tekstitv-tekstejä ei ole  on
 ocr se käyttökelpoinen tapa. Itseäni ainakin kiinnostaa, miten HD-lähetyksiä voisi pakata pienemmäksi järjevillä teksteillä.
Joskus tappelin  projectX:n kanssa ja en saanut YLEn lähetyksistä kunnon tekstejä ulos.
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: nm - 05.09.16 - klo:19.57
Kyllä, mutta monet tykkäävät käyttää VDR:ää, joka vaatii koodiin paikkauksia, jotta tekstitv-tekstit tarttuisivat mukaan. yaVDR:n paketeilla onnistui aiemmin, mutta nykyisissä versioissa paikkaus on jätetty pois ja myös ttxtsubs-liitännäinen on rikki.
Ei VDR ole mahdoton kääntää lähdekoodista.

Ei ole juu. Sunnuntaikäyttäjän kannalta vain hyvin, hyvin rasittavaa, etenkin kun paikkausta ja pluginia pääsee säätämään, jotta suostuvat yhteistyöhön muiden patchien ja VDR:n kanssa.  ;)
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: kamara - 05.09.16 - klo:21.27
Kyllä, mutta monet tykkäävät käyttää VDR:ää, joka vaatii koodiin paikkauksia, jotta tekstitv-tekstit tarttuisivat mukaan. yaVDR:n paketeilla onnistui aiemmin, mutta nykyisissä versioissa paikkaus on jätetty pois ja myös ttxtsubs-liitännäinen on rikki.
Ei VDR ole mahdoton kääntää lähdekoodista.

Ei ole juu. Sunnuntaikäyttäjän kannalta vain hyvin, hyvin rasittavaa, etenkin kun paikkausta ja pluginia pääsee säätämään, jotta suostuvat yhteistyöhön muiden patchien ja VDR:n kanssa.  ;)

Ei jaksa kääntää...
Haluu tehdä omaa purkkaa...

Jos saan jotain aikaiseksi, niin lähettelen niitä tänne päin.

Ainakin binäärejä...

Teen alkeellista kuvananalysointia.
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: Postimies - 05.09.16 - klo:22.23
Kyllä, mutta monet tykkäävät käyttää VDR:ää, joka vaatii koodiin paikkauksia, jotta tekstitv-tekstit tarttuisivat mukaan. yaVDR:n paketeilla onnistui aiemmin, mutta nykyisissä versioissa paikkaus on jätetty pois ja myös ttxtsubs-liitännäinen on rikki.
Ei VDR ole mahdoton kääntää lähdekoodista.

Ei ole juu. Sunnuntaikäyttäjän kannalta vain hyvin, hyvin rasittavaa, etenkin kun paikkausta ja pluginia pääsee säätämään, jotta suostuvat yhteistyöhön muiden patchien ja VDR:n kanssa.  ;)
Sain eilen käännettyä Kodin kehitysversion. Meni suhteellisen helposti Wikin ohjeiden mukaan. VDR vielä asentamatta. Kyllä siihen saa varata aikaa jos noi kaksi aikoo saada toimimaan. Löytyi myös ttxtsubs-stable-vdr repo. 
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: nm - 05.09.16 - klo:22.29
Löytyi myös ttxtsubs-stable-vdr repo.

Hyvä vinkki, en olekaan tuota huomannut. Kas kun eivät ole saaneet yaVDR:ään asti korjattuja paketteja.

Tämä PPA siis kyseessä: https://launchpad.net/~seahawk1986-hotmail/+archive/ubuntu/ttxsubs-stable-vdr
Nuo paketit toimivat luultavasti pääosin myös Ubuntu 16.04:ssä, mutta joidenkin liitännäisten kanssa tulee vastaan yhteensopivuusongelmia. Esim. Live-plugin ei toimi suoraan.
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: Postimies - 06.09.16 - klo:21.46

Tämä PPA siis kyseessä: https://launchpad.net/~seahawk1986-hotmail/+archive/ubuntu/ttxsubs-stable-vdr
Nuo paketit toimivat luultavasti pääosin myös Ubuntu 16.04:ssä, mutta joidenkin liitännäisten kanssa tulee vastaan yhteensopivuusongelmia. Esim. Live-plugin ei toimi suoraan.
Itse en ole kokeillut. Yavdr repoissa unstable-vdr sisältää Ubuntu 16.04 paketit. Ubuntun omastakin valikoimastakin löytyy VDR.  Ei tuo unstable-vdr minulla ongelmia ole aiheuttanut. Tosin olen asentanut sen LUbuntu 14.04.
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: nm - 06.09.16 - klo:22.08
Yavdr repoissa unstable-vdr sisältää Ubuntu 16.04 paketit.

16.04:n paketit ovat vielä work-in-progress-vaiheessa ja suurin osa liitännäisistä puuttuu: https://launchpad.net/~yavdr/+archive/ubuntu/unstable-vdr?field.series_filter=xenial
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: Postimies - 14.09.16 - klo:17.17
Yavdr repoissa unstable-vdr sisältää Ubuntu 16.04 paketit.

16.04:n paketit ovat vielä work-in-progress-vaiheessa ja suurin osa liitännäisistä puuttuu: https://launchpad.net/~yavdr/+archive/ubuntu/unstable-vdr?field.series_filter=xenial
Päivittyminen kestää näköjään edelleen. Itsellä ei projectx nyt asennettuna. Näyttääkö mediainfo tai mplayer onko tallenteissa myös
 tekstitv-tekstit. 
Otsikko: Purkkaa tarjolla (Ylen tekstityksen kuvista srt-tiedosto...)
Kirjoitti: kamara - 26.09.16 - klo:15.57
Tarkoitukseni on jossain vaiheessa myös julkaista sorsat, mutta tässä nyt 64-bittinen käännetty versio.

Asenna tesseract-ocr...
Koodia: [Valitse]
sudo apt-get install tesseract-ocr tesseract-ocr-data tesseract-ocr-eng tesseract-ocr-equ tesseract-ocr-fin tesseract-ocr-osd

Pura liitteenä oleva tiedosto, mene oma.d-hakemistoon  ja aja makesrtsubtitles.sh sieltä hakemistosta.
Koodia: [Valitse]
cd oma.d
./makesrtsubtitles.sh
Sen pitäisi tulostaa seuraavaa...

Koodia: [Valitse]
1
00:00:15,38 --> 00:00:17,37
Mutta mielestäni <i>olet</i> komistunut.
- No todellakin.


Millähän lisenssillä kannattaisi toi YLEsubtextPrepare-ohjelma julkaista ?

Siinä on käytetty mit-lisenssin omaavaa lodepng png-kuvapalikkaa.

Edelleen l:t ja I:t tuppaavat sotkeentumaan, mutta muuten vaikuttaa toimivan riittävän tarkasti. (Ainakin itselleni. Toki joitain onglemia olen havainnut).

Otsikko: Vs: Purkkaa tarjolla (Ylen tekstityksen kuvista srt-tiedosto...)
Kirjoitti: Tomin - 26.09.16 - klo:16.19
Millähän lisenssillä kannattaisi toi YLEsubtextPrepare-ohjelma julkaista ?
Ihan makuasia. Jos sinulle on tärkeää, että se pysyy avoimena lähdekoodina, niin joku käyttäjänoikeuslisenssi (https://fi.wikipedia.org/wiki/Copyleft) (copyleft) kuten GPL, LGPL tai MPL. Itse olen valinnut lähinnä sillä periaatteella, että yksinkertaisemmat ohjelmat (varsinkin tulkattavat) tyypillisesti MIT (http://MIT)-lisenssillä (salliva lisenssi, kuten myös BSD ja Apache) ja sitten isommat ja monimutkaisemmat GPL ellei ole jotain muuta syytä valita toisin. Yksinkertaisuutta voi mitata vaikka sillä, minkä verran siihen on mennyt aikaa tai sitten vaikka koodiriveillä. Jos on kyse jostain pienestä skriptinpätkästä tai muuten voi odottaa ettei teoskynnys edes ylittyisi, niin olen laittanut merkinnäksi Public domain (https://fi.wikipedia.org/wiki/Public_domain) (mahdollisesti selventävä teksti myös) ja antanut ihan vapaaseen käyttöön. Vaihtoehto olisi käyttää vaikka CC0 (https://creativecommons.org/publicdomain/zero/1.0/deed.fi):aa. Tarkoitus näissä on lähinnä ettei tule kysymystä siitä saako sitä käyttää ja mihin tarkoituksiin. Toki ohjelmilla on tapana monimutkaistua ajan kanssa, jos niihin tulee lisää toimintoja. Tekijänoikeuksien haltija voi kyllä vaihtaa myöhemmin lisenssiä, mutta ne jotka ovat siitä kopion jo saaneet voivat käyttää vanhaa versiota vanhalla lisenssillä. 8)

Onhan noita lisenssejä: https://opensource.org/licenses/category
Joka tapauksessa suosittelen käyttämään jotain yleistä oli se sitten salliva tai käyttäjänoikeuslisenssi.

Siinä on käytetty mit-lisenssin omaavaa lodepng png-kuvapalikkaa.
Jos se käyttää sitä dynaamisesti linkitettynä, niin sillä ei ole mitään väliä ja muussakaan tapauksessa tuskin vaikuttaa siihen, minkä lisenssin voit valita. Sallivana lisenssinä MIT ei laita kovin paljoa rajoitteita, mikä näkyy lisenssin pituudessakin.

Jos kiinnostaa enemmälti keskustella ohjelmistolisensseistä, niin suosittelen aloittamaan oman aiheen.
Otsikko: Vs: Purkkaa tarjolla (Ylen tekstityksen kuvista srt-tiedosto...)
Kirjoitti: kamara - 26.09.16 - klo:17.17
Siinä on käytetty mit-lisenssin omaavaa lodepng png-kuvapalikkaa.
Jos se käyttää sitä dynaamisesti linkitettynä, niin sillä ei ole mitään väliä ja muussakaan tapauksessa tuskin vaikuttaa siihen, minkä lisenssin voit valita. Sallivana lisenssinä MIT ei laita kovin paljoa rajoitteita, mikä näkyy lisenssin pituudessakin.

No, se on kyllä ihan kiinteesti ohjelmassa, kuten sitä kuuluukin käyttää, mutta mitään muutoksia kyseisille koodeille en ole tehnyt. Sen avulla luen ja kirjoitan png-kuvat.

Tässä nyt on sitten 32-bittinen versio.

Eihän toi ajettava tiedosto mikään mammutti ole, vaikka sen tekemiseen kuluikin melkoinen tovi, mutta  tein ohjelman ainakin 3:een kertaan. Ajettavasta tiedostosta suurimman osan vei toi LodePNG-kirjasto. Vieläkin voisi vähän hioa luokkien rakenteita.

Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: kamara - 23.05.18 - klo:06.41
Vähän päivitystä...

Nyt vihdoinkin on sorsat jaossa...

Toivottavasti on oikeat sorsat, ja muut tiedostot.

Kuitenkin testasin ohjelmaa, ja ajoin diff:n, ja se näytti uudella käännöksellä ja vanhalla käännöksellä tyhjää, joten todennäköisesti ohjelma on suurinpiirtein sama, kuin oma aikaisemmin käyttämäni.

Ystävällisin terveisin kamara.
Olkaa hyvät...
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: kamara - 05.01.19 - klo:09.19
Tuli tehtyä taas uudempaa versiota YLEpremanipulatesta...

Ensiksi lukekaa README-tiedosto.

Sen jälkeen kysykää, mikäli on jotain kysyttävää...
Tässä historiatietojani kyseisen käytöstä...
... joita voi käyttää vinkkinä ohjelman käyttöön.
Ohjelma on purettuna ~/Lataukset/OCRPremanipulate/OCRPre-kansioon.
... ja pxsup2dast-ohjelma on käännettynä ~/MVideo-kansiossa
Koodia: [Valitse]
~/Lataukset/OCRPremanipulate/OCRPre
./compiletests.sh
./executeTests.sh
cd ~/MVideo/elokuvat
../pxsup2dast Tekstitys.sup Tekstitys.sup.IFO
cd Tekstitys.d
cp ~/Lataukset/OCRPremanipulate/OCRPre/softwares/make* .
cp ~/Lataukset/OCRPremanipulate/OCRPre/softwares/YLEsubtextPrepare .
./makesrtsubtitles.sh >../tekstitys.srt

Tämän jälkeen rupee tulemaan erroreita resoluutiosta, mutta kuitenkin ohjelma tekee tekstityksen tiedostoon ../tekstitys.srt. Epäonnistuneista tekstitysyrityksistä jää kuvat näkyviin, lisäksi kannattaa tutkia errors.txt-tiedosto, johon myös kerätään epäonnistuneet tekstitykset.

Liitteenä siis lähdekoodit.

Edit - VAROITUS OHJELMA TUHOAA NE PNG-TIEDOSTOT, JOTKA SE OSAA MUUTTAA TEKSTIKSI, JOTEN OHJELMISTON KÄYTTÖ ON OMALLA VASTUULLA. SE TOIMII SIKSI NIIN, ETTÄ ON HELPOMPI POIMIA NE KUVAT, JOITA SE EI OSAA MUUTTAA TEKSTIKSI.
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: SuperOscar - 07.01.19 - klo:19.41
Tästä puuttuu nyt jokin välivaihe välistä. Ilmeisesti oleellinen ohjelma on ”pxsup2dast”, mutta sitä ei yllä ole – vaatimuksissakaan, eli ei mitään tietoa mihin se liittyy ja mistä sen saa.
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: kamara - 07.01.19 - klo:20.04
Tästä puuttuu nyt jokin välivaihe välistä. Ilmeisesti oleellinen ohjelma on ”pxsup2dast”, mutta sitä ei yllä ole – vaatimuksissakaan, eli ei mitään tietoa mihin se liittyy ja mistä sen saa.

ReadMe - kirjoitti...
Lainaus
Riippuvuudet: Project-X, tesseract suomipaketilla, python, bash ja
pxsup2dast (http://www.guru-group.fi/too/sw/m2vmp2cut/pxsup2dast.c) .

Toivottavasti löytyy sieltä edelleen...

En voinut laittaa sitä sorsiin, kun en ole sitä tehnyt, ja se on itsenäinen ohjelma eikä kirjasto.

Kyseinen ohjelma tekee sup+sup.IFO-tiedostoista kuvat, ja spumux-tiedoston. Se todellakin on oleellinen osa, jotta saa viritelmäni toimimaan.
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: SuperOscar - 07.01.19 - klo:21.19
ReadMe - kirjoitti...

No sehän tietenkin jäi lukemati – ei tosimies lue dokkareita! 8)

Enihuu, hieman hankalaahan tuo käyttö toistaiseksi on, kun ohjelmia ei voi vain heittää jonnekin kansioon ja ajaa sieltä vaan ne täytyy kopioida työskentelykansioon. Wrapper-skriptinä toimivan makesrtsubtitles.sh:n pitäisi mieluummin osata etsiä kutsumansa kamat jostakin. Eikähän se iso korjaus olisikaan, pitäisi vain korvata ”./” ohjelmien poluissa jollakin, mikä ensin on selvitetty (tai luotetaan $PATHiin).

Itse lopputulos on enimmäkseen kunnossa, mutta skripti äänekäs:

Koodia: [Valitse]
rm: tiedostoa 'errors.txt' ei voi poistaa: Tiedostoa tai hakemistoa ei ole
Warning. Invalid resolution 0 dpi. Using 70 instead.
Warning. Invalid resolution 0 dpi. Using 70 instead.
Warning. Invalid resolution 0 dpi. Using 70 instead.
Traceback (most recent call last):
  File "./makeOneLine.py", line 32, in <module>
    res=res+(f.readlines()[0][0:-1])
IndexError: list index out of range
Warning. Invalid resolution 0 dpi. Using 70 instead.

Sitten miljoona riviä noita samanlaisia Tesseractin varoituksia ja aina välissä tuo Traceback-viesti.
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: kamara - 08.01.19 - klo:07.17
Enihuu, hieman hankalaahan tuo käyttö toistaiseksi on, kun ohjelmia ei voi vain heittää jonnekin kansioon ja ajaa sieltä vaan ne täytyy kopioida työskentelykansioon. Wrapper-skriptinä toimivan makesrtsubtitles.sh:n pitäisi mieluummin osata etsiä kutsumansa kamat jostakin. Eikähän se iso korjaus olisikaan, pitäisi vain korvata ”./” ohjelmien poluissa jollakin, mikä ensin on selvitetty (tai luotetaan $PATHiin).

Itse lopputulos on enimmäkseen kunnossa, mutta skripti äänekäs:

Koodia: [Valitse]
rm: tiedostoa 'errors.txt' ei voi poistaa: Tiedostoa tai hakemistoa ei ole
Warning. Invalid resolution 0 dpi. Using 70 instead.
Warning. Invalid resolution 0 dpi. Using 70 instead.
Warning. Invalid resolution 0 dpi. Using 70 instead.
Traceback (most recent call last):
  File "./makeOneLine.py", line 32, in <module>
    res=res+(f.readlines()[0][0:-1])
IndexError: list index out of range
Warning. Invalid resolution 0 dpi. Using 70 instead.

Sitten miljoona riviä noita samanlaisia Tesseractin varoituksia ja aina välissä tuo Traceback-viesti.

Joo, en ole viitsinyt viimeistellä scriptiä, niin se on varsin äänekäs.
Ensimmäinen errors.txt yrittää poistaa virhe-tiedoston, mikäli sellainen on, ja yleensähän sellaista tiedostoa ei ole, joten se valittaa tiedoston puutteesta.

Tesseract ei tykkää LodePNG:llä tehdystä kuvasta, koska LodePNG ei määrittele kuvalle resoluutiota (siis pistettä/tuuma). Siistä siis tulee toi...
Koodia: [Valitse]
Warning. Invalid resolution 0 dpi. Using 70 instead.

Jälkimmäinen, jonka pitäisi ilmentyä hivenen harvemmin tulee siitä, ettei tesseract-anna tekstiä (tavuakaan), mutta python-ohjelma yrittää poistaa viimeisen tavun.

Laiskuuttahan se tietenkin on, mutta toisaalta toimivaa peliä ei kannata sorkkia.

Jos muuttaa makesrtsubtitles.sh:n tällaiseksi, niin pitäisi toi ensimmäinen virheilmoitus poistua ("errors.txt-tiedostoa ei voi poistaa")...
Koodia: [Valitse]
#!/bin/bash
declare -i i
i="0"
touch errors.txt
rm errors.txt
touch errors.txt
for f in *.png
do
    i="$i+1"
    echo $i
    #echo ${f%kuva.png}
    ./YLEsubtextPrepare $f
    python ./makeOneLine.py ${f} $i rm
    echo
done
#rm *pngNormalWord*
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: kamara - 05.02.19 - klo:17.47
Tein ruman, mutta halutun muutoksen python-scriptiin. Sen jälkeen ei pitäisi liikoja huudella resoluution puutteesta, mutta riippuvuuksiin tuli imagemagick muiden ohjelmien lisäksi, ja ohjelma sen takia toimii hitaammin:
cat makeOneLine.py
Koodia: [Valitse]
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys , os,os.path #, serial, threading
#import optparse
#converttimestamps.py

args = sys.argv
#print args
if len(args)>3:
    #print args[1]
    #sys.ex
    #os.remove("errors.txt")
    f=os.popen("cat spumux.xml|grep "+args[1])
    rows=f.readlines()
    f.close()
    #print("OK?:"+rows[0])
    error=False
    row=rows[0].replace(".",",")
    print row[14:14+11] + " --> " + row[14+11+7:14+11+7+11]
    for x in range(10):
        s=args[1]+"NormalWords-"+str(x)
        res=""
        for y in range(10):
            ss=s+"-"+str(y+1)+".png"
            if(os.path.isfile(ss)):
                #print (ss)
                f=open(ss+"oTags.txt","r")
                for line in f:
                    res=res+(line)
                f.close()
                f=os.popen("convert -units PixelsPerInch "+ss+" -density 74 "+ss+".png")
                rline=f.readlines()
                f.close()
                f=os.popen("mv "+ss+".png "+ss)
                rline=f.readlines()
                f.close()
               
                f=os.popen("tesseract -l fin "+ss+" stdout")
                rline=f.readlines()[0]
                if rline!="":
                        res=res+rline[0:-1]
                f.close()
                if res=="":
                        #print ("TULI YKKÖSEEN")
                        f=os.popen("tesseract --psm 7 -l fin "+ss+" stdout")
                        rline=f.readlines()[0]
                        if rline!="":
                                res=res+rline[0:-1]
                        #res=res+(f.readlines()[0][0:-1])
                        f.close()
                if res=="":
                        #print ("TULI KAKKOSEEN")
                        f=os.popen("tesseract --psm 7 "+ss+" stdout")
                        rline=f.readlines()[0]
                        if rline!="":
                                res=res+rline[0:-1]
                        #res=res+(f.readlines()[0][0:-1])
                        f.close()
                if res=="":
                        f=open("errors.txt","a")
                        f.write(args[2]+"->"+ss+"\n")
                        f.close()
                        error=True
                else:
                        if args[3]=="rm":
                                   os.remove(ss)
                f=open(ss+"cTags.txt","r")
                for line in f:
                    res=res+(line)
                f.close()
                res=res+" "
                if args[3]=="rm":
                        os.remove(ss+"cTags.txt")
                        os.remove(ss+"oTags.txt")
            else:
                if res!="":
                       print (res);
                break
    if error==False:
            if args[3]=="rm":
                    os.remove(args[1])
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: kamara - 28.09.19 - klo:18.07
Hei, korjasin yhden bugin purkkakorjauksella.

Ainakin itselläni on nyttemmin näkynyt I-bugi. Eli 'i'-kirjain ei aina (fifty-sixty) tulostu premanipulatessa.

En tiedä, kuinka moni käyttää ohjelmaani, mutta kyseinen bugi on ainakin itselläni hiljattain näkynyt srt-tiedostoissa.

Tein uuden version YLE-premanipulateen. Ei tämä nyt täydellinen korjaus ole, mutta tällä voidaan edetä.

Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: wapsi - 03.12.19 - klo:11.46
Kiitokset skripteistä, epäilen olen hyvin lähellä saadakseni homman toimimaan. Edelleen tosin ongelma, että i-kirjaimet puuttuvat todella usein, vaikka käänsin tuon uusimman korjaamasi version (edellisen viestin liite).

Liitin tähän viestiin malliesimerkin, miten i-kirjaimet harvoin toimivat (output.srt). Osaatko kertoa, että mistä tämä johtuu? Lisäksi latasin zipin, mistä löytyy alkuperäiset .png ja .xml yms. tiedostot, joita käytin tuon output.srt:n generoimiseen skripteilläsi (jotka siis olivat pxsup2dast:n generoimat) tänne: http://wapsi.kapsi.fi/output.d.zip
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: Jiku - 04.12.19 - klo:12.33
En kamara vielä ole sorsiisi ehtinyt perehtyä että miten tuon tunnistuksen teet, mutta itse huomasin että kun noita fontteja eri kanavilla on erilaisia, niin lähes 100% tulokseen pääsee kun muuttaa ne näin:
(https://github.com/janttari/santaloota/blob/master/kuvej/convert.png?raw=true?v=1)
Eli suurentaa kuvan kolminkertaiseksi ja sitten muuttaa sen niin että teksti on musta. Tällöin tesseract tunnistaa  sen kunnola ilman virheitäl.

Koodia: [Valitse]
#!/bin/bash
tmpdir="/tmp/tekstit"
rm -rf $tmpdir
mkdir -p $tmpdir
ccextractor -dvblang fin -out=spupng -o $tmpdir/subs.xml -noteletext '20191117 1550 - Yle TV1 Häme - Rakennusentisöijät.ts' #puretaan tekstit

cd $tmpdir/subs.d #Täällä on ccextractorin purkamat kuvat
mkdir muunnetut #Tänne tallennetaan convertilla käsitellyt kuvat
for pic in *.png
do
    number=$(echo $pic|tr -dc '0-9')
    echo -ne "$pic\033[0K\r"
    convert $pic -trim -bordercolor black -border 50x5 -resize 300% -negate -alpha remove -background black muunnetut/$pic >/dev/null 2>/dev/null #käsitellyt kuvat alihakemistossa muunnetut
    #tässä kohtaa kannattaa tesseractilla tunnistaa teksti!
done

Itsellä työn alla skripti (https://github.com/janttari/tstekstita), joka joko polttaisi tekstit kiinni kuvaan tai sitten tekisi niistä mp4-tiedostoon sisällytetyt tekstit.
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: kamara - 04.12.19 - klo:15.07
En kamara vielä ole sorsiisi ehtinyt perehtyä että miten tuon tunnistuksen teet, mutta itse huomasin että kun noita fontteja eri kanavilla on erilaisia, niin lähes 100% tulokseen pääsee kun muuttaa ne näin:
(https://github.com/janttari/santaloota/blob/master/kuvej/convert.png?raw=true?v=1)
Eli suurentaa kuvan kolminkertaiseksi ja sitten muuttaa sen niin että teksti on musta. Tällöin tesseract tunnistaa  sen kunnola ilman virheitäl.

Kiitos ideasta...

Pitäneen testata jossain vaiheessa.

Itseäni on eniten harmittanut (nykyisessä versiossani) se, että Ei:stä tulee Fi (Ylen ohjelmissa).

Joo ja tunnistuksen teen ihan normaalisti ajamalla teeseract:n, mutta ennen tesseract:lle sanan syöttämistä. Splittaan tekstin riveiksi ja sen jälkeen sanoiksi, ja syötän sana kerrallaan tesseract:lle.
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: Jiku - 04.12.19 - klo:15.29
Mulla meni kerran suurin osa ajasta tuohon kun sain tekstin hyvin tunnistettavaan muotoon. Ongelma oli lähinnä DVD-levyissä, joissa teksti on monesti huonolaatuinen.
(https://github.com/janttari/dvbteksti2srt/blob/master/testi_puraDVDteksti_kuvanmuunnos.png?raw=true)
Eli tollaista kikkailua sille tekstille tuli ennen tunnistamista tehtyä, kun tesseract halusi että siinä tekstin ympärilläkin on vähän tyhjää, mutta taas teksti keskellä riviä ei ollut hyvä sekään..

Onneksi Linuxille on hyvät työkalut tuohon kuvien käpistelyyn skriptistä käsin!
Ja vaikka toi lopputulos (kohta 6) näyttäisi ihmissilmälle ehkä rumalta rosotekstiltä, se tunnistui silti varsin hyvin!
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: wapsi - 04.12.19 - klo:17.01
Kiitokset @Jiku ja @kamara, tein itseäni varten Bash-skriptin, joka luo .srt teksitystiedoston joko suoraan .ts -tiedostosta tai sitten spu/xml -tiedostosta. Noilla @Jiku:n mainitsemilla convert-parametreilla OCR toimii varsin hyvin.

Laitoin skriptini ja ohjeet Githubiin kaikkien saataville: https://github.com/wapsi/convert-TS-or-SPU-to-SRT
Otsikko: Vs: Ylen tekstityksen kuvista srt-tiedosto...
Kirjoitti: kamara - 04.12.19 - klo:17.20
Ole hyvä vain...

Minusta on hienoa, että joku muukin hyötyy ohjelmaräpellyksestäni. Ohjelmaani vielä sen verran, että pyrin tulkitsemaan sanat s.e. onko se kursivoituna vai normaalina. Se toimii vaihtelevasti, ja sen laskee PNS-luokka.