Benutzerin:Beate/OCR

aus Wikisource, der freien Quellensammlung
Zur Navigation springen Zur Suche springen

Entwurf für Wikisource:OCR. Aber eigentlich obsolet hier, da ein OCR-Plugin inzwischen eingebaut ist.

Benutzer, die helfen könnten: Benutzer:Alexander Fischer, Benutzer:Rudolph H, wer noch???


Hier soll beschrieben werden, wie der Text von PDFs (z.B: von google-books) erkannt werden kann.

Software[Bearbeiten]

Windows[Bearbeiten]

  • FreeOCR.net [1] ist eine GUI, die die Tesseract-Engine benutzt. Kostenlos, .NET muss installiert werden. (Windows 2000-Vista). Für die Frakturerkennung muss das entsprechende „Language Data” Packet installiert werden (gibt es hier). Dazu das Paket runterladen und in "Settings -> Open Language Folder" entpacken. FreeOCR hat den Vorteil, das es nicht nur .TIFFs einliest, sondern auch andere Bildformate. Neuerdings soll es sogar .pdfs können. Außerdem kann man hier eine „händische” Layoutanalyse vornehmen, gut z.B. für Texte, die in mehreren Spalten gesetzt sind.

Linux[Bearbeiten]

  • tesseract ist ein Kommandozeilenprogramm. [2] bzw. bei Distributionen wie ubuntu schon dabei (mittels apt zu installieren). Es gibt Sprachpakete für verschiedene Sprachen, darunter eines für Deutsch und eines für Deutsch-Fraktur. tessaract erzeugt halbwegs guten Output, wenn man auf ein paar Dinge achtet:
  1. Freistellen des Textes, so dass keine Seitenzahlen, Linien außenrum oder sonstige Störfaktoren drin vorkommen.
  2. Bei Benutzung als letzten Parameter Sprachpaket angeben, also bei Fraktur:
    tesseract Mittelschule_Durlach_(Vierordt)_027.tif mittelschule027 -l deu-f
    und bei „normalem” Text in deutsch
    tesseract Busch_Werke_v4_p_310.tif busch310 -l deu
  3. Die Datei muss unbedingt .tif heißen, nicht .tiff oder sonstiges, die Datei darf keine tif-Komprimierung haben.
  • gocr ist auch ein Kommandozeilenprogramm [3], aber leider nicht frakturfähig.
  • ABBYY FineReader Engine 8.0 CLI für Linux http://www.ocr4linux.com/

Mac[Bearbeiten]

  • tesseract läuft auch auf dem Mac als Komandozeilenprogramm, eine Anleitung gibt es hier: [4]. Ein .dmg für tesseract mit einer GUI gibt es auch hier [5], allerdings ist das eher ein "proof of concept". Mit den o.a. Punkten können damit auch gute Ergebnisse erzielt werden.

Gibts da sonst noch was kostenfreies?

Onlinetools[Bearbeiten]

Ruby-Script für Stapelverarbeitung[Bearbeiten]

Um nicht jede Tif-Seite einzeln über die Kommandozeile an tesseract übergeben zu müssen, kann folgendes Ruby-Script benutzt werden:

#!/usr/bin/ruby

folder_scans = "./scans"
folder_text = "./text"
textprefix = "mittelschule"
lang = "deu" # "deu" oder "deu-f"

# Ab hier keine Einstellungen mehr!

Dir.new(folder_scans).each do |file|
  if file =~ /\.tif/
    command = "tesseract #{folder_scans}/#{file} #{folder_text}/#{textprefix}#{file.gsub(/[^0-9]/, '')} -l #{lang}"
    result = `#{command}`
  else
    puts "FEHLER: #{file} ist keine tif-Datei und kann nicht OCR-t werden...." unless file == "." or file == ".."
  end
end

Erklärung[Bearbeiten]

Am besten erstellt man einen neuen Ordner, legt dort die Ruby-Datei rein und erstellt darin zwei Ordner, einen für die Scans und einen, in dem die generiereten Texte landen. Diesen Namen muss man in den ersten beiden Zeilen angeben. textprefix ist die Bezeichnung, wie die generierten Textdateien heißen sollen. Beispiel: textprefix ist "mittelschule", und es gibt einen Scan "Mittelschule_Durlach_(Vierordt)_001.jpg" im Scan-Ordner, dann heißt die generierte Textdatei mittelschule001.txt. Bei lang entweder "deu" oder für Fraktur "deu-f" angeben. Das wars :)

Ausführung: am einfachsten auf der Kommandozeile: "ruby to_ocr.rb", falls eure Ruby-Datei to_ocr.rb heißt.

Shell-Script für Stapelverarbeitung[Bearbeiten]

Für die Stapelverarbeitung von mehreren Tif-Seiten kann auch auf folgendes Shellscript verwendet werden.

#!/bin/sh
for i in *.tif 
do 
tesseract $i $i -l deu-f
done

Um mehre .jpg Dateien in .tif umzuwandeln, kann man mit Hilfe von ImageMagick, folgendes Script benutzen.

#!/bin/sh 
for i in *.jpg 
do 
convert $i ${i%.*}.tif
done