Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
KI für Texterkennung gesucht...
- Ersteller mischaef
- Erstellt am
Der_Dicke82
Lt. Commander
- Registriert
- Feb. 2011
- Beiträge
- 1.844
madmax2010
Fleet Admiral
- Registriert
- Juni 2018
- Beiträge
- 36.570
BFF
¯\_(ツ)_/¯
- Registriert
- Okt. 2017
- Beiträge
- 35.736
mischaef schrieb:ob das wegen Urheberrecht und so hier geht.
Dann kannst Du das eh eigentlich nur lokal machen.
mischaef schrieb:Foto-Scanner, 300 DPI gescannt. Ja, die Scanns sind vernünftig
In Farbe gescannt und nicht in Graustufen? Oder noch besser S/W.
Abbys FineReader war eigentlich das ultimative Tool damals als wir Tonnen an Akten scannen mussten und die entstehenden PDF auch noch durchsuchbar sein sollten.
Anyway.
Probier mal NAPS2. Da ist meines Wissens Tesseract dahinter.
- Registriert
- Feb. 2009
- Beiträge
- 39.001
Könnte es einfach am Quellmaterial liegen? Was genau wird denn gescannt? Mit welcher Auflösung?mischaef schrieb:da waren einige dicke Fehler in meinem Text drinn
Da würde ich wohl mindestens verdoppeln. Es geht hier ja anscheinend um mehrere Bücher. Eventuell auch einfach mal professionelle Hilfe in Anspruch nehmen.mischaef schrieb:300 DPI gescannt
konkretor
Artikeldetektiv
- Registriert
- März 2011
- Beiträge
- 8.001
Müsst doch die Daten nicht an Dritte geben. Sprich API nutzen für so etwas, was wieder Geld kostet. Zwei Nachteile die hier bei dem Beispiel nicht sein müssen.
Mistral hat gestern eine wirklich sehr gutes LLM für OCR herausgehauen. Das ist um einiges besser als tesseract
https://mistral.ai/news/mistral-ocr-3
Mistral hat gestern eine wirklich sehr gutes LLM für OCR herausgehauen. Das ist um einiges besser als tesseract
https://mistral.ai/news/mistral-ocr-3
@madmax2010
Tesseract nimmt aber anscheinend keine PDFs...daher für mich nicht nutzbar.
@gimmix
Wenn ein ganzes Buch als ein einziger Wortwurm ausgegeben wird, ist das nicht mehr zu formatieren. Im Grunde müsste das ganze Buch durchgegangen werden, welcher Satz in einer neuen Zeile beginnt.
@konkretor
Gibt es die nur als API oder auch per Web?
Tesseract nimmt aber anscheinend keine PDFs...daher für mich nicht nutzbar.
@gimmix
Wenn ein ganzes Buch als ein einziger Wortwurm ausgegeben wird, ist das nicht mehr zu formatieren. Im Grunde müsste das ganze Buch durchgegangen werden, welcher Satz in einer neuen Zeile beginnt.
@konkretor
Gibt es die nur als API oder auch per Web?
Zuletzt bearbeitet:
- Registriert
- Aug. 2019
- Beiträge
- 2.823
Frag doch mal bei Verlagen an, was die so benutzen. Da gibt es Skripte, die .txt oder .docx in ein vorkonfiguriertes InDesign-Layout ausleiten, und andere schöne Sachen.mischaef schrieb:Wenn ein ganzes Buch als ein einziger Wortwurm ausgegeben wird, ist das nicht mehr zu formatieren.
Autor schickt mit Word97 kaputtformatierten Wortmüll an Verlag -> Wortmüll ins Layout der Zeitschrift XY gegossen.
Dass da anschließend Korrekturgelesen werden muss, ist ja klar.
madmax2010
Fleet Admiral
- Registriert
- Juni 2018
- Beiträge
- 36.570
doch, sorry. VErgessen was zu zu sagenmischaef schrieb:Tesseract nimmt aber anscheinend keine PDFs...daher für mich nicht nutzbar.
https://github.com/ocrmypdf/OCRmyPDF
ist ein tesseract wrapper der das ganz gut kann.
ansonsten tut es auch, die seiten einzeln in Bilder umzuwandeln, tesseract dagagen laufen zu lassen
und mein altes buch script. hab mal ein paar echos, sanity checks und allgemein debug Kram eingebaut, um die nutzung einfach zu machen
Bash:
#!/usr/bin/env bash
set -euo pipefail
# One script that:
# 1) Sanity-checks required binaries and language data
# 2) OCRs an input PDF into:
# - a searchable PDF (text layer) -> output.pdf
# - a plain text file next to it -> output.txt
#
# Usage:
# bash ocr_tess_allinone.sh input.pdf [output.pdf]
#
# Environment overrides:
# DPI=300 # render DPI for pdftoppm
# LANGUAGE=eng # tesseract language
# PSM=3 # tesseract page segmentation mode
# DEBUG=0 # set to 1 for shell tracing
# KEEP_WORKDIR=0 # set to 1 to keep temp files for debugging
usage() { echo "Usage: $0 input.pdf [output.pdf]"; exit 64; }
# ---------------------- args ----------------------
[[ $# -ge 1 ]] || usage
in_pdf="$1"
out_pdf="${2:-${in_pdf%.pdf}.ocr.pdf}"
out_txt="${out_pdf%.pdf}.txt"
[[ -f "$in_pdf" ]] || { echo "ERROR: input not found: $in_pdf" >&2; exit 66; }
DPI="${DPI:-300}"
LANGUAGE="${LANGUAGE:-eng}"
PSM="${PSM:-3}"
DEBUG="${DEBUG:-0}"
KEEP_WORKDIR="${KEEP_WORKDIR:-0}"
[[ "$DEBUG" == "1" ]] && set -x
# ---------------------- helpers ----------------------
ok() { printf "OK : %s\n" "$*"; }
info() { printf "INFO : %s\n" "$*"; }
warn() { printf "WARN : %s\n" "$*" >&2; }
err() { printf "ERROR: %s\n" "$*" >&2; }
have() { command -v "$1" >/dev/null 2>&1; }
binpath() { command -v "$1" 2>/dev/null || true; }
require_bin() {
local b="$1"
if have "$b"; then
ok "binary '$b' found: $(binpath "$b")"
else
err "binary '$b' NOT found in PATH"
return 1
fi
}
optional_bin() {
local b="$1"
if have "$b"; then
ok "binary '$b' found: $(binpath "$b")"
return 0
else
warn "binary '$b' not found (needed to merge multi-page PDFs)"
return 1
fi
}
section() { printf "\n== %s ==\n" "$*"; }
# ---------------------- workdir ----------------------
workdir="$(mktemp -d)"
cleanup() {
if [[ "$KEEP_WORKDIR" == "1" ]]; then
info "Keeping workdir: $workdir"
else
rm -rf "$workdir"
fi
}
trap cleanup EXIT
# ---------------------- header ----------------------
section "Configuration"
info "Input : $in_pdf"
info "Output: $out_pdf"
info "Text : $out_txt"
info "DPI : $DPI"
info "Lang : $LANGUAGE"
info "PSM : $PSM"
info "Work : $workdir"
# ---------------------- sanity checks ----------------------
section "Sanity checks: binaries"
missing=0
require_bin pdftoppm || missing=1
require_bin tesseract || missing=1
have_pdfunite=1
optional_bin pdfunite || have_pdfunite=0
if [[ "$missing" -eq 1 ]]; then
err "Missing required binaries. Install Poppler (pdftoppm) and Tesseract."
exit 69
fi
section "Sanity checks: tesseract language data"
# 1) Does tesseract list the language?
langs="$(tesseract --list-langs 2>/dev/null || true)"
if [[ -z "$langs" ]]; then
err "Failed to run 'tesseract --list-langs'."
exit 70
fi
if printf "%s\n" "$langs" | awk 'NR>1{print $0}' | grep -Fxq "$LANGUAGE"; then
ok "language '$LANGUAGE' is listed by tesseract"
else
err "language '$LANGUAGE' is NOT listed by tesseract"
warn "Installed languages:"
printf "%s\n" "$langs" | sed 's/^/WARN : /' >&2
warn "If you installed the language pack, you may need to set TESSDATA_PREFIX."
warn "Try: export TESSDATA_PREFIX=\"$(tesseract --print-tessdata-dir 2>/dev/null || echo /path/to/tessdata)\""
exit 71
fi
# 2) Best-effort: verify traineddata file is readable (paths differ by distro)
tessdata_dir="$(tesseract --print-tessdata-dir 2>/dev/null || true)"
trained_ok=0
if [[ -n "$tessdata_dir" && -r "$tessdata_dir/${LANGUAGE}.traineddata" ]]; then
ok "traineddata readable: $tessdata_dir/${LANGUAGE}.traineddata"
trained_ok=1
else
for d in \
"/usr/share/tesseract-ocr/5/tessdata" \
"/usr/share/tesseract-ocr/4.00/tessdata" \
"/usr/share/tessdata" \
"/usr/local/share/tessdata" \
"/opt/homebrew/share/tessdata" \
"/usr/share/tesseract/tessdata"
do
if [[ -r "$d/${LANGUAGE}.traineddata" ]]; then
ok "traineddata readable: $d/${LANGUAGE}.traineddata"
trained_ok=1
break
fi
done
fi
if [[ "$trained_ok" -eq 0 ]]; then
warn "Could not confirm '${LANGUAGE}.traineddata' in common locations."
warn "If OCR fails with 'Error opening data file', set TESSDATA_PREFIX to your tessdata directory."
[[ -n "$tessdata_dir" ]] && warn "tesseract reported tessdata dir: $tessdata_dir"
fi
section "Version info"
tesseract --version | sed 's/^/INFO : /' || true
pdftoppm -v 2>&1 | head -n 2 | sed 's/^/INFO : /' || true
# ---------------------- OCR pipeline ----------------------
section "Step 1: render PDF pages to images (pdftoppm)"
pdftoppm -r "$DPI" -png "$in_pdf" "$workdir/page" >/dev/null
ok "render complete"
section "Step 2: locate rendered images"
mapfile -t pages < <(find "$workdir" -maxdepth 1 -type f -name 'page*.png' | sort -V)
if [[ ${#pages[@]} -eq 0 ]]; then
err "No page images were produced by pdftoppm."
err "Try running manually: pdftoppm -r $DPI -png \"$in_pdf\" \"$workdir/page\""
exit 72
fi
ok "found ${#pages[@]} page image(s)"
section "Step 3: OCR pages (searchable PDF pages + appended text)"
: > "$out_txt" # truncate/create output text file
out_pages=()
i=0
for img in "${pages[@]}"; do
(( ++i ))
base="$workdir/ocr-$(printf '%06d' "$i")"
info "OCR page $i / ${#pages[@]}: $(basename "$img")"
# IMPORTANT: do not pass "--" to tesseract (it will treat it as a filename).
tesseract "$img" "$base" -l "$LANGUAGE" --psm "$PSM" pdf >/dev/null
out_pages+=( "${base}.pdf" )
tesseract "$img" "$base" -l "$LANGUAGE" --psm "$PSM" txt >/dev/null
cat "${base}.txt" >> "$out_txt"
printf "\n\n\f\n\n" >> "$out_txt" # page separator
done
ok "OCR complete (PDF pages + TXT)"
section "Step 4: assemble final PDF"
if [[ ${#out_pages[@]} -eq 1 ]]; then
mv "${out_pages[0]}" "$out_pdf"
ok "single-page output written: $out_pdf"
else
if [[ "$have_pdfunite" -ne 1 ]]; then
err "Multiple pages detected but 'pdfunite' is missing, so merge cannot be done."
err "Install poppler-utils (or poppler) to get pdfunite, then rerun."
exit 73
fi
pdfunite "${out_pages[@]}" "$out_pdf"
ok "merged multi-page output written: $out_pdf"
fi
section "Done"
ok "PDF: $out_pdf"
ok "TXT: $out_txt"
noch nicht perfekt, aber tut.
Ergänzung ()
quick test
bash ocr_tess.sh sv600_c_normal.pdf 18:39
== Configuration ==
INFO : Input : sv600_c_normal.pdf
INFO : Output: sv600_c_normal.ocr.pdf
INFO : Text : sv600_c_normal.ocr.txt
INFO : DPI : 300
INFO : Lang : eng
INFO : PSM : 3
INFO : Work : /tmp/tmp.BkfvksJP2o
== Sanity checks: binaries ==
OK : binary 'pdftoppm' found: /usr/bin/pdftoppm
OK : binary 'tesseract' found: /usr/bin/tesseract
OK : binary 'pdfunite' found: /usr/bin/pdfunite
== Sanity checks: tesseract language data ==
OK : language 'eng' is listed by tesseract
OK : traineddata readable: /usr/share/tessdata/eng.traineddata
== Version info ==
INFO : tesseract 5.5.1
INFO : leptonica-1.86.0
INFO : libgif 5.2.2 : libjpeg 8d (libjpeg-turbo 3.1.2) : libpng 1.6.53 : libtiff 4.7.1 : zlib 1.3.1 : libwebp 1.6.0 : libopenjp2 2.5.4
INFO : Found AVX512BW
INFO : Found AVX512F
INFO : Found AVX512VNNI
INFO : Found AVX2
INFO : Found AVX
INFO : Found FMA
INFO : Found SSE4.1
INFO : Found OpenMP 201511
INFO : Found libarchive 3.8.4 zlib/1.3.1 liblzma/5.8.1 bz2lib/1.0.8 liblz4/1.10.0 libzstd/1.5.7 openssl/3.6.0 libb2/bundled libacl/2.3.2 libattr/2.3.2
INFO : Found libcurl/8.17.0 OpenSSL/3.6.0 zlib/1.3.1 brotli/1.1.0 zstd/1.5.7 libidn2/2.3.8 libpsl/0.21.5 libssh2/1.11.1 nghttp2/1.68.0 nghttp3/1.13.1 mit-krb5/1.21.3
INFO : pdftoppm version 25.12.0
INFO : Copyright 2005-2025 The Poppler Developers - http://poppler.freedesktop.org
== Step 1: render PDF pages to images (pdftoppm) ==
OK : render complete
== Step 2: locate rendered images ==
OK : found 1 page image(s)
== Step 3: OCR pages (searchable PDF pages + appended text) ==
INFO : OCR page 1 / 1: page-1.png
Error in boxClipToRectangle: box outside rectangle
Error in pixScanForForeground: invalid box
Error in boxClipToRectangle: box outside rectangle
Error in pixScanForForeground: invalid box
OK : OCR complete (PDF pages + TXT)
== Step 4: assemble final PDF ==
OK : single-page output written: sv600_c_normal.ocr.pdf
== Done ==
OK : PDF: sv600_c_normal.ocr.pdf
OK : TXT: sv600_c_normal.ocr.txt
ricoh hat da OCR Test scans
https://www.pfu.ricoh.com/global/scanners/scansnap/support/sample/sv600.html
Ergänzung ()
und wenn was schief geht:
DEBUG=1 KEEP_WORKDIR=1 bash ocr_tess_allinone.sh sv600_c_normal.pdf
Zuletzt bearbeitet:
Moin, guck dir mal dieses Modell an: Das läuft bei mir lokal auf einer 6GB GPU unter Ollama, und ich finde die Ergebnisse gut :-) Und wenn deine Karte nicht unterstützt wird, kannst du das Teil auch in der CPU kriechen lassen. ministral-3:8b-instruct-2512-q4_K_Mmischaef schrieb:Kennt jemand zufällig eine KI, die dafür genutzt werden kann und die zuverlässig arbeitet? Auch gerne lokal, wenn keine Nvidia-Karte benötigt wird.
LG Olav
G
Groffel
Gast
Der Grund dafür liegt in der Natur der aktuellen "Chat-KIs" (wie Gemini oder ChatGPT): Es sind Sprachmodelle, keine Layout-Engines. Sie sehen den Text als eine Kette von Wörtern (Tokens) und versuchen, den Inhalt wiederzugeben, "denken" aber nicht in pixelgeometrischen Positionen oder Zeilenumbrüchen.mischaef schrieb:Gemini ist hier bei der Erkennung zwar sehr gut, haut mir aber alle Texte in Blocksatz raus, sprich, reiht einen Satz an den anderen und achtet oftmals nicht auf Zeilenumbrüche, also wann im Text ein Satz in einer neuen Zeile anfängt. Damit geht die komplette Formatierung verloren, was sehr schade ist.
Wenn du das Layout (Zeilenumbrüche, Absätze) erhalten willst, brauchst du eigentlich keine "generative KI" (die Text erfindet), sondern eine dedizierte OCR-Software, die auf Layout-Analyse spezialisiert ist.
Vielleicht versuchst du es mal mit NAPS2 (Not Another PDF Scanner 2). Das ist zwar keine "Chat-KI", nutzt aber unter der Haube Tesseract (eine von Google entwickelte OCR-Engine, die auf neuronalen Netzen basiert, also auch eine Form von KI).
Sofern du technisch etwas versierter bist und Python magst, gibt es KI-Modelle auf Github, die speziell darauf trainiert wurden, Layouts in Markdown umzuwandeln.
Achja, frohes neues Jahr!
Ähnliche Themen
- Antworten
- 6
- Aufrufe
- 1.325
- Antworten
- 2
- Aufrufe
- 1.529
- Antworten
- 1
- Aufrufe
- 1.877