Saya telah menggunakan tesseract untuk mengubah dokumen menjadi teks. Kualitas dokumen berkisar liar, dan saya mencari kiat tentang jenis pengolahan gambar apa yang dapat meningkatkan hasil. Saya perhatikan bahwa teks yang sangat berpiksel - misalnya yang dihasilkan oleh mesin faks - sangat sulit untuk diproses oleh tesseract - mungkin semua tepi bergerigi pada karakter mengacaukan algoritma pengenalan bentuk.
Apa jenis teknik pemrosesan gambar yang akan meningkatkan akurasi? Saya telah menggunakan Gaussian blur untuk memuluskan gambar-gambar ter-pixellated dan melihat sedikit peningkatan, tetapi saya berharap ada teknik yang lebih spesifik yang akan menghasilkan hasil yang lebih baik. Ucapkan filter yang disetel ke gambar hitam putih, yang akan menghaluskan tepi yang tidak beraturan, diikuti dengan filter yang akan meningkatkan kontras untuk membuat karakter lebih berbeda.
Adakah tip umum untuk seseorang yang baru memulai pemrosesan gambar?
sumber
Saya sama sekali bukan ahli OCR. Tapi saya minggu ini harus mengkonversi teks dari jpg.
Saya mulai dengan jpg piksel 445x747 berwarna. Saya segera mencoba tesseract pada ini, dan program hampir tidak mengubah apa pun. Saya kemudian pergi ke GIMP dan melakukan yang berikut. image> mode> grayscale image> scale image> filter 1191x2000 piksel> boost> unsharp mask dengan nilai radius = 6.8, jumlah = 2.69, threshold = 0 Saya kemudian disimpan sebagai jpg baru dengan kualitas 100%.
Tesseract kemudian dapat mengekstraksi semua teks menjadi file .txt
Gimp adalah temanmu.
sumber
Tiga poin untuk meningkatkan keterbacaan gambar: 1) Ubah ukuran gambar dengan tinggi dan lebar variabel (kalikan 0,5 dan 1 dan 2 dengan tinggi dan lebar gambar). 2) Konversi gambar ke format Skala abu-abu (Hitam dan putih). 3) Hapus piksel noise dan buat lebih jelas (Saring gambar).
Lihat kode di bawah ini:
GAMBAR INPUT
GAMBAR OUTPUT
sumber
Sebagai patokan, saya biasanya menerapkan teknik pra-pemrosesan gambar berikut ini menggunakan pustaka OpenCV:
Menyimpan ulang gambar (disarankan jika Anda bekerja dengan gambar yang memiliki DPI kurang dari 300 dpi):
Konversi gambar ke skala abu-abu:
Menerapkan pelebaran dan erosi untuk menghilangkan kebisingan (Anda dapat bermain dengan ukuran kernel tergantung pada kumpulan data Anda):
Menerapkan blur, yang dapat dilakukan dengan menggunakan salah satu dari baris berikut (masing-masing memiliki pro dan kontra, namun, median blur dan filter bilateral biasanya berkinerja lebih baik daripada gaussian blur.):
Saya baru-baru ini menulis panduan yang cukup sederhana untuk Tesseract tetapi seharusnya memungkinkan Anda untuk menulis skrip OCR pertama Anda dan menjernihkan beberapa rintangan yang saya alami ketika semuanya kurang jelas daripada yang saya inginkan dalam dokumentasi.
Jika Anda ingin memeriksanya, di sini saya membagikan tautan dengan Anda:
Memulai dengan Tesseract - Bagian I: Pendahuluan
Memulai dengan Tesseract - Bagian II: Pra-pemrosesan Gambar
sumber
Ini agak lalu tetapi mungkin masih berguna.
Pengalaman saya menunjukkan bahwa mengubah ukuran gambar dalam memori sebelum meneruskannya ke tesseract terkadang membantu.
Coba berbagai mode interpolasi. Posting https://stackoverflow.com/a/4756906/146003 banyak membantu saya.
sumber
Apa yang sangat membantu saya dalam hal ini adalah kode sumber untuk proyek Capture2Text. http://sourceforge.net/projects/capture2text/files/Capture2Text/ .
BTW: Kudos kepada penulisnya karena berbagi algoritma yang begitu melelahkan.
Berikan perhatian khusus pada file Capture2Text \ SourceCode \ leptonica_util \ leptonica_util.c - itulah inti dari preprocession gambar untuk utilitas ini.
Jika Anda akan menjalankan binari, Anda dapat memeriksa transformasi gambar sebelum / setelah proses di folder Capture2Text \ Output \.
Solusi yang disebutkan PS menggunakan Tesseract untuk OCR dan Leptonica untuk preprocessing.
sumber
Versi Java untuk kode Sathyaraj di atas:
sumber
Dokumentasi Tesseract berisi beberapa detail bagus tentang cara meningkatkan kualitas OCR melalui langkah-langkah pemrosesan gambar.
Pada tingkat tertentu, Tesseract secara otomatis menerapkannya. Dimungkinkan juga untuk memberi tahu Tesseract untuk menulis gambar perantara untuk diperiksa, yaitu untuk memeriksa seberapa baik pemrosesan gambar internal bekerja (cari
tessedit_write_images
dalam referensi di atas).Lebih penting lagi, sistem jaringan saraf baru di Tesseract 4 menghasilkan hasil OCR yang jauh lebih baik - secara umum dan terutama untuk gambar dengan noise. Ini diaktifkan dengan
--oem 1
, misalnya dalam:(contoh ini memilih bahasa jerman)
Jadi, masuk akal untuk menguji terlebih dahulu seberapa jauh Anda mendapatkan dengan mode LSTM Tesseract baru sebelum menerapkan beberapa langkah pemrosesan gambar pra-pemrosesan kustom.
sumber
Ambang batas adaptif penting jika pencahayaan tidak merata di seluruh gambar. Preprocessing saya menggunakan GraphicsMagic disebutkan dalam posting ini: https://groups.google.com/forum/#!topic/tesseract-ocr/jONGSChLRv4
GraphicsMagic juga memiliki fitur -lat untuk Linear time Adaptive Threshold yang akan saya coba segera.
Metode thresholding lain menggunakan OpenCV dijelaskan di sini: http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_thresholding/py_thresholding.pyml
sumber
Saya melakukan ini untuk mendapatkan hasil yang baik dari gambar yang memiliki teks yang tidak terlalu kecil.
Dan jika masih belum mendapatkan hasil yang baik, skala gambar menjadi 150% atau 200%.
sumber
Membaca teks dari dokumen gambar menggunakan mesin OCR memiliki banyak masalah untuk mendapatkan akurasi yang baik. Tidak ada solusi pasti untuk semua kasus tetapi di sini ada beberapa hal yang harus dipertimbangkan untuk meningkatkan hasil OCR.
1) Adanya noise karena kualitas gambar yang buruk / elemen / gumpalan yang tidak diinginkan di wilayah latar belakang. Ini membutuhkan beberapa operasi pra-pemrosesan seperti penghilangan derau yang dapat dengan mudah dilakukan dengan menggunakan filter gaussian atau metode filter median normal. Ini juga tersedia di OpenCV.
2) Orientasi gambar yang salah: Karena orientasi yang salah, mesin OCR gagal untuk membagi garis dan kata-kata dalam gambar dengan benar yang memberikan akurasi terburuk.
3) Kehadiran garis: Sambil melakukan segmentasi kata atau garis, mesin OCR kadang-kadang juga mencoba menggabungkan kata-kata dan garis secara bersamaan dan dengan demikian memproses konten yang salah dan karenanya memberikan hasil yang salah. Ada masalah lain juga tetapi ini adalah masalah mendasar.
Aplikasi post OCR ini adalah contoh kasus di mana beberapa pre-preocessing dan pemrosesan post pada hasil OCR dapat diterapkan untuk mendapatkan akurasi OCR yang lebih baik.
sumber
Pengenalan Teks tergantung pada berbagai faktor untuk menghasilkan output kualitas yang baik. Output OCR sangat tergantung pada kualitas gambar input. Inilah sebabnya mengapa setiap mesin OCR memberikan panduan mengenai kualitas gambar input dan ukurannya. Pedoman ini membantu mesin OCR untuk menghasilkan hasil yang akurat.
Saya telah menulis artikel terperinci tentang pemrosesan gambar dengan python. Silakan ikuti tautan di bawah ini untuk penjelasan lebih lanjut. Juga menambahkan kode sumber python untuk mengimplementasikan proses tersebut.
Silakan tulis komentar jika Anda memiliki saran atau ide yang lebih baik tentang topik ini untuk memperbaikinya.
https://medium.com/cashify-engineering/improve-accuracy-of-ocr-using-image-preprocessing-8df29ec3a033
sumber
Anda dapat melakukan pengurangan noise dan kemudian menerapkan ambang, tetapi Anda dapat bermain-main dengan konfigurasi OCR dengan mengubah nilai --psm dan --oem
coba: --psm 5 --oem 2
Anda juga dapat melihat tautan berikut untuk detail lebih lanjut di sini
sumber