Bagaimana cara memilih antara Tesseract dan OpenCV? [Tutup]

94

Saya baru-baru ini menemukan Tesseract dan OpenCV . Sepertinya Tesseract adalah mesin OCR yang lengkap dan OpenCV dapat digunakan sebagai kerangka kerja untuk membuat aplikasi / layanan OCR.

Saya mencoba menggunakan Tesseract pada beberapa gambar saya dan akurasinya tampaknya lumayan. Kemudian, saya menemukan tutorial yang sangat sederhana tentang penggunaan OpenCV untuk melakukan OCR menggunakan Python dan saya terkesan. Dalam beberapa menit, saya menyelesaikan pelatihan sistem dan akurasinya bagus. Tapi tentu saja, mengambil pendekatan ini berarti saya perlu melatih sistem saya secara ekstensif menggunakan set pelatihan yang besar.

Pertanyaan spesifik saya adalah sebagai berikut:

  • Bagaimana seseorang memilih antara Tesseract dan menggunakan OpenCV untuk membangun aplikasi OCR khusus?
  • Ada set data pelatihan yang tersedia untuk Tesseract untuk berbagai bahasa. Apakah OpenCV memiliki sesuatu yang serupa sehingga saya tidak perlu memulai dari awal untuk mencapai OCR?
  • Mana yang lebih baik untuk aplikasi komersial yang ingin menjadi?

Ada saran?

Legenda
sumber
8
Jawaban di bawah ini sangat bagus, tetapi sebagai salah satu yang telah bekerja dengan OCR, saya dapat memberi tahu Anda bahwa kualitas pengenalan di Tesseract di bawah ekspektasi pengguna aplikasi komersial. Tesseract hebat, tetapi OCR itu sulit - hal-hal seperti pelatihan online, atau peningkatan dengan cepat adalah hmmm ... masih penelitian. Google, sponsor besar di balik TS belakangan ini, telah memutuskan untuk membangun mesinnya sendiri - OCROpus. Dan sementara itu berjanji untuk membuka sumbernya, mesin pengenalan inti belum tersedia - mereka hanya menerbitkan kerangka kerja - itu adalah api untuk tesseract.
Sam
3
@vasile: Itu sangat informatif. Saya tidak menyadari OCROpus. Terima kasih. Apakah Anda punya saran untuk alternatif jika tujuan akhir saya adalah mengatakan menulis kartu nama OCR (atau katakanlah, yang membaca tanda terima pompa bensin seperti yang saya tautkan : upload.wikimedia.org/wikipedia/en/3/34/… )? Saya bertanya karena saya hanya ingin tahu apa yang digunakan banyak aplikasi seluler untuk mencapai ini. Saya tidak keberatan melakukan OCR di sisi server. Saya tergoda untuk menggunakan OpenCV setelah melihat demo keren ini: youtube.com/watch?v=OkcOfS1lTxs
Legenda
6
Ada sejumlah mesin OCR komersial, cukup google OCR accuracy testsdan Anda akan menemukan beberapa grafik. Dan berbicara tentang aplikasi seluler, kebanyakan dari mereka menggunakan tesseract. Tetapi jika Anda repot-repot mengunduh beberapa di antaranya, Anda akan melihat bahwa hasilnya sedikit berbeda dari yang dijanjikan. Mereka biasanya membuat demo video di lingkungan yang dikontrol dengan hati-hati dan mempostingnya di youtube, tetapi di alam liar, jika Anda memindai halaman / resep / kartu / apa pun, Anda akan mendapatkan hasil yang lucu.
Sam
1
@vasile: Terima kasih. Sesuatu yang membuatku sibuk malam ini. Sangat menghargai waktu Anda.
Legenda

Jawaban:

77
  • Tesseract adalah mesin OCR. Ini digunakan, dikerjakan dan didanai oleh Google secara khusus untuk membaca teks dari gambar, melakukan segmentasi dokumen dasar dan beroperasi pada masukan gambar tertentu (satu kata, baris, paragraf, halaman, kamus terbatas, dll.).

  • OpenCV, di sisi lain, adalah pustaka visi komputer yang menyertakan fitur yang memungkinkan Anda melakukan beberapa ekstraksi fitur dan klasifikasi data. Anda dapat membuat pemisah dan pengklasifikasi huruf sederhana yang menjalankan OCR dasar, tetapi ini bukan mesin OCR yang sangat baik (saya telah membuatnya dengan Python sebelumnya dari awal. Ini benar-benar tidak akurat untuk input yang menyimpang dari data pelatihan Anda).

Jika Anda ingin mendapatkan pemahaman dasar tentang seberapa keras OCR itu, coba OpenCV. Tesseract adalah untuk nyata OCR.

Blender
sumber
3
Itu tergantung pada gambar masukan Anda. Tesseract bekerja paling baik jika huruf-hurufnya tajam, dalam garis horizontal, diberi jarak, tidak terhubung, dan hitam-putih sempurna. Saya bermain-main dalam komunitas pemindaian / pelestarian buku DIY selama sekitar satu tahun dan mengerjakan perangkat lunak di waktu luang saya untuk memudahkan prosesnya. Perangkat lunak terbaik di luar sana (komersial atau tidak) untuk pasca-pemrosesan gambar apa pun dengan teks adalah Scan Tailor . Ini memiliki beberapa opsi CLI, tetapi jika Anda meluangkan waktu untuk melihat cara kerjanya, itu cukup luar biasa.
Blender
2
Saya mengerjakan kode sumber Scan Tailor sedikit dan tidak menggunakan OpenCV secara internal, tetapi banyak dari algoritma yang dibuat dapat ditulis ulang dengan fungsi OpenCV dengan sangat mudah. Jika gambar Anda tidak dibengkokkan dan tidak terdegradasi, Anda benar-benar hanya perlu menerapkan binarisasi adaptif dan beberapa despeckling sederhana sebelum memasukkan gambar Anda ke Tesseract.
Blender
1
Mengenai pertanyaan Anda, saya baru saja menguji beberapa gambar masukan acak kemarin. Saya mencoba tanda terima dari pompa bensin: upload.wikimedia.org/wikipedia/en/3/34/… Ini mengakui 0sebagai 8(dengan total $ 20.00). Saya akui angka itu sulit bahkan untuk saya pecahkan tetapi saya tidak yakin apa lagi yang bisa dilakukan untuk menyesuaikan Tesseract dengan situasi ini atau mungkin memperkenalkan komponen pembelajaran jika saya akan memiliki basis pengguna aktif.
Legenda
5
Tesseract dilatih untuk membaca kumpulan font tertentu. Huruf kotak itu bukan salah satunya. Anda harus memberikan Google korban hewan dan mencoba melatih Tesseract sendiri: code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3
Blender
1
Selain itu, sebelum Anda mulai menulis mesin OCR khusus untuk membaca surat-surat itu, jangan berharap itu akurat. Saya menulis satu untuk mengotomatiskan Wheel of Fortune dan contoh gambarnya (screenshot dari game online) adalah JPEG. Artefak dari kompresi JPEG cukup untuk mengacaukan pengklasifikasi gambar kecuali saya memberikan sekitar 10-20 gambar sampel untuk setiap karakter.
Blender
65

Saya adalah penulis dari tutorial pengenalan digit yang Anda sebutkan, dan saya akan mengatakan, itu bukan pengganti Tesseract.

Tesseract adalah mesin OCR yang sangat bagus, mungkin merupakan mesin OCR OpenSource terbaik.

Tutorial yang Anda sebutkan hanyalah sebuah percobaan, untuk memahami cara kerja OCR yang paling sederhana.

Jadi, jika Anda mencari aplikasi OCR, saya akan merekomendasikan Anda untuk menggunakan OpenCV untuk memproses gambar sebelumnya dan kemudian menerapkan mesin tesseract.

Abid Rahman K
sumber
1
+1 Terima kasih. Pertama-tama, terima kasih untuk tutorialnya :) Itu adalah bacaan yang sangat menarik. Apakah Anda mengetahui referensi / tutorial tentang cara memanfaatkan OpenCV bersama dengan Tesseract? Bukan berbicara tentang interfacing tetapi jenis transformasi gambar atau pra-pemrosesan yang perlu dilakukan untuk meningkatkan akurasi Tesseract?
Legenda
2
Hanya ingin mengatakan, bahwa meskipun Tesseract adalah mesin OCR yang baik dibandingkan dengan yang lain, ini masih cukup tidak akurat, saya memiliki tingkat keberhasilan sekitar 40% dalam membuat teks yang benar dikenali. Semoga menjadi lebih baik dalam beberapa tahun.
GangstaGraham
4
@GangstaGraham Anda hanya perlu melatih tesseract dan Anda bisa mendapatkan hasil yang lebih baik dalam beberapa jam atau hari, bukan tahun. opensource.newmediaist.com/tesseract-training.html
valentt
1
Saya menggunakan PyTesseract untuk ekstraksi teks waktu nyata. Ini berfungsi dengan baik di PC Linux tetapi sangat lambat di lingkungan Raspberry Pi ... Adakah cara untuk menginstal versi ringan? Misalnya, proses hanya angka dan huruf kapital dari alfabet Inggris?
Yuriy Chernyshov
9

Keduanya bisa saling melengkapi. Jika Anda membaca makalah tentang OpenCV: https://github.com/tesseract-ocr/docs/blob/master/tesseracticdar2007.pdf

Ini menyoroti bahwa "Karena HP memiliki teknologi analisis tata letak halaman yang dikembangkan secara mandiri yang digunakan dalam produk, (dan karenanya tidak dirilis untuk sumber terbuka) Tesseract tidak pernah memerlukan analisis tata letak halamannya sendiri. Oleh karena itu, Tesseract mengasumsikan bahwa inputnya adalah gambar biner dengan wilayah teks poligonal opsional ditentukan. "

Jenis tugas ini dapat dilakukan oleh OpenCV dan gambar yang dihasilkan diserahkan ke Tesseract. Anda dapat menemukan contoh kode jenis ini di repo Git: https://github.com/Itseez/opencv_contrib/tree/master/modules/text/samples Sampel menggunakan Tesseract API untuk melakukan konversi gambar ke teks.

pengguna2957542
sumber
3

OpenCV adalah library untuk CV , digunakan untuk menganalisis dan memproses gambar secara umum. Tesseract adalah pustaka untuk OCR , yang merupakan subset khusus CV yang didedikasikan untuk mengekstrak teks dari gambar.

Dari OpenCV.org

..... digunakan untuk mendeteksi dan mengenali wajah, mengidentifikasi objek, mengklasifikasikan tindakan manusia dalam video, melacak pergerakan kamera, melacak objek bergerak, mengekstrak model objek 3D, menghasilkan point cloud 3D dari kamera stereo, menjahit gambar bersama untuk menghasilkan high resolusi gambar seluruh pemandangan, temukan gambar serupa dari database gambar, hapus mata merah dari gambar yang diambil menggunakan flash, ikuti gerakan mata, kenali pemandangan, dan buat penanda untuk melapisinya dengan augmented reality, dll.

Dari Tesseract Github :

..... dapat digunakan secara langsung, atau (untuk pemrogram) menggunakan API untuk mengekstrak teks yang diketik, ditulis tangan, atau dicetak dari gambar. Ini mendukung berbagai bahasa.

Aniruddha Varma
sumber