Kirjoittaja Aihe: Ylen tekstityksen kuvista srt-tiedosto...  (Luettu 8362 kertaa)

SuperOscar

  • Käyttäjä
  • Viestejä: 3390
  • Tänään täällä, huomenna poissa
    • Profiili
    • Legisign.org
Vs: Ylen tekstityksen kuvista srt-tiedosto...
« Vastaus #20 : 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.
openSUSE Leap 15.0 (pöytäkone 1, kannettavat 1 & 2), RPi LibreELEC 8.2.5 (HTPC), RPi Raspbian GNU/Linux 9 (nimipalvelin), Linux Mint 19.1 (pöytäkone 2), Haiku R1 Beta 1 (kannettava 3)

kamara

  • Käyttäjä
  • Viestejä: 2034
    • Profiili
Vs: Ylen tekstityksen kuvista srt-tiedosto...
« Vastaus #21 : 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*

kamara

  • Käyttäjä
  • Viestejä: 2034
    • Profiili
Vs: Ylen tekstityksen kuvista srt-tiedosto...
« Vastaus #22 : 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])