docling icon indicating copy to clipboard operation
docling copied to clipboard

Fractions signs gone + Language switch missing?

Open Manamama opened this issue 1 year ago • 10 comments

Docling version: 2.3.1 Docling Core version: 2.3.1 Docling IBM Models version: 2.0.3 Docling Parse version: 2.0.2

Fine software: I have compared it with many alternatives. (BTW, for some newish PDFs, with the ready text layer, saving these via Alt+C from Chrome works surprisingly well for the EOLs: even archive.org seems to have fixed many older scans that way).

Problems with docling:

Fractions gone

The fractions are not handled well: they are gone from here: https://pages.mtu.edu/~shene/VIDEOS/GEOMETRY/004-Pythagorean-Thm/Pythagorean.pdf

  • it is not:
A ( AED ) = 1 1 -$\_{r}$ $\_{2}$A ( BCED ) =$^{(}$ ( a + c ) 2 ( a + c ) $^{2}$- b 2 $^{)(}$a $^{2}$( a + c ) b ) = a $^{2}$( a + c ) 3 b (( a + c ) $^{2}$- b $^{2}$)

but:

\[ A(AED) = \left( \frac{(a + c)^2 - b^2}{(a + c)^2} \right) A(BCED) = \left( \frac{(a + c)^2 - b^2}{(a + c)^2} \right) \frac{a^2(a + c)}{b} = \frac{a^2(a + c)^3}{b((a + c)^2 - b^2)} \]

or at least so do Bing AI and Perplexity say about their fixes. (The latter renders well in their UI then vs the original PDF).

Unable to Specify OCR Language in Docling CLI

Description: I am trying to configure the OCR language for document processing using docling with EasyOCR as the engine. However, I am unable to specify the language through command-line options, and attempts to use various flags have resulted in errors.

Steps to Reproduce:

docling ~/Downloads/szewcy2.pdf --config ~/Downloads/panlang.txt.yml text Error Message:

Usage: docling [OPTIONS] source
No such option: --config, -l, -lang, etc. 
  1. Attempt to set the language using an environment variable:

export EASYOCR_LANG='pl' # Set Polish as the OCR language docling ~/Downloads/szewcy2.pdf --ocr

Output: The OCR output remains unchanged, indicating that the specified language was not applied:

##      

kując młotem jakieś buty

Nie będziemy gadać niepotrzebnych rzeczy. Heగ! Heగ! Kuగ podeszwy! Kuగ podeszwy! 

(Should be Polish, so with the extended Latin diacritics only).

Expected Behavior: I expect to be able to specify the OCR language for EasyOCR when processing documents with docling, similar to how it can be done in other OCR tools like OCRmyPDF.

Manamama avatar Nov 02 '24 18:11 Manamama

Update, oh, I see it may be not that easy. The source PDF is weird:

Creator:         PDFium
Producer:        PDFium
CreationDate:    Sat Nov  2 20:11:38 2024 CET
Custom Metadata: no
Metadata Stream: no
Tagged:          no
UserProperties:  no
Suspects:        no
Form:            none
JavaScript:      no
Pages:           1
Encrypted:       no
Page size:       595.28 x 841.89 pts (A4)
Page rot:        0
File size:       67794 bytes
Optimized:       no
PDF version:     1.7
 ~/Downloads$ pdffonts ~/Downloads/szewcy2_3.1_pl.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
KLDFRZ+JunicodeWL-Regular            CID TrueType      Identity-H       yes yes yes     10  0
BZFBKT+JunicodeWL-Italic             CID TrueType      Identity-H       yes yes yes     17  0
FUGIBA+JunicodeWL-Regular            CID TrueType      Identity-H       yes yes yes     24  0
 

I attach one page of the source file then: szewcy2_3.1_pl.pdf

Manamama avatar Nov 02 '24 19:11 Manamama

Ok, it will not be that easy, methinks, as these CIDs are to blame:

~/Downloads/pdfcpu_0.9.1_Linux_x86_64$ docling-parse  -p ~/Downloads/szewcy2_3.1_pl.pdf | head
[02-11-2024 10:13:26 WARNING] /project/src/v1/proj_folders/pdf_library/qpdf/parser/cid_cmap.h:168	could not find file for name: Adobe-Identity-0
[02-11-2024 10:13:26 WARNING] /project/src/v1/proj_folders/pdf_library/qpdf/parser/cid_cmap.h:99	unknown name: Adobe-Identity-0
[02-11-2024 10:13:26 WARNING] /project/src/v1/proj_folders/pdf_library/qpdf/parser/cid_to_utf8.h:100	key: no-key is not known
[02-11-2024 10:13:26 WARNING] /project/src/v1/proj_folders/pdf_library/qpdf/parser/font.h:888	ignoring /FontFile2 in font_descriptor!
[02-11-2024 10:13:26 SUCCESS] /project/src/v1/proj_folders/pdf_library/qpdf/parser/stream.h:147	Font loaded: /F1
[02-11-2024 10:13:26 WARNING] /project/src/v1/proj_folders/pdf_library/qpdf/parser/cid_cmap.h:168	could not find file for name: Adobe-Identity-0
[02-11-2024 10:13:26 WARNING] /project/src/v1/proj_folders/pdf_library/qpdf/parser/cid_cmap.h:99	unknown name: Adobe-Identity-0
[02-11-2024 10:13:26 WARNING] /project/src/v1/proj_folders/pdf_library/qpdf/parser/cid_to_utf8.h:100	key: no-key is not known
[02-11-2024 10:13:26 WARNING] /project/src/v1/proj_folders/pdf_library/qpdf/parser/font.h:888	ignoring /FontFile2 in font_descriptor!
[02-11-2024 10:13:26 SUCCESS] /project/src/v1/proj_folders/pdf_library/qpdf/parser/stream.h:147	Font loaded: /F3
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
BrokenPipeError: [Errno 32] Broken pipe
~/Downloads/pdfcpu_0.9.1_Linux_x86_64$ 

Am I right that docling itself cannot gracefully map these to regular Unicode?

Manamama avatar Nov 02 '24 21:11 Manamama

@Manamama thanks for your report.

Setting the OCR language is currently supported in the python interface, but not on the CLI or through environment variables.

Example:

input_doc_path = Path("./tests/data/2206.01062.pdf")

pipeline_options = PdfPipelineOptions()
pipeline_options.ocr_options.lang = ["pl"] # one or multiple

doc_converter = DocumentConverter(
    format_options={
        InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options)
    }
)

conv_result = doc_converter.convert(input_doc_path)

cau-git avatar Nov 04 '24 13:11 cau-git

I have quickly coded your advice into python, below, but same results - the Polish engine does not engage:

import sys
from pathlib import Path
from docling.document_converter import DocumentConverter, PdfFormatOption
from docling.datamodel.pipeline_options import PdfPipelineOptions
from docling.datamodel.base_models import InputFormat

def main():
    # Check if the user provided the necessary arguments
    if len(sys.argv) < 3:
        print("Usage: doclingme <input_source> -l <language_code>")
        sys.exit(1)

    # Get the input source from command line arguments
    input_source = sys.argv[1]
    
    # Initialize pipeline options
    pipeline_options = PdfPipelineOptions()

    # Initialize lang_code variable
    lang_code = None

    # Check for language argument with -l flag
    if '-l' in sys.argv:
        lang_index = sys.argv.index('-l') + 1  # Find the index of -l and get next item
        if lang_index < len(sys.argv):
            lang_code = sys.argv[lang_index]  # Get the language code after -l

    # Set the OCR language only if lang_code is found
    if lang_code:
        pipeline_options.ocr_options.lang = [lang_code]  # Set specified language

    # Create a DocumentConverter instance with format options
    doc_converter = DocumentConverter(
        format_options={
            InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options)
        }
    )

    # Convert the document
    input_doc_path = Path(input_source)
    
    try:
        conv_result = doc_converter.convert(input_doc_path)
        print("Conversion successful!")
        
        # Example output processing (modify as needed)
        print(conv_result.document.export_to_markdown())  # Output to Markdown format
    except Exception as e:
        print(f"Error during conversion: {e}")

if __name__ == "__main__":
    main()
    

Results :

python ~Documents/Synchronized_with_Online/Code_snippets/Ubuntu/Scripts_python/doclingme.py ~/Downloads/Szambelan/Szambelan2/IMG20241104121740.jpg -l pol
Fetching 9 files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 9/9 [00:00<00:00, 31721.63it/s]
Neither CUDA nor MPS are available - defaulting to CPU. Note: This module is much faster with a GPU.
~/.local/lib/python3.10/site-packages/torch/cuda/__init__.py:716: UserWarning: Can't initialize NVML
  warnings.warn("Can't initialize NVML")
Conversion successful!
Fochodzenie jego i mlodosé kryja mroki tajemnicy'

Prokuratura ówczesna oraz wladze sledcze nie wykorzystaly jednak jak sie zdaje swych mozliwosci ujawnienia ,pochodzenia i mlodosci" Stefana Olpinskiego, skoro autor niniejszej opowiesci jeszcze w latach 1968 i 1969, nie dysponujac, rzecz prosta; aparatem prokuratury, policji itd, a nawet nie dysponujac delegacja sluzbowa, zdolal jednak, jak to siq za chwilq okaze; rozwiaé owe mroki tajemnicy" (inni mnie nie chwala sam musze  ) Dlaczego ówczesne wladze nie wykorzystaly wszystkich možliwošci zbadania przeszlosci podejrzanego; a potem   oskaržonego to inna sprawa, do której zapewne   dotrzemy wwe wlasciwym czasie.

zdanie to powtórzy} W trzydziesci siedem lat pézniej dzis juž nie prokurator; lecz adwokat Wladyslaw Sicroszewski W cytowanym artykule Przekroju Przypuszczam, že p Sieroszewski; piszqc swe interesujace   wspomnienie, na które przyjdzie mi sie jeszcze nieraz powolywaé, poslugiwal siq nie tylko pamiqcia, lecz równiez badí to dawnymi aktami sprawy, bqdí to przechowanymi notatkami czy tez relacjami prasowymi Z procesu glosnego i bar dzo szczególowo omawianego na amach gazet.

from the file attached IMG20241104121740

  • identical as without that language switch, whatever I try : pl or pol.

It works with easyocr itself though: time easyocr -l pl --detail 0 --paragraph True -f ~/Downloads/Szambelan/Szambelan2/IMG20241104121740.jpg

Neither CUDA nor MPS are available - defaulting to CPU. Note: This module is much faster with a GPU. Fochodzenie jego i mlodośe kryją mroki tajemnicy zdanie to powłórzył W trzydzieści siedem lat później dziś już nie prokurator; lecz adwokat Władysław Sicroszewski cytowa- nym artykule Przekroju" Przypuszczam, że p. Sieroszewski; pi- szac swe interesujące wspomnienie; na które przyjdzie mi się jeszcze nieraz powoływać, posługiwał się nie tylko pamięcią, lecz również bądź to dawnymi aktami sprawy, bądź to przechowanymi notatkami czy też relacjami prasowymi Z procesu głośnego i bar- dzo szczegółowo omawianego na łamach gazet. Prokuratura ówczesna oraz władze śledcze nie wykorzystały jednak jak się zdaje swych możliwości ujawnienia ,pocho- dzenia i młodości" Stefana Ołpińskiego; skoro autor niniejszej opo- wieści jeszcze w latach 1968 i 1969, nie dysponując; rzecz prosta; aparatem prokuratury, policji itd , a nawet nie dysponując dele- gacją służbową, zdołał jednak, jak to się za chwilę okaże; rozwiać owe mroki tajemnicy" (inni mnie nie chwalą sam muszę . ) Dlaczego ówczesne władze nie wykorzystały wszystkich możliwo- ści zbadania przeszłości podejrzanego; 9 potem oskarżonego to inna sprawa, do której zapewne dotrzemy we właściwym czasie Wracam do początkowego stwierdzenia: urodził się 1 żył na- prawdę. Urodził się. 99 99 Fakt; ale gdzie, kiedy, z jakiego rodu? Od- powiedź na te pytania, przyznaję, nie jest tak zupełnie prosta, jako że Stefan Ołpiński lubił przy różnych okazjach podawać róż - ne, zmienne dane 0 sobie. Powstał W końcu gąszcz dat, miejsco- wości; rodziły się przedziwne drzewa genealogiczne; tak że dość trudno było się w tym wszystkim rozeznać. Zacznijmy od daty urodzenia. Chcę powiedziee Z góry, że mimo dokumentu, na który powołam się całkowitej pewności nie mam. Skarżył się na wspomnianym procesie prokurator, Że Ołpiński podaje raz rok urodzenia: 1894, a innym razem: 1898. I rzeczywiście tak było. A jeszcze gdzie indziej zalazłem rok 1896. Nie zmienia się tylko data szczegółowa, miesiąc i dzień uro- dzenia: 1 stycznia. Przyznaję że ten noworoczny szczegół nasunął mi pewne wątpliwości, wynikające Z własnych doświadczeń: gdy W czasie okupacji posługiwałem się lewymi dokumentami; prosi - łem 0 wpisanie mi daty urodzin: 1 stycznia, jako że to łatwo było 6

What am I doing wrong?

Manamama avatar Nov 04 '24 14:11 Manamama

@Manamama, could you post your pipeline_options from datamodel as well? I directly changed all options there to another language (Korean 'ko' and English 'en') and dumped the extracted text into json using encoding='utf-8' to make it work. I believe it should support Polish as well unless it's not supported in EasyOCR module itself.

bit-scientist avatar Nov 26 '24 08:11 bit-scientist

On mobile (Termux) here - I will be "testing aloud", writing as I go. I am doing this:

  1. Update docling: Collecting docling Downloading docling-2.8.0-py3-none-any.whl.metadata (7.2 kB), Collecting docling-parse<3.0.0,>=2.0.5 (from docling) ...
  2. Fails at Downloading pypdfium2-4.30.0.tar.gz (140 kB) now. Using a trick to pip install -U pypdfium2 -v and make your docling use that version then. Fails at pypdfium2 requires fork of ctypesgen now.
  3. Switching to prooted Debian on Droid, tbc.

Manamama avatar Nov 28 '24 02:11 Manamama

  1. continued: We have:
Environment at local 🎋 prooted system:
Linux localhost 6.2.1-PRoot-Distro #1 SMP PREEMPT Thu Mar 17 16:28:22 CST 2022 aarch64 GNU/Linux

and working:

Docling version: 2.8.0
Docling Core version: 2.5.1
Docling IBM Models version: 2.0.6
Docling Parse version: 2.1.2

Your docling --help shows --ocr-lang, so I am going to use that instead of that bespoke Python above.

Using my sample from above: https://github.com/DS4SD/docling/issues/208#issuecomment-2454830531, with Mr Ołpiński story, but screenshooting it this time.

Using docling --from image /storage/emulated/0/DCIM/Screenshots/Screenshot_2024-11-28-04-02-57-49.jpg --to text --ocr-engine easyocr --ocr-lang pol .

Docling seems to be pulling the easyocr model files: config.json: 100%|█| 41.0/41.0 [00:00<00:00, 28.9k .gitattributes: 100%|█| 1.71k/1.71k [00:00<00:00, README.md: 100%|█| 3.49k/3.49k [00:00<00:00, 4.46M (…)del_artifacts/tableformer/tm_config.json: 100%| (…)artifacts/tableformer/fat/tm_config.json: 100%| .gitignore: 100%|█| 5.18k/5.18k [00:00<00:00, 4.67 Fetching 9 files: 22%|▏| 2/9 (tbc)

Manamama avatar Nov 28 '24 02:11 Manamama

  1. I have switched to a regular Ubuntu (and PC) to speed things up, as it had the model downloaded. The same docling versions as in Point 3, so we do:
docling --from image ~/Downloads/Szambelan/Szambelan2/IMG20241104121740.jpg --to text --ocr-engine easyocr --ocr-lang pol  
Fetching 9 files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 9/9 [00:00<00:00, 35213.37it/s]
WARNING:easyocr.easyocr:Neither CUDA nor MPS are available - defaulting to CPU. Note: This module is much faster with a GPU.

the CPU spins up, and we get: file IMG20241104121740.txt IMG20241104121740.txt: Unicode text, UTF-8 text, with very long lines (618) which alas is as it used to be:

$ glow IMG20241104121740.txt

                                                                                  
  Fochodzenie jego i mlodosé kryja mroki tajemnicy'                               
                                                                                  
  Prokuratura ówczesna oraz wladze sledcze nie wykorzystaly jednak jak sie zdaje  
  swych mozliwosci ujawnienia ,pochodzenia i mlodosci" Stefana Olpinskiego, skoro 
  autor niniejszej opowiesci jeszcze w latach 1968 i 1969, nie dysponujac, rzecz  
  prosta; aparatem prokuratury, policji itd, a nawet nie dysponujac delegacja     
  sluzbowa, zdolal jednak, jak to siq za chwilq okaze; rozwiaé owe mroki          
  tajemnicy" (inni mnie nie chwala sam musze  ) Dlaczego ówczesne wladze nie      
  wykorzystaly wszystkich možliwošci zbadania przeszlosci podejrzanego; a potem   
  oskaržonego to inna sprawa, do której zapewne   dotrzemy wwe wlasciwym czasie.  
                                                                                  
  zdanie to powtórzy} W trzydziesci siedem lat pézniej dzis juž nie prokurator;   
  lecz adwokat Wladyslaw Sicroszewski W cytowanym artykule Przekroju Przypuszczam,
  že p Sieroszewski; piszqc swe interesujace   wspomnienie, na które przyjdzie mi 
  sie jeszcze nieraz powolywaé ... 

which should be like this: że p. Sieroszewski, piszqc swe interesujące wspomnienie, na które przyjdzie mi się jeszcze nieraz powoływać - so the diacritics are all over the place.

We check it against time easyocr -l pl --detail 0 --paragraph True -f ~/Downloads/Szambelan/Szambelan2/IMG20241104121740.jpg :

Fochodzenie jego i mlodośe kryją mroki tajemnicy zdanie to powłórzył W trzydzieści siedem lat później dziś już nie prokurator; lecz adwokat Władysław Sicroszewski cytowa- nym artykule Przekroju" Przypuszczam, że p. Sieroszewski; pi- szac swe interesujące  wspomnienie; na które przyjdzie mi się jeszcze nieraz powoływać
...
real	0m41.952s
user	1m47.563s
sys	0m15.030s

the Polish diacritics are here, but then there are other weird issues in easy OCR's output.

As your help rightly says: Provide a comma-separated list of languages used by the OCR engine. Note that each OCR engine has different values for the language names, let us try pl this time, to match it with EasyOCR's ISO standard.

Identical results - the language code is not picked up by the actual OCR engine and the silent errors occur (wrong diacritics again):

~$ glow IMG20241104121740.txt

                                                                                  
  Fochodzenie jego i mlodosé kryja mroki tajemnicy'                               
                                                                                  
  Prokuratura ówczesna oraz wladze sledcze nie wykorzystaly jednak jak sie zdaje  
  swych mozliwosci ujawnienia ,pochodzenia i mlodosci" Stefana Olpinskiego, skoro 
  autor niniejszej opowiesci jeszcze w latach 1968 i 1969, nie dysponujac, rzecz  
  prosta; aparatem prokuratury, policji itd, a nawet nie dysponujac delegacja     
  sluzbowa, zdolal jednak, jak to siq za chwilq okaze; rozwiaé owe mroki          
  tajemnicy" (inni mnie nie chwala sam musze  ) Dlaczego ówczesne wladze nie      
  wykorzystaly wszystkich možliwošci zbadania przeszlosci podejrzanego; a potem   
  oskaržonego to inna sprawa, do której zapewne   dotrzemy wwe wlasciwym czasie.  
                                                                                  
  zdanie to powtórzy} W trzydziesci siedem lat pézniej dzis juž nie prokurator;   
  lecz adwokat Wladyslaw Sicroszewski W cytowanym artykule Przekroju 

This also is weird:

time docling --from image ~/Downloads/Szambelan/Szambelan2/IMG20241104121740.jpg --to text --ocr-engine tesseract --ocr-lang pol  -v
INFO:docling.document_converter:Going to convert document batch...
Fetching 9 files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 9/9 [00:00<00:00, 16159.56it/s]
WARNING:easyocr.easyocr:Neither CUDA nor MPS are available - defaulting to CPU. Note: This module is much faster with a GPU.
INFO:docling.pipeline.base_pipeline:Processing document IMG20241104121740.jpg
INFO:docling.document_converter:Finished converting document IMG20241104121740.jpg in 44.18 sec.
INFO:docling.cli.main:writing Text output to IMG20241104121740.txt
INFO:docling.cli.main:Processed 1 docs, of which 0 failed
INFO:docling.cli.main:All documents were converted in 44.22 seconds.

real	0m55.919s
user	1m57.016s

same with time docling --from image ~/Downloads/Szambelan/Szambelan2/IMG20241104121740.jpg --to text --ocr-engine ocrmac --ocr-lang pl -v

the easyocr engine still seems to be used (not tesseract) and the result are alas the same, no diacritics:

glow IMG20241104121740.txt

                                                                                  
  Fochodzenie jego i mlodosé kryja mroki tajemnicy'                               
                                                                                  
  Prokuratura ówczesna oraz wladze sledcze nie wykorzystaly jednak jak sie zdaje  
  swych mozliwosci ujawnienia...

End of tests.

Manamama avatar Nov 28 '24 04:11 Manamama

I may have found the culprit - actual code (mis)uses easyOCR as engine if JPG, see https://github.com/DS4SD/docling/issues/505 . Ugly solution: print JPG as PDF and then try (works).

Manamama avatar Dec 03 '24 14:12 Manamama

Over many a morning coffee, I have written an extensive hack to overcome it in that version, here: https://github.com/Manamama/Ubuntu_Scripts_1/blob/main/docling_me.sh

Manamama avatar Dec 04 '24 10:12 Manamama

It appears that this issue is addressed in multiple places and can be closed.

  1. Using pipeline_options.ocr_options.force_full_page_ocr = True (or --force-ocr on the CLI) in case you have a PDF file that comes out badly.
  2. Using the OCR language selection (--ocr-lang) for EasyOcr or other engines.

cau-git avatar Dec 09 '24 15:12 cau-git

Quick sanity tests of the current docling: Name: docling Version: 2.10.0 and the same JPG above:

  1. Docling via easyocr: time docling ".../Downloads/Olpinski01.jpg" --ocr-lang pl :

A. Time

real	1m12.713s
user	2m21.273s
sys	0m15.843s

B. Works as before: WARNING:easyocr.easyocr:Neither CUDA nor MPS are available - defaulting to CPU. Note: This module is much faster with a GPU.

C. But the diacritics are there !:

glow Olpinski01.md

  Fochodzenie jego i młodość kryją mroki tajemnicy'                               
                                                                                  
  Prokuratura ówczesna oraz władze śledcze nie wykorzystały jednak jak się zdaje  
  swych możliwości ujawnienia ,pochodzenia i młodości" Stefana Olpińskiego, skoro 
  autor niniejszej opowieści jeszcze w latach 1968 i 1969, nie dysponując, rzecz  
  prosta; aparatem prokuratury, policji itd, a nawet nie dysponując delegacją     
  służbową, zdołał jednak, jak to się za chwilę okaże; rozwiać owe mroki          
  tajemnicy" (inni mnie nie chwalą sam muszę  ) Dlaczego ówczesne władze nie      
  wykorzystały wszystkich możliwości zbadania przeszłości podejrzanego; a potem   
  oskarżonego to inna sprawa, do której zapewne   dotrzemy wwe właściwym czasie.  
                                                                                  
  zdanie to powtórzył W trzydzieści siedem lat później dzis już nie prokurator;

C. The sentences are jumbled at the start, as before, vide infra (where they are ok).

  1. Docling and tesseract via Python: time docling "~/Olpinski01.jpg" --ocr-engine tesseract --ocr-lang pl errors:
Traceback (most recent call last):
...
    self.initialized_pipelines[pipeline_class] = pipeline_class(
  File "/home/~/.local/lib/python3.10/site-packages/docling/pipeline/standard_pdf_pipeline.py", line 61, in __init__
    if (ocr_model := self.get_ocr_model()) is None:
  File "/home/~/.local/lib/python3.10/site-packages/docling/pipeline/standard_pdf_pipeline.py", line 124, in get_ocr_model
    return TesseractOcrModel(
  File "/home/user/.local/lib/python3.10/site-packages/docling/models/tesseract_ocr_model.py", line 66, in __init__
    self.reader = tesserocr.PyTessBaseAPI(
  File "tesserocr/tesserocr.pyx", line 1287, in tesserocr.tesserocr.PyTessBaseAPI.__cinit__
  File "tesserocr/tesserocr.pyx", line 1311, in tesserocr.tesserocr.PyTessBaseAPI._init_api
RuntimeError: Failed to init API, possibly an invalid tessdata path: /usr/share/tesseract-ocr/5/tessdata/

We check:

ls " /usr/share/tesseract-ocr/5/tessdata/"
ls: cannot access ' /usr/share/tesseract-ocr/5/tessdata/': No such file or directory
~:~/Downloads$ 

But tessaract itself has them:

esseract --list-langs
List of available languages in "/usr/share/tesseract-ocr/5/tessdata/" (17):
deu
eng
fra
lat
lit
old/deu
old/eng
old/fra
old/pol
old/rus
old/spa
old/ukr
osd
pol
rus
spa
ukr

so possibly Python's tessaract has access problems as:

ll "/usr/share/tesseract-ocr/5/tessdata/"
total 119052
drwxr-xr-x 5 root  root      4096 Nov 16 13:58 ./
drwxr-xr-x 3 root  root      4096 Sep 26 13:36 ../
drwxr-xr-x 2 root  root      4096 Nov 16 13:58 configs/
-rw-r--r-- 1 root  root   8628461 Nov  5 20:12 deu.traineddata
-rw-r--r-- 1 root  root  15400601 Nov  5 20:10 eng.traineddata
-rw-r--r-- 1 root  root   3972885 Nov  5 20:12 fra.traineddata
-rw-rw-r-- 1 root  root  11993085 Jan 15  2024 lat.traineddata
-rw-rw-r-- 1 user user 19560399 Sep 26 12:54 lit.traineddata

Upgrading pip -U install tesseract anyway, just in case... Successfully installed tesseract-0.1.3 and identical error:

 File "/home/user/.local/lib/python3.10/site-packages/docling/models/tesseract_ocr_model.py", line 66, in __init__
    self.reader = tesserocr.PyTessBaseAPI(
  File "tesserocr/tesserocr.pyx", line 1287, in tesserocr.tesserocr.PyTessBaseAPI.__cinit__
  File "tesserocr/tesserocr.pyx", line 1311, in tesserocr.tesserocr.PyTessBaseAPI._init_api
RuntimeError: Failed to init API, possibly an invalid tessdata path: /usr/share/tesseract-ocr/5/tessdata/

Aha! Tesseract takes other ISO format for the lang switch, so: --ocr-lang pol and it works:

real	0m49.725s
user	0m53.073s
sys	0m3.085s

Polish diacritics are here, but the order of sentences is different to EasyOCR's, quite a lot:


  „Pochodzenie jego i młodość kryją mroki tajemnicy".                             
                                                                                  
  I zdanie to powtórzył w trzydzieści siedem lat później dziś już nie prokurator, 
  lecz adwokat Władysław Sieroszewski w cytowanym artykule „Przekroju".           
  Przypuszczam, że p. 5Dieroszewski, pisząc swe interesujące wspomnienie, na które
  przyjdzie mi sie jeszcze nieraz powoływać, posługiwał się nie tylko pamięcią,   
  lecz również bądź to dawnymi aktami sprawy, bądź ło przechowanymi notatkami czy 
  też relacjami prasowymi z procesu głośnego i bardzo szczegółowo omaw  lane  90  
  na łamach gazet.                                                                
                                                                                  
  Prokuratura ówczesna oraz władze śledcze nie wykorzystały jeanak - jak się zdaje -
  swych możliwości ujawnienia „pochodzenia i młodości" Stefana Ołpińskiego, skoro 
  autor niniejszej opowieści jeszcze w latach 1968 i 1969, nie dysponując, rzecz  
  prosta, aparatem prokuratury, policji itd., a nawet nie dysponując delegacją    
  służbową, zdołał jednak, jak to sie za chwile okaże, rozwiać ie nie chwalą - sam
  muszę...). ki tajemnicy" (inni mnie nie chwalą owe „mroki tajen Dlaczego        
  ówczesne władze nie wykorzystały wszystkich możliwości zbadania przeszłości     
  podejrzanego, a potem oskarżonego - to inna sprawa, do której zapewne dotrzemy  
  we                                                                              
  właściwym Czasie.                                                               
                                                                                  
  Wracam do początkowego stwierdzenia...

My advice: add smth like for easyOCR to catch the language code mistake:

raise ValueError(unknown_lang, 'is not supported') ValueError: ({'pl'}, 'is not supported')

{yes, pl not supported in tesseract in turn}

  1. --ocr-engine tesseract_cli --ocr-lang pol Works (as uses system's tesseract via OS calls, I presume), and : A. Takes surprising amount of RAM: 4 GB, more or less. B. Takes longer (!) than easyOCR or python's tesseract:
real	1m37.413s
user	2m10.913s
sys	0m4.468s

and the actual results are predictably identical to Point 2:

glow Olpinski01.md 

 „Pochodzenie jego i młodość kryją mroki tajemnicy".                             
                                                                                 
 I zdanie to powtórzył w trzydzieści siedem lat później dziś już nie prokurator, 
 lecz adwokat Władysław Sieroszewski w cytowanym artykule „Przekroju".    ... 
  1. time docling ../Olpinski01.jpg --ocr-engine rapidocr --ocr-lang pol out of curiosity (it should have no pol, I know) Result: A. A page of onnxruntime "CPU not GPU" warnings:
2024-12-09 21:05:04,012 - OrtInferSession - INFO: !!!Recommend to use rapidocr_paddle for inference on GPU.
INFO:OrtInferSession:!!!Recommend to use rapidocr_paddle for inference on GPU.
2024-12-09 21:05:04,012 - OrtInferSession - INFO: (For reference only) If you want to use GPU acceleration, you must do:
INFO:OrtInferSession:(For reference only) If you want to use GPU acceleration, you must do:
2024-12-09 21:05:04,012 - OrtInferSession - INFO: First, uninstall all onnxruntime pakcages in current environment.
INFO:OrtInferSession:First, uninstall all onnxruntime pakcages in current environment.
2024-12-09 21:05:04,012 - OrtInferSession - INFO: Second, install onnxruntime-gpu by `pip install onnxruntime-gpu`.
INFO:OrtInferSession:Second, install onnxruntime-gpu by `pip install onnxruntime-gpu`.
...
2024-12-09 21:05:04,169 - OrtInferSession - INFO: !!!Recommend to use rapidocr_paddle for inference on GPU.
INFO:OrtInferSession:!!!Recommend to use rapidocr_paddle for inference on GPU.
...
2024-12-09 21:05:04,170 - OrtInferSession - WARNING: DirectML is only supported in Windows OS. The current OS is Linux. Use AzureExecutionProvider inference by default.
WARNING:OrtInferSession:DirectML is only supported in Windows OS. The current OS is Linux. Use AzureExecutionProvider inference by default.


B. The fastest:

real	0m43.482s
user	1m13.736s
sys	0m3.444s

C. Quality Amazingly, apart from the zero diacritics (as expected), decent quality of the OCR itself: the sentences are rightly placed (unlike to the wrong placement of Easy OCR) , and some tricky words (strings) "Pochodzenie" is there.

glow Olpinski01.md 

  ,Pochodzenie jego i mlodose kryja mroki tajemnicy"                              
                                                                                  
  I zdanie to powtorzyl w trzydziesci siedem lat pozniej dzis juz nie prokurator, 
  lecz adwokat Wladyslaw Sieroszewski w cytowanym artykule                        
  ,Przekroju".Przypuszczam, ze p. Sieroszewski, piszac swe interesujace           
  wspomnienie, na ktore przyjdzie mi sie jeszcze nieraz powolywac, poslugiwal sie 
  nie tylko pamiecia,lecz rowniez badz to dawnymi aktami sprawy,badz to           
  przechowanymi notatkami czy tez relacjami prasowymi z procesu glosnego i bardzo 
  szczegolowo omawianego na lamach gazet.                                         
                                                                                  
  Prokuratura 6wczesna oraz wladze sledcze nie wykorzystaly jednak ... 

Good job! My JPG to PDF hack is not needed anymore...

Manamama avatar Dec 09 '24 20:12 Manamama