Berapa banyak programmer dan kata-kata yang Anda butuhkan untuk mengenali paspor tulisan tangan?

Apakah Anda pikir paspor tulisan tangan sering ditemukan di negara kita? Ketika kami mulai merancang sistem pengenalan paspor di Smart Engines , sepertinya cukup untuk mengajarkan sistem untuk mengenali dokumen yang diketik dengan cara yang berkualitas. Pada saat itu, keberadaan paspor tulisan tangan yang tidak dapat dikenali secara otomatis tampaknya tidak menjadi masalah penting: ada cukup banyak masalah yang belum terselesaikan tanpanya. Setahun yang lalu, menganalisis kualitas kerja Smart IDReader, kami menyadari bahwa kami sampai pada titik di mana paspor tulisan tangan merupakan kelas kesalahan yang signifikan. Sesuai dengan pendekatan ilmiah, mereka mempelajari masalah dan mengambil keputusan. Hari ini akan ada cerita tentang bagaimana kita membuat pengakuan paspor tulisan tangan Federasi Rusia, berhasil memecahkan masalah terakhir dalam cara mengotomatisasi sepenuhnya input data paspor.


Tugas mengenali teks tulisan tangan secara umum terdengar mendasar, berskala besar, dan tidak dapat dipecahkan. Karena itu, pada awalnya penting untuk membatasi formalisasi tugas dengan benar. Jadi, kita akan mengenali teks tulisan tangan dari putaran utama paspor sipil Rusia. Paspor seperti itu diisi dengan tulisan tangan kaligrafi yang rapi (setidaknya menurut paspor). Di satu sisi, ini membuat tugas lebih mudah: kita tidak harus mengenali "coretan medis" dan teks yang kurang dibaca lainnya. Tapi, di sisi lain, kita harus menghadapi semua variabilitas gaya kaligrafi huruf Cyrillic. Yah, well, ini lebih merupakan tantangan serius, bukan masalah yang tidak dapat diatasi.

Tugas pengenalan tulisan tangan di paspor kami dibagi menjadi tiga subtugas:

  1. Deteksi keberadaan naskah di paspor.
  2. Segmentasi garis tulisan tangan menjadi karakter.
  3. Pengenalan karakter dan pasca-pemrosesan.

Lebih lanjut dalam artikel kami akan memberi tahu Anda lebih banyak tentang solusi untuk setiap subtugas. Tetapi pertama-tama, kita akan membahas satu masalah yang sangat penting yang selalu muncul pertama kali dalam pengakuan - dataset. Tanpa dataset, pengenalan normal tidak dapat dilakukan: bahkan jika Anda dapat melatih jaringan saraf pada data yang disintesis, Anda masih membutuhkan data yang akan memungkinkan Anda untuk mengukur keakuratan sistem yang dilatih. Ternyata, tidak ada set data naskah yang cocok di jaringan. Oleh karena itu, daftar subtugas kami dilengkapi dengan titik nol - "Mempersiapkan dataset." Kami mendekati proses ini secara kreatif: kami mendistribusikan buku catatan "dalam penggaris" dan meminta semua programmer kami untuk "membiasakan diri dengan peran" para ahli kaligrafi - untuk menulis ulang beberapa teks yang telah disiapkan sebelumnya dengan tulisan tangan yang indah. Ini adalah ayat-ayat oleh A.S. Pushkin.

Di sini kami menunggu kekecewaan pertama. Tidak peduli seberapa sulit kedengarannya, ternyata programmer kami benar-benar lupa cara menulis. Dan Anda tidak dapat mengatakan bahwa mereka tidak mencoba. Tidak, mereka hanya lupa bagaimana mengeja huruf dengan tangan. Berikut adalah contoh dari apa yang terjadi:



Setuju, itu sama sekali tidak apa yang dibutuhkan. Surat-suratnya menari-nari, ukurannya tidak dihormati ... Aku harus mencari buku-buku salinan di Internet, dan, seperti di kelas pertama, tulis semua orang dalam arti kata yang sebenarnya! Kami masih ingat saat ini dengan senyuman: seluruh tim (tanpa kecuali, dari siswa kelas tiga hingga dokter sains terhormat) duduk di sebuah meja dan dengan hati-hati menampilkan surat.



Dalam dua hari, setelah mengisi tangan kami, kami siap mengulangi upaya untuk mengumpulkan data "mentah" untuk dataset tulisan tangan. Surat-surat menjadi lebih halus, kata-kata lebih mudah dibaca. Dan beberapa bahkan berhasil memperkenalkan beberapa elemen kaligrafi. Sekarang, lihat sendiri sampel-sampel baru:









Sebagai hasil dari kekosongan dengan teks dan tulisan tangan yang berbeda, kami mengumpulkan sekitar 1000 buah, dengan hati-hati mendigitalkannya dan meletakkannya dalam garis dan simbol. Semua, selamat, dataset naskah sudah siap. Kembali ke algoritme.

Deteksi naskah paspor


Deteksi naskah adalah elemen penting dari sistem pengenalan dokumen industri. Fungsionalitas ini termasuk dalam kategori "pemahaman dokumen" dan sangat diminati oleh pelanggan bisnis. Kami melatih jaringan saraf konvolusional biner, yang menganalisis gambar input dari setiap baris teks paspor. Masing-masing bidang paspor dianalisis untuk manuskrip menggunakan jaringan ini dan kemudian, dengan menimbang perkiraan yang diterima, keputusan umum dibuat pada "manuskrip" paspor secara keseluruhan.

Segmentasi garis tulisan tangan menjadi karakter


Segmentasi tulisan tangan secara fundamental berbeda dari segmentasi naskah. Untuk memahami tingkat pertama masalah, coba tulis tangan kata "chinchilla" dan lihat "barisan kait yang ramping" ini. Untuk segmentasi tes tulisan tangan, kami kembali menggunakan jaringan saraf. Kami melatih jaringan saraf khusus, yang sebagai jawaban mengembalikan perkiraan kehadiran "pemotongan" antara huruf pada setiap titik gambar input teks. Selanjutnya, menerapkan prinsip-prinsip pemrograman dinamis, bagian surat dibangun.




Masalah menempatkan celah di antara huruf-huruf jauh dari semua rasa sakit segmentasi. Anda harus benar membatasi setiap karakter secara vertikal. Dan di sini pencarian untuk garis "dasar", yang sering digunakan ketika mengenali teks yang dicetak, sama sekali tidak berlaku - ketinggian huruf tulisan tangan melompat dalam batas yang tidak terbatas.

Pengenalan Karakter dan Pemrosesan Pasca


Masalah mengenali karakter tulisan tangan terutama gaya yang sama dari karakter yang berbeda. Lihatlah contoh di atas: nama keluarga mana yang ditulis - "Petrov" atau "Netrov"? Ketika seseorang membaca teks tulisan tangan, dia tidak pernah membacanya karakter demi karakter, tetapi selalu dalam konteks yang diberikan. Sistem pengakuan dalam kasus ini harus berperilaku dengan cara yang sama. Jadi, jaringan saraf yang mengenali karakter tulisan tangan harus "toleran" terhadap berbagai huruf yang memiliki tipe yang sama (dari sudut pandang matematis, ia harus mengembalikan nilai kepercayaan yang sama untuk karakter tersebut), dan algoritma berikutnya untuk menganalisis dan memproses hasil pengenalan (jadi disebut "postprocessors") harus mempertimbangkan fitur dari bidang yang dikenali.

Apa yang kita capai pada akhirnya?


Jadi, dalam setahun, kami belajar mengenali paspor tulisan tangan, meninggalkan masalah mendasar yang tampaknya tidak dapat dipecahkan beberapa tahun yang lalu! Apa berikutnya? Kemudian, seperti biasa, kerjakan kualitas dan batas baru.

PS Saya hampir lupa tentang jawaban untuk pertanyaan yang disebutkan dalam judul. Jadi, kami memiliki 62 programmer di perusahaan. Kami membeli 150 notebook dan mencetak 2.000 lembar resep.


All Articles