docling
docling copied to clipboard
Fractions signs gone + Language switch missing?
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:
-
Attempt to process that PDF file with e.g. a configuration file for language settings:
docling ~/Downloads/szewcy2.pdf --config ~/Downloads/panlang.txt.yml
text
Error Message:
Usage: docling [OPTIONS] source
No such option: --config, -l, -lang, etc.
- 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.
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
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 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)
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
- identical as without that language switch, whatever I try :
plorpol.
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, 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.
On mobile (Termux) here - I will be "testing aloud", writing as I go. I am doing this:
- 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)... - Fails at
Downloading pypdfium2-4.30.0.tar.gz (140 kB)now. Using a trick topip install -U pypdfium2 -vand make your docling use that version then. Fails atpypdfium2 requires fork of ctypesgennow. - Switching to prooted Debian on Droid, tbc.
- 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)
- 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.
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).
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
It appears that this issue is addressed in multiple places and can be closed.
- Using
pipeline_options.ocr_options.force_full_page_ocr = True(or--force-ocron the CLI) in case you have a PDF file that comes out badly. - Using the OCR language selection (
--ocr-lang) forEasyOcror other engines.
Quick sanity tests of the current docling: Name: docling Version: 2.10.0 and the same JPG above:
- 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).
- Docling and tesseract via Python:
time docling "~/Olpinski01.jpg" --ocr-engine tesseract --ocr-lang plerrors:
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}
--ocr-engine tesseract_cli --ocr-lang polWorks (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". ...
time docling ../Olpinski01.jpg --ocr-engine rapidocr --ocr-lang polout of curiosity (it should have nopol, 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...