Pengenalan Karakter Optik dengan Tesseract

1. Ikhtisar

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

Dalam tutorial ini, kita akan menjelajahi Tesseract, mesin pengenalan karakter optik (OCR), dengan beberapa contoh pemrosesan gambar-ke-teks.

2. Tesseract

Tesseract adalah mesin OCR sumber terbuka yang dikembangkan oleh HP yang mengenali lebih dari 100 bahasa, bersama dengan dukungan bahasa ideografik dan bahasa kanan-ke-kiri. Selain itu, kami dapat melatih Tesseract untuk mengenali bahasa lain .

Ini berisi dua mesin OCR untuk pemrosesan gambar - mesin OCR LSTM (Long Short Term Memory) dan mesin OCR lama yang bekerja dengan mengenali pola karakter.

Mesin OCR menggunakan perpustakaan Leptonica untuk membuka gambar dan mendukung berbagai format keluaran seperti teks biasa, hOCR (HTML untuk OCR), PDF, dan TSV.

3. Penyiapan

Tesseract tersedia untuk diunduh / dipasang di semua sistem operasi utama.

Misalnya, jika kami menggunakan macOS, kami dapat menginstal mesin OCR menggunakan Homebrew:

brew install tesseract 

Kami akan mengamati bahwa paket tersebut berisi sekumpulan file data bahasa, seperti bahasa Inggris, dan orientasi dan deteksi skrip (OSD), secara default:

==> 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

Namun, kita dapat menginstal modul tesseract-lang untuk mendukung bahasa lain:

brew install tesseract-lang

Untuk Linux, kita dapat menginstal Tesseract menggunakan perintah yum :

yum install tesseract

Demikian juga, mari tambahkan dukungan bahasa:

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

Di sini, kami telah menambahkan data bahasa terlatih untuk bahasa Inggris dan Spanyol.

Untuk Windows, kita bisa mendapatkan installer dari Tesseract di UB Mannheim.

4. Baris Perintah Tesseract

4.1. Lari

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

Sebagai contoh, mari kita ambil cuplikan dari situs web kita:

Kemudian, kita akan menjalankan perintah tesseract untuk membaca snapshot baeldung.png dan menulis teks di file output.txt :

tesseract baeldung.png output

File output.txt akan terlihat seperti ini:

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

Kami dapat mengamati bahwa Tesseract belum memproses seluruh konten gambar. Karena keakuratan keluaran bergantung pada berbagai parameter seperti kualitas gambar, bahasa, segmentasi halaman, data terlatih, dan mesin yang digunakan untuk pemrosesan gambar.

4.2. Dukungan bahasa

Secara default, mesin OCR menggunakan bahasa Inggris saat memproses gambar. Namun, kita bisa mendeklarasikan bahasa dengan menggunakan argumen -l :

Mari kita lihat contoh lain dengan teks multi-bahasa:

Pertama, mari proses gambar dengan bahasa Inggris default:

tesseract multiLanguageText.png output 

Outputnya akan terlihat 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.

Lalu, mari kita proses gambar tersebut dengan bahasa Portugis:

tesseract multiLanguageText.png output -l por

Jadi, mesin OCR juga akan mendeteksi 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.

Demikian pula, kita dapat mendeklarasikan kombinasi bahasa:

tesseract multiLanguageText.png output -l spa+por

Di sini, mesin OCR terutama akan menggunakan bahasa Spanyol dan kemudian Portugis untuk pemrosesan gambar. Namun, keluarannya bisa berbeda berdasarkan urutan bahasa yang kita tentukan.

4.3. Mode Segmentasi Halaman

Tesseract mendukung berbagai mode segmentasi halaman seperti OSD, segmentasi halaman otomatis, dan teks renggang.

Kita dapat mendeklarasikan mode segmentasi halaman dengan menggunakan argumen –psm dengan nilai 0 hingga 13 untuk berbagai mode:

tesseract multiLanguageText.png output --psm 1

Di sini, dengan menentukan nilai 1, kami telah mendeklarasikan segmentasi halaman Otomatis dengan OSD untuk pemrosesan gambar.

Mari kita lihat semua mode segmentasi halaman yang didukung:

4.4. Mode Mesin OCR

Demikian pula, kita dapat menggunakan berbagai mode mesin seperti legacy dan mesin LSTM saat memproses gambar.

Untuk ini, kita bisa menggunakan argumen –oem dengan nilai 0 sampai 3:

tesseract multiLanguageText.png output --oem 1

Mode mesin OCR adalah:

4.5. Tessdata

Tesseract berisi dua set data terlatih untuk mesin LSTM OCR - model LSTM terlatih terbaik dan versi integer cepat dari model LSTM terlatih.

Yang pertama memberikan akurasi yang lebih baik, dan yang terakhir menawarkan kecepatan yang lebih baik dalam pemrosesan gambar.

Also, Tesseract provides a combined trained data with support for both legacy and LSTM OCR engine.

If we use the Legacy OCR engine without providing the supporting trained data, Tesseract will throw an error:

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!

So, we should download the required .traineddata files and either keep them in the default tessdata location or declare the location using the –tessdata-dir argument:

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

4.6. Output

We can declare an argument to get the required output format.

For instance, to get searchable PDF output:

tesseract multiLanguageText.png output pdf

This will create the output.pdf file with the searchable text layer (with recognized text) on the image provided.

Similarly, for hOCR output:

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 memeriksa alat baris perintah tesseract untuk memproses gambar, bersama dengan satu set argumen seperti -l , –psm dan –oem .

Kemudian, kita telah menjelajahi tess4j , pembungkus Java untuk mengintegrasikan Tesseract dalam aplikasi Java.

Seperti biasa, semua implementasi kode tersedia di GitHub.