AK19
Anmeldungsdatum: 9. Januar 2016
Beiträge: Zähle...
|
Hallo, ich hab sehr viele Bilder in vielen Verzeichnissen. Ca. 6000 jpeg Bilder in 77 Verzeichnissen.
Die Bilder sind alle ganz klein. Dort ist nur eine Zahl zu lesen. z.B. 0,96 oder 1,02. Ich möchte gerne alle Bilder in einem Ordner nach OCR durchsuchen. Als Ergebnis soll pro Ordner eine OCR Exportdatei entstehen. Benötigt werden die Zahlen in einer Tabellenkalkulation. Bisher habe ich das in Windows getestet, möchte es aber gerne in Linux machen.
Tesseract habe ich schon probiert, es kann die Bilder lesen.
Könnt ihr mir helfen wie ich alle Verzeichnisse nacheinander durchsuchen kann und dann pro Verzeichnis eine Exportdatei entsteht?
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17546
Wohnort: Berlin
|
Wie sieht denn so ein tesseract-Commando aus, und was gibt es zum Beispiel zurück?
|
AK19
(Themenstarter)
Anmeldungsdatum: 9. Januar 2016
Beiträge: 29
|
Einzelbilder funktionieren einwandfrei. Wenn ich aber ein ganzes Verzeichniss machen möchte mit:
| tesseract /home/basti/Schreibtisch/jpeg/A4/*.jpeg /home/basti/Schreibtisch/jpeg/A4/output
|
kommt:
| read_params_file: parameter not found: ���
|
|
toni52
Anmeldungsdatum: 4. März 2015
Beiträge: 664
|
Hallo, probier mal OCRFeeder, dort kann man Ordner hinzufügen. Das Programm kann auch verschiedene OCR-Engines nutzen. Siehe Texterkennung. mfg
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17546
Wohnort: Berlin
|
AK19 schrieb:
kommt:
| read_params_file: parameter not found: ���
|
Das sieht für mich nach Problemen mit Zeichensatz/Codierung aus. Wird bei einem
| ls /home/basti/Schreibtisch/jpeg/A4/*.jpeg
|
alles sauber ausgegeben? Stammen die jpeg-Dateien von einem anderen System, vielleicht?
|
AK19
(Themenstarter)
Anmeldungsdatum: 9. Januar 2016
Beiträge: 29
|
bei
| ls /home/basti/Schreibtisch/jpeg/A4/*.jpeg
|
kommt
| /home/basti/Schreibtisch/jpeg/A4/0097.jpeg
/home/basti/Schreibtisch/jpeg/A4/0098.jpeg
/home/basti/Schreibtisch/jpeg/A4/0144.jpeg
/home/basti/Schreibtisch/jpeg/A4/0145.jpeg
|
OCRFeeder hängt schon beim ersten Bild. Was anderes als Tesseract kann ich dort nicht einstellen. Was geht ist YAGF als GUI. Dauert aber verhältnismäßig Lange zu VietOCR auf Windows. Im VietOCR muss ich vorher in dem Programm eine TIFF aus allen Datein erstellen, dies ist bei YAGF nicht nötig.
Bei beiden ist in der Ausgabe nach jedem Bild (ist ja nur eine Zahl drin) eine Leerzeile, welche ich umständlich in der Tabellenkalkulation entfernen muss. Ich kann jetzt zwar machen was ich vor hab, schöner wäre aber ein Script, welches nach einander alle 77 Verzeichnisse abarbeitet und pro Verzeichnis eine Ausgabedatei erstellt.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17546
Wohnort: Berlin
|
Ich weiß nicht, ob ich Dich richtig verstanden habe. Einzelne Bilder klappen, aber ganze Verzeichnisse nicht? Also | tesseract /home/basti/Schreibtisch/jpeg/A4/*.jpeg /home/basti/Schreibtisch/jpeg/A4/output
|
scheitert aber
| tesseract /home/basti/Schreibtisch/jpeg/A4/0032.jpeg /home/basti/Schreibtisch/jpeg/A4/output
tesseract /home/basti/Schreibtisch/jpeg/A4/0096.jpeg /home/basti/Schreibtisch/jpeg/A4/output
tesseract /home/basti/Schreibtisch/jpeg/A4/0131.jpeg /home/basti/Schreibtisch/jpeg/A4/output
tesseract /home/basti/Schreibtisch/jpeg/A4/3425.jpeg /home/basti/Schreibtisch/jpeg/A4/output
|
würde klappen, für 4 Dateien in den Verzeichnis? Bzw. brauchst Du auch 4 Ausgabedateien? Und die Verzeichnisse heißen alle .../xN/ und liegen flach unter /home/basti/Schreibtisch/jpeg oder liegen die verästelt auch in Unterverzeichnissen? Bei einer flachen Verzeichnisstruktur müsste dann:
| for dir in /home/basti/Schreibtisch/jpeg
do
for file in $dir/*.jpeg
do
tesseract $file $file.out
done
#
cat $dir/*.out > $dir/output
done
|
funktionieren, um je Verzeichnis eine output-Datei zu erzeugen. Vielleicht kannst Du ja ein Testverzeichnis erstellen mit 2-3 Unterverzeichnissen und 2-3 Dateien je Verz., um das zu testen und vorab zu optimieren, etwa sofortiges Löschen der .out-Dateien und kosmetische Änderungen der output-Datei. Steht A4 für eine Tabellenkalkulationszelle und sind die Zellen fix?
Dann kannst Du auch mit | for d in {A..C}{1..3}; do echo $d; done
#oder
for c in {A..C} ; do for n in {1..3} ; do echo -n $c$n" " ; done ; echo; done
|
die Verzeichnisse gezielt ansteuern.
|
AK19
(Themenstarter)
Anmeldungsdatum: 9. Januar 2016
Beiträge: 29
|
| tesseract /home/basti/Schreibtisch/jpeg/A4/*.jpeg /home/basti/Schreibtisch/jpeg/A4/output
|
→ scheitert
| tesseract /home/basti/Schreibtisch/jpeg/A4/0032.jpeg /home/basti/Schreibtisch/jpeg/A4/output
tesseract /home/basti/Schreibtisch/jpeg/A4/0096.jpeg /home/basti/Schreibtisch/jpeg/A4/output
tesseract /home/basti/Schreibtisch/jpeg/A4/0131.jpeg /home/basti/Schreibtisch/jpeg/A4/output
tesseract /home/basti/Schreibtisch/jpeg/A4/3425.jpeg /home/basti/Schreibtisch/jpeg/A4/output
|
→ führt dazu, dass er nach einander jedes Bild anlalysiert. In der Ausgabedatei ist aber nur das Ergebnis der letzten Datei. Also nur die Zahl aus 3425.jpeg. Die anderen vorherigen wurden immer wieder überschrieben.
Die sollen aber alle noch da sein. die Verzeichnisse sind alle Flach in dem einen Unterordner. Richig, A4 steht für eine Zelle.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17546
Wohnort: Berlin
|
Deswegen ja
| tesseract $file $file.out
|
in einer Schleife - das würde dann Dateien wie /home/basti/Schreibtisch/jpeg/A4/0032.jpeg.out erzeugen. Wenn man durch ein Verzeichnis durch ist gäbe es dann pro jpeg-Datei eine -.out-Datei. Die out-Dateien würde man dann in eine output-Datei zusammenführen, pro Verzeichnis.
|
AK19
(Themenstarter)
Anmeldungsdatum: 9. Januar 2016
Beiträge: 29
|
hab es jetzt wie oben von dir in einem Script.
Als Fehler kommt:
Cannot open input file: /home/basti/Schreibtisch/jpeg/*.jpeg
cat: /home/basti/Schreibtisch/jpeg/*.out: Datei oder Verzeichnis nicht gefunden
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17546
Wohnort: Berlin
|
Ja, pardon, statt
| for dir in /home/basti/Schreibtisch/jpeg
# muss es
for dir in /home/basti/Schreibtisch/jpeg/*
|
heißen.
|
AK19
(Themenstarter)
Anmeldungsdatum: 9. Januar 2016
Beiträge: 29
|
ich musste es noch etwas anpassen. Wegen der Dateiendungen welche tesseract erzeugt, ging das mit dem zusammefügen der Outputdatei nicht.
So geht es:
| #!/bin/bash
for dir in /home/basti/Schreibtisch/jpeg/1/*
do
for file in $dir/*.jpg
do
tesseract $file $file
done
#
cat $dir/*.txt > $dir/output
done
|
Super! Vielen Dank. Die Output Datei sieht so aus: 0,96
0,98
1,01 bekommt man da die Leerzeilen noch raus?
|
AK19
(Themenstarter)
Anmeldungsdatum: 9. Januar 2016
Beiträge: 29
|
was auch noch schön wäre, wenn die output Dateien den Namen von dem Verzeichnis hätten, in denen sie drin sind.
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5322
|
bekommt man da die Leerzeilen noch raus?
Dafuer kannst du grep -v '^$' verwenden, entweder direkt statt dem cat im Skript oder danach. Aber wie entstehen die Leerzeilen ueberhaupt, kommen die von tesseract? AK19 schrieb: was auch noch schön wäre, wenn die output Dateien den Namen von dem Verzeichnis hätten, in denen sie drin sind.
Das muesste funktionieren (Zeile im Skript ersetzt):
cat $dir/*.txt > $dir/${dir##*/}
|
AK19
(Themenstarter)
Anmeldungsdatum: 9. Januar 2016
Beiträge: 29
|
die Outputdatei hat jetzt den richtigen Namen. Danke. Die Leerzeilen kommen von Tesseract, in der Tesseract Ausgabedatei jedes einzelnen Bildes ist auch eine Leerzeile: "0,98 " Habe es jetzt so:
| #!/bin/bash
for dir in /home/basti/Schreibtisch/jpeg/1/*
do
for file in $dir/*.jpg
do
tesseract $file $file
done
#
grep -v '^$' $dir/*.txt > $dir/${dir##*/}
done
|
Leerzeilen sind weg, aber die zusammengefügte Ausgabedatei es sieht jetzt so aus:
/home/basti/Schreibtisch/jpeg/1/A4/0097.jpg.txt:0.98
/home/basti/Schreibtisch/jpeg/1/A4/0098.jpg.txt:0.99
/home/basti/Schreibtisch/jpeg/1/A4/0144.jpg.txt:1.01
/home/basti/Schreibtisch/jpeg/1/A4/0145.jpg.txt:0.97 hast du noch eine Idee?
|