Pengecaman Watak Optik dengan Tesseract

1. Gambaran keseluruhan

Dengan kemajuan teknologi dalam AI dan pembelajaran mesin, kami memerlukan alat untuk mengenali teks dalam gambar.

Dalam tutorial ini, kita akan meneroka Tesseract, mesin pengecam watak optik (OCR), dengan beberapa contoh pemprosesan gambar ke teks.

2. Tesseract

Tesseract adalah mesin OCR sumber terbuka yang dikembangkan oleh HP yang mengenali lebih dari 100 bahasa, bersama dengan sokongan bahasa ideografis dan kanan ke kiri. Juga, kita boleh melatih Tesseract untuk mengenali bahasa lain .

Ia mengandungi dua enjin OCR untuk pemprosesan gambar - mesin OCR LSTM (Long Short Term Memory) dan mesin OCR lama yang berfungsi dengan mengenali corak watak.

Enjin OCR menggunakan perpustakaan Leptonica untuk membuka gambar dan menyokong pelbagai format output seperti teks biasa, hOCR (HTML untuk OCR), PDF, dan TSV.

3. Persediaan

Tesseract tersedia untuk dimuat turun / dipasang pada semua sistem operasi utama.

Contohnya, jika kita menggunakan macOS, kita boleh memasang enjin OCR menggunakan Homebrew:

brew install tesseract 

Kami akan memerhatikan bahawa pakej tersebut mengandungi sekumpulan fail data bahasa, seperti bahasa Inggeris, dan orientasi dan pengesanan skrip (OSD), secara lalai:

==> Installing tesseract ==> Downloading //homebrew.bintray.com/bottles/tesseract-4.1.1.high_sierra.bottle.tar.gz ==> Pouring tesseract-4.1.1.high_sierra.bottle.tar.gz ==> Caveats This formula contains only the "eng", "osd", and "snum" language data files. If you need any other supported languages, run `brew install tesseract-lang`. ==> Summary /usr/local/Cellar/tesseract/4.1.1: 65 files, 29.9MB

Walau bagaimanapun, kita boleh memasang modul tesseract-lang untuk sokongan bahasa lain:

brew install tesseract-lang

Untuk Linux, kita boleh memasang Tesseract menggunakan arahan yum :

yum install tesseract

Begitu juga, mari tambahkan sokongan bahasa:

yum install tesseract-langpack-eng yum install tesseract-langpack-spa

Di sini, kami telah menambahkan data terlatih berbahasa Inggeris dan Sepanyol.

Untuk Windows, kita boleh mendapatkan pemasang dari Tesseract di UB Mannheim.

4. Tesseract Command-Line

4.1. Lari

Kita boleh menggunakan alat baris perintah Tesseract untuk mengekstrak teks dari gambar.

Sebagai contoh, mari kita ambil gambar laman web kami:

Kemudian, kami akan menjalankan perintah tesseract untuk membaca snapshot baeldung.png dan menulis teks dalam fail output.txt :

tesseract baeldung.png output

The output.txt fail akan kelihatan seperti:

a REST with Spring Learn Spring (new!) The canonical reference for building a production grade API with Spring. From no experience to actually building stuff. y Java Weekly Reviews

Kita dapat melihat bahawa Tesseract belum memproses keseluruhan kandungan gambar. Kerana ketepatan output bergantung pada berbagai parameter seperti kualitas gambar, bahasa, segmentasi halaman, data terlatih, dan mesin yang digunakan untuk pemprosesan gambar.

4.2. Sokongan Bahasa

Secara lalai, mesin OCR menggunakan bahasa Inggeris semasa memproses gambar. Walau bagaimanapun, kita dapat menyatakan bahasa dengan menggunakan argumen -l :

Mari kita lihat contoh lain dengan teks berbilang bahasa:

Pertama, mari memproses gambar dengan bahasa Inggeris lalai:

tesseract multiLanguageText.png output 

Hasilnya akan kelihatan seperti:

Der ,.schnelle” braune Fuchs springt iiber den faulen Hund. Le renard brun «rapide» saute par-dessus le chien paresseux. La volpe marrone rapida salta sopra il cane pigro. El zorro marron rapido salta sobre el perro perezoso. A raposa marrom rapida salta sobre 0 cao preguicoso.

Kemudian, mari kita memproses gambar dengan bahasa Portugis:

tesseract multiLanguageText.png output -l por

Oleh itu, mesin OCR juga akan mengesan huruf Portugis:

Der ,.schnelle” braune Fuchs springt iber den faulen Hund. Le renard brun «rapide» saute par-dessus le chien paresseux. La volpe marrone rapida salta sopra il cane pigro. El zorro marrón rápido salta sobre el perro perezoso. A raposa marrom rápida salta sobre o cão preguiçoso.

Begitu juga, kita dapat menyatakan gabungan bahasa:

tesseract multiLanguageText.png output -l spa+por

Di sini, enjin OCR terutamanya akan menggunakan bahasa Sepanyol dan kemudian Portugis untuk pemprosesan imej. Walau bagaimanapun, output dapat berbeza berdasarkan urutan bahasa yang kami tentukan.

4.3. Mod Segmentasi Halaman

Tesseract menyokong pelbagai mod segmentasi halaman seperti OSD, segmentasi halaman automatik, dan teks yang jarang.

Kita boleh menyatakan mod segmentasi halaman dengan menggunakan argumen –psm dengan nilai 0 hingga 13 untuk pelbagai mod:

tesseract multiLanguageText.png output --psm 1

Di sini, dengan menentukan nilai 1, kami telah menyatakan segmentasi halaman Automatik dengan OSD untuk pemprosesan gambar.

Mari lihat semua mod segmentasi halaman yang disokong:

4.4. Mod Enjin OCR

Begitu juga, kita boleh menggunakan pelbagai mod enjin seperti mesin legacy dan LSTM semasa memproses gambar.

Untuk ini, kita boleh menggunakan argumen –oem dengan nilai 0 hingga 3:

tesseract multiLanguageText.png output --oem 1

Mod enjin OCR adalah:

4.5. Tessdata

Tesseract mengandungi dua set data terlatih untuk enjin LSTM OCR - model LSTM terlatih terbaik dan versi integer pantas model LSTM terlatih.

Yang pertama memberikan ketepatan yang lebih baik, dan yang kedua menawarkan kelajuan yang lebih baik dalam pemprosesan gambar.

Juga, Tesseract menyediakan gabungan data terlatih dengan sokongan untuk enjin OCR lama dan LSTM.

Sekiranya kita menggunakan enjin Legacy OCR tanpa memberikan data terlatih yang menyokong, Tesseract akan menimbulkan kesalahan:

Error: Tesseract (legacy) engine requested, but components are not present in /usr/local/share/tessdata/eng.traineddata!! Failed loading language 'eng' Tesseract couldn't load any languages!

Oleh itu, kita harus memuat turun fail .traineddata yang diperlukan dan menyimpannya di lokasi tessdata lalai atau menyatakan lokasi menggunakan argumen –tessdata-dir :

tesseract multiLanguageText.png output --tessdata-dir /image-processing/tessdata

4.6. Pengeluaran

Kami dapat menyatakan argumen untuk mendapatkan format output yang diperlukan.

Contohnya, untuk mendapatkan output PDF yang dapat dicari:

tesseract multiLanguageText.png output pdf

Ini akan membuat fail output.pdf dengan lapisan teks yang boleh dicari (dengan teks yang dikenali) pada gambar yang disediakan.

Begitu juga untuk output hOCR:

tesseract multiLanguageText.png output hocr

Also, we can use tesseract –help and tesseract –help-extra commands for more information on the tesseract command-line usage.

5. Tess4J

Tess4J is a Java wrapper for the Tesseract APIs that provides OCR support for various image formats like JPEG, GIF, PNG, and BMP.

First, let's add the latest tess4j Maven dependency to our pom.xml:

 net.sourceforge.tess4j tess4j 4.5.1 

Then, we can use the Tesseract class provided by tess4j to process the image:

File image = new File("src/main/resources/images/multiLanguageText.png"); Tesseract tesseract = new Tesseract(); tesseract.setDatapath("src/main/resources/tessdata"); tesseract.setLanguage("eng"); tesseract.setPageSegMode(1); tesseract.setOcrEngineMode(1); String result = tesseract.doOCR(image);

Here, we've set the value of the datapath to the directory location that contains osd.traineddata and eng.traineddata files.

Finally, we can verify the String output of the image processed:

Assert.assertTrue(result.contains("Der ,.schnelle” braune Fuchs springt")); Assert.assertTrue(result.contains("salta sopra il cane pigro. El zorro"));

Additionally, we can use the setHocr method to get the HTML output:

tesseract.setHocr(true);

By default, the library processes the entire image. However, we can process a particular section of the image by using the java.awt.Rectangle object while calling the doOCR method:

result = tesseract.doOCR(imageFile, new Rectangle(1200, 200));

Similar to Tess4J, we can use Tesseract Platform to integrate Tesseract in Java applications. This is a JNI wrapper of the Tesseract APIs based on the JavaCPP Presets library.

6. Conclusion

In this article, we've explored the Tesseract OCR engine with a few examples of image processing.

Pertama, kami meneliti alat baris perintah tesseract untuk memproses gambar, bersama dengan sekumpulan argumen seperti -l , –psm dan –oem .

Kemudian, kami telah meneroka tess4j , pembungkus Java untuk mengintegrasikan Tesseract dalam aplikasi Java.

Seperti biasa, semua pelaksanaan kod tersedia di GitHub.