synOCR synOCR - GUI für OCRmyPDF

Yippie

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
658
Punkte für Reaktionen
63
Punkte
54
YAML:
rule_1001:
    tagname:
    targetfolder: /<EUER PFAD>/
    postscript: newtargetdir=$(echo "$(( ${date_yy} ))") && newtargetfile=$(echo "${NewName}") && mkdir -p "${output%/*}/${newtargetdir}" && filecount=$(find "${output%/*}/${newtargetdir}" -maxdepth 1 -type f -name "${newtargetfile}*.pdf" -printf '.' | wc -c) && if [ "${filecount}" -eq 0 ]; then mv "${output}" "${output%/*}/${newtargetdir}/${newtargetfile}.pdf"; else mv "${output}" "${output%/*}/${newtargetdir}/${newtargetfile} (${filecount}).pdf"; fi
    condition: all
    subrules:
    - searchstring: .
      searchtyp: contains
Wow, jetzt bin ich aber sprachlos! Wer kommt denn auf sowas?
Was genau macht dieses Skript denn nun?

Und das /<EUER PFAD>/ ist wirklich so gemeint oder schlichtweg ein Platzhalter der ersetzt werden muss vor der Ausführung?
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.621
Punkte für Reaktionen
1.466
Punkte
234
/<EUER PFAD>/ ist nur ein Platzhalter.

Das Postskript sieht mehrzeilig so aus:

Bash:
# Zielpfad und Dateinamen vorbereiten
newtargetdir=$(echo "$(( ${date_yy} ))")
newtargetfile=$(echo "${NewName}")

# Zielverzeichnis erstellen
mkdir -p "${output%/*}/${newtargetdir}"

# Zählen wie viele Dateien mit diesem Namen bereits existieren
filecount=$(find "${output%/*}/${newtargetdir}" \
    -maxdepth 1 \
    -type f \
    -name "${newtargetfile}*.pdf" \
    -printf '.' | wc -c)

# Datei verschieben mit entsprechender Namensgebung
if [ "${filecount}" -eq 0 ]; then
    # Wenn keine Datei existiert - normal verschieben
    mv "${output}" "${output%/*}/${newtargetdir}/${newtargetfile}.pdf"
else
    # Wenn Datei existiert - mit Nummer verschieben
    mv "${output}" "${output%/*}/${newtargetdir}/${newtargetfile} (${filecount}).pdf"
fi
 
  • Like
Reaktionen: Yippie und Struppix

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
887
Punkte für Reaktionen
191
Punkte
63
Hallo Yippie,

die Regel / Postscript macht eigentlich gar nichts, außer dass es ein Verzeichnis unterhalb /<Euer Pfad>/ (entspricht Eurem gewünschten Zielpfad, welcher hier einzutragen ist) anlegt, welches der gefundenen Jahreszahl in Eurem Dokument entspricht, also einen Jahresordner. Ist dieser vorhanden wird nur in den Ordner verschoben.
Das kann das GUI ja von sich aus, aber bei Verwendung einer YAML mit verschiedenen Zielordnern braucht man halt eine andere Lösung.
Das ist alles.

Karsten

@geimist - Stephan war schneller, danke für die tolle Aufbereitung
 
  • Like
Reaktionen: Yippie

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.621
Punkte für Reaktionen
1.466
Punkte
234
Das kann das GUI ja von sich aus, aber bei Verwendung einer YAML mit verschiedenen Zielordnern braucht man halt eine andere Lösung.
Ein postscript benötigt man dafür aber nicht. Das geht auch so (mit den gleichen Platzhaltern für den Namen wie in der GUI):
YAML:
rule_1001:
    tagname:
    targetfolder: /§yocr4/
    condition: all
    subrules:
    - searchstring: .
      searchtyp: contains
 

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.271
Punkte für Reaktionen
74
Punkte
68
Hi, sorry das ich das Thema gerade "Crashe":
Habe ein Dokument eingescannt, welches allerdings schief bleibt, statt begradigt.
Anbei das Ergebnis.

Ich habe folgende Parameter:
-r -d -f -l deu+eng --rotate-pages --pdf-renderer hocr
 

Anhänge

  • scan2.pdf
    2,4 MB · Aufrufe: 5

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.621
Punkte für Reaktionen
1.466
Punkte
234
Bei mir funktioniert das Dokument. Kannst du mal ein Log bereitstellen?

-r und --rotate-pages sind äquivalent. Einen Parameter davon kannst du löschen.

Edit:
In meinem Standardprofil funktioniert es auch nicht, sondern nur in meinem Testprofil, wo ich die Schwarzweiß-Konvertierung aktiv habe. Wahrscheinlich kommt OCRmyPDF mit deinem Originaldokument nicht zurecht. Das entzieht sich leider meinem Einfluss.
Als letzte Möglichkeit, könntest du mal das neuste OCRmyPDF-Image manuell herunterladen und in deinem Profil aktivieren, falls du nicht eh auf dem :latest bist.
 
Zuletzt bearbeitet:

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.271
Punkte für Reaktionen
74
Punkte
68
Code:
    -----------------------------------
    |    ==> installation info <==    |
    -----------------------------------

synOCR-user:              synOCR
synOCR-user is admin:     yes
synOCR-version:           1.4.5
Architecture:             x86_64
DSM-build:                72806
Device:                   718plus (0199208118)
current Profil:           XXX
monitor is running?:      yes
DB-version:               9
used image (created):     jbarlow83/ocrmypdf:latest (2025-01-28T07:59:25)
document author:         
used ocr-parameter (raw): -r -d -f -l deu+eng --pdf-renderer hocr
ocropt_array:             -r -d -f -l deu+eng --pdf-renderer hocr
search prefix:           
replace search prefix:    yes
renaming syntax:          §tit
Symbol for tag marking:   #
target file handling:     useCatDir
Document split pattern:   
split page handling:      discard
delete blank pages:       
threshold black/white:   
threshold black pixels:   
clean up spaces:          false
Date search method:       use Python
date found order:         firstfound
source for filedate:      source
ignored dates by search: 
date range in past:       0 [absolute: 0]
date range in future:     0 [absolute: 0]
Docker test:              OK
DSM notify to user:       XXX
apprise notify service:   
apprise attachment:       false
notify language:          ger
Loglevel:                 normal
max. count of logfiles:   10
rotate backupfiles after: 1 days
Source directory:         /volume1/synOCR/XXX/
Target directory:         /volume1/Daten/XXX/
Files are deleted immediately! / No valid directory [/]



  ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
  ● ---------------------------------- ●
  ● |    ==> RUN THE FUNCTIONS <==   | ●
  ● ---------------------------------- ●
  ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

  -----------------------------------------------------------------------------------
  | check the python3 installation and the necessary modules:                       |
  -----------------------------------------------------------------------------------

                prepare_python: OK
Target temp directory:    /tmp/tmp.Lfwpb85NOt


  ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
  ● STEP 1 - RUN OCR / SPLIT FILES, IF NEEDED:                                      ●
  ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●


●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
CURRENT FILE:   ➜ scan.pdf
                  temp. target file: /tmp/tmp.Lfwpb85NOt/step1_tmp_1738069202/scan.pdf

  -----------------------------------------------------------------------------------
  | processing PDF @ OCRmyPDF:                                                      |
  -----------------------------------------------------------------------------------

                ➜ OCRmyPDF-LOG:
                  reading file from standard input
                  
                      1 page already has text! - rasterizing text and running OCR anyway
                      1 page is facing ⇧, confidence 18.19 - rotation appears correct
                  
                  Postprocessing...
                  Some input metadata could not be copied because it is not permitted in PDF/A. You may wish to examine the output PDF's XMP metadata.
                  
                  
                  
                  
                  Image optimization ratio: 1.47 savings: 32.0%
                  Total file size ratio: 0.74 savings: -35.5%
                  Output sent to stdout
                ← OCRmyPDF-LOG-END

                target file (OK): /tmp/tmp.Lfwpb85NOt/step1_tmp_1738069202/scan.pdf

                no split pattern defined or splitting not possible

  -----------------------------------------------------------------------------------
  | handle source file:                                                             |
  -----------------------------------------------------------------------------------

                ➜ delete source file (scan.pdf)
                removed directory '/tmp/tmp.Lfwpb85NOt/step1_tmp_1738069202/'

Stats:
  runtime last file:              ➜ 00:00:40
  runtime 1st step (all files):   ➜ 00:00:40


  ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
  ● STEP 2 - SEARCH TAGS / RENAME / SORT:                                           ●
  ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●


●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
CURRENT FILE:   ➜ scan.pdf

  -----------------------------------------------------------------------------------
  | search tags in ocr text:                                                        |
  -----------------------------------------------------------------------------------

                no tags defined

  -----------------------------------------------------------------------------------
  | search for a valid date in ocr text:                                            |
  -----------------------------------------------------------------------------------

2025-01-28 14:00:44,976 - Date scanning started
2025-01-28 14:00:44,976 - Version: 1.04
2025-01-28 14:00:44,976 - Parameter minYear = 0
2025-01-28 14:00:44,976 - Parameter maxYear = 0
2025-01-28 14:00:44,976 - Parameter searchnearest = off
2025-01-28 14:00:44,976 - set searchnearest = off
2025-01-28 14:00:44,977 - Parameter fileWithTextFindings = /tmp/tmp.Lfwpb85NOt/step2_tmp_1738069243//synOCR.txt
2025-01-28 14:00:44,977 - Start searching for alphanumerical and numerical dates......
2025-01-28 14:00:54,583 - finish searching for alphanumerical and numerical dates......
2025-01-28 14:00:54,584 - found 1 dates
2025-01-28 14:00:54,584 - found date 2025-01-14
2025-01-28 14:00:54,584 - Date scanning ended
                  Dates found: 1
                  check date ([yy]yy mm dd): 2025-01-14
                  ➜ valid
                      day:  14
                      month:01
                      year: 2025

  -----------------------------------------------------------------------------------
  | rename and sort to target folder:                                               |
  -----------------------------------------------------------------------------------

                ➜ renaming:
                  apply renaming syntax ➜ scan
                ➜ insert metadata (use python pikepdf)
                used metadata:
                ➜ '/Author': '',
                ➜ '/Keywords': '',
                ➜ '/CreationDate': 'D:20250114',
                ➜ '/CreatorTool': 'synOCR 1.4.5'
2025-01-28 14:00:55,231 - INFO - HandlePdf started
2025-01-28 14:00:55,232 - INFO - Version: 0.2
2025-01-28 14:00:55,232 - INFO - Task=metadata
2025-01-28 14:00:55,235 - INFO - >>>>> write meta_data started
2025-01-28 14:00:55,249 - INFO - save pdf to file (/tmp/tmp.Lfwpb85NOt/step2_tmp_1738069243/temp_scan_1738069243.pdf_meta.pdf)
empty
0
                  target file: scan.pdf

  -----------------------------------------------------------------------------------
  | adjusts the attributes of the target file:                                      |
  -----------------------------------------------------------------------------------

                ➜ Adapt file date (Source: Source file)

  -----------------------------------------------------------------------------------
  | final tasks:                                                                    |
  -----------------------------------------------------------------------------------

                  INFO: Notify for apprise not defined ...

run user defined post scripts:

Stats:
  runtime last file:    ➜ 00:00:12
  pagecount last file:  ➜ 1
  file count profile :  ➜ (profile XXX) - 229 PDF's / 604 Pages processed up to now
  file count total:     ➜ 386 PDF's / 938 Pages processed up to now since 2022-05-05

cleanup:
  delete tmp-files ...
                removed '/tmp/tmp.Lfwpb85NOt/scan.pdf'
                removed '/tmp/tmp.Lfwpb85NOt/step2_tmp_1738069243/synOCR.txt'
                removed '/tmp/tmp.Lfwpb85NOt/step2_tmp_1738069243/synOCR_filename.txt'
                removed directory '/tmp/tmp.Lfwpb85NOt/step2_tmp_1738069243/'
                removed directory '/tmp/tmp.Lfwpb85NOt'

  purge log files ...
  delete 0 log files ( > 10 files)
  delete 0 search files ( > 10 files)

  purge backup files ...
  delete 0 backup files ( > 1 days)

  runtime all files:              ➜ 00:00:53


  ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
  ● ---------------------------------- ●
  ● |    ==> END OF FUNCTIONS <==    | ●
  ● ---------------------------------- ●
  ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.621
Punkte für Reaktionen
1.466
Punkte
234
Wie gesagt: Diese Funktion wird direkt von OCRmyPDF bereitgestellt. In dem Projekt könntest du ein Ticket eröffnen.
 
  • Like
Reaktionen: Ghost108

wegomyway

Benutzer
Sehr erfahren
Mitglied seit
03. Aug 2022
Beiträge
1.521
Punkte für Reaktionen
662
Punkte
184
Ich bin fertig. Beide Varianten, @geimist und @Struppix, mit eigenem Profil „ausprobiert“. Natürlich, wie könnte es anders sein ☺️ funktionieren absolut fehlerfrei.
Ich hatte dieses „Projekt“ ja schon so weit getrieben, das ich im Vorfeld aussortiert hatte. Wirklich unwichtiges wurde vernichtet und nur das „wichtige“ blieb.
So waren es am Ende genau 275 „Rechnungen“ die nun digital abgelegt sind. Nicht so viel wie angenommen, aber DIE sind es. Sind immerhin Ordner ab 2003 bis 2024 (2025 ist noch nichts dazu gekommen).
Einige Dokus sind im Querformat vorliegend gewesen und hab mit PDF24tools ins Hochformat gedreht. Tool funktioniert wirklich gut, weil beispielsweise in einem PDF sich 3 Seiten befinden und eine davon hochformatig war. Das Tool kann jede Seite einzeln „drehen“.
Bei Erkennung der Jahreszahlen, ab und an 2-stellig, hat synOCR selbst DIE ab und an korrekt erkannt und ordnungsgemäß abgelegt (also liegt das im Grunde an der Qualität der „Bons“ die vorliegen). Alles überschaubar und gut ist es.
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat