
Semuanya dimulai norak - selama satu tahun sekarang perusahaan saya telah membayar biaya bulanan untuk layanan yang tahu bagaimana menemukan daerah dengan plat nomor di foto. Fungsi ini digunakan untuk membuat sketsa angka secara otomatis untuk beberapa klien.
Dan suatu hari, Kementerian Dalam Negeri Ukraina membuka akses ke
daftar kendaraan . Sekarang, dengan menggunakan plat, sudah dimungkinkan untuk memeriksa beberapa informasi tentang mobil (pembuatan, model, tahun pembuatan, warna, dll.)! Rutinitas membosankan pemrograman linier telah memudar sebelum tugas baru - untuk membaca angka di seluruh basis foto dan memvalidasi data ini dengan yang telah ditentukan pengguna. Anda sendiri tahu bagaimana itu terjadi "mata menyala" - panggilan itu diterima, semua tugas lain menjadi membosankan dan monoton untuk sementara waktu ... Kami mulai bekerja dan mendapatkan hasil yang baik, yang, pada kenyataannya, kami memutuskan untuk berbagi dengan masyarakat.
Untuk referensi: ke situs AUTO.RIA.com, sekitar 100.000 foto ditambahkan per hari.
Para pakar data telah lama dikenal dan mampu menyelesaikan masalah seperti itu, jadi
saya dan
dimabendera menulis artikel ini khusus untuk para programmer. Jika Anda tidak takut dengan frasa "jaringan konvolusional" dan tahu cara menulis "Hello World" dengan python - Anda dapat menggunakan kucing ...
Siapa lagi yang mengenali
Setahun yang lalu saya mempelajari pasar ini dan ternyata tidak banyak layanan dan perangkat lunak dapat bekerja dengan nomor negara exUSSR. Di bawah ini adalah daftar perusahaan tempat kami bekerja:
- Ada versi open source dan komersial. Versi OpenSource menunjukkan tingkat pengenalan yang sangat rendah, di samping itu, ia membutuhkan dependensi khusus untuk perakitan dan operasinya (kami tidak terlalu menyukainya). Versi komersial, atau lebih tepatnya, layanan komersial berfungsi dengan baik. Mampu bekerja dengan angka Rusia dan Ukraina. Harga sedang - 49 $ / 50 ribu pengakuan per bulan. Demo online OpenALPR
- Kami telah menggunakan layanan ini selama sekitar satu tahun. Kualitasnya bagus. Dia menemukan daerah dengan angka yang sangat baik. Layanan tidak tahu cara bekerja dengan nomor Ukraina dan Eropa. Perlu diperhatikan pekerjaan yang baik dengan gambar berkualitas rendah (di salju, foto resolusi rendah, ...). Harga layanan ini juga dapat diterima, tetapi mereka enggan untuk mengambil volume kecil.
Ada banyak sistem komersial dengan perangkat lunak tertutup, tetapi kami tidak menemukan implementasi opensource yang baik. Sebenarnya, ini sangat aneh, karena alat open source yang mendasari solusi untuk masalah ini sudah lama ada.
Alat apa yang dibutuhkan untuk mengenali angka
Menemukan objek dalam gambar atau dalam aliran video adalah tugas dari bidang visi komputer, yang diselesaikan dengan pendekatan yang berbeda, tetapi paling sering dengan bantuan yang disebut jaringan saraf convolutional. Kita perlu menemukan tidak hanya area di foto tempat objek yang diinginkan ditemukan, tetapi juga untuk memisahkan semua titik dari objek lain atau latar belakang. Tugas semacam ini disebut "Segmentasi Instans." Ilustrasi di bawah ini memvisualisasikan berbagai jenis tugas penglihatan komputer.

Saya tidak akan menulis banyak teori tentang bagaimana jaringan konvolusi bekerja, informasi ini cukup di jaringan dan laporan di youtube.
Dari arsitektur modern array convolutional untuk tugas segmentasi, mereka sering menggunakan:
U-Net atau
Mask R-CNN . Kami memilih Masker R-CNN.
Alat kedua yang kita butuhkan adalah perpustakaan pengenal teks yang dapat bekerja dengan berbagai bahasa dan yang dapat dengan mudah disesuaikan dengan spesifikasi teks yang akan kita kenali. Di sini pilihannya tidak terlalu bagus, yang paling canggih adalah
tesseract dari Google.
Ada juga sejumlah alat yang kurang "global" yang dengannya kita perlu menormalkan area dengan plat nomor (bawa sedemikian rupa sehingga pengenalan teks akan dimungkinkan). Biasanya OpenCV digunakan untuk konversi semacam itu.
Selain itu, akan mungkin untuk mencoba menentukan negara dan jenis yang dimiliki nomor plat, sehingga dalam pasca pemrosesan kami menerapkan templat perbaikan khusus untuk negara ini dan jenis nomor ini. Misalnya, pelat nomor Ukraina, mulai tahun 2015, didekorasi dengan warna biru dan kuning, terdiri dari templat "dua huruf empat angka dua huruf".

Selain itu, dengan memiliki statistik tentang frekuensi "pertemuan" di pelat nomor kombinasi huruf atau angka tertentu, Anda dapat meningkatkan kualitas pasca pemrosesan dalam situasi "kontroversial". "
Nomeroff net
Dari judul artikel itu jelas bahwa kita semua menerapkan dan menamai proyek
Nomeroff Net . Sekarang bagian dari kode untuk proyek ini sudah berfungsi dalam produksi di
AUTO.RIA.com . Tentu saja, ini masih jauh dari analog komersial, semuanya bekerja dengan baik hanya untuk nomor Ukraina. Selain itu, kecepatan yang dapat diterima dicapai hanya dengan dukungan modul GPU tensorflow! Tanpa GPU, Anda juga dapat mencoba, tetapi tidak pada Raspberry Pi :).
Semua bahan untuk proyek kami: kumpulan data yang ditandai dan model yang terlatih , kami diposting secara publik dengan izin dari RIA.com di bawah lisensi Creative Commons CC BY 4.0
Apa yang kita butuhkan
Dmitry dan saya semua menjalankan Fedora 28, saya yakin semuanya dapat diinstal pada distribusi Linux lainnya. Saya tidak ingin mengubah posting ini menjadi instruksi untuk menginstal dan mengonfigurasi tensorflow, jika Anda ingin mencoba dan sesuatu tidak berhasil - tanyakan di komentar, saya akan menjawab dan memberi tahu Anda.
Untuk mempercepat instalasi, kami berencana membuat dockerfile - harapkan dalam pembaruan proyek selanjutnya.
Nomeroff Net "Halo dunia"
Mari kita coba mengenali sesuatu. Kami mengkloning
repositori dengan kode dari
github . Kami mengunduh ke folder model,
model terlatih untuk mencari dan mengklasifikasikan angka, kami akan sedikit menyesuaikan variabel dengan lokasi folder untuk diri kita sendiri.
UPD: Kode ini sudah usang, hanya akan bekerja
di cabang 0.1.0 ,
lihat contoh terbaru di sini :
Semuanya bisa dikenali:
import os import sys import json import matplotlib.image as mpimg
Demo online
Mereka membuat sketsa
demo sederhana untuk mereka yang tidak ingin menginstal dan menjalankan semua ini :). Bersabar dan sabar dengan kecepatan naskah.
Jika Anda membutuhkan contoh angka Ukraina (untuk memeriksa operasi algoritme koreksi), ambil contoh
dari folder ini.Apa selanjutnya
Saya mengerti bahwa topik ini sangat khusus dan tidak mungkin menimbulkan minat yang besar di antara berbagai programmer, di samping itu, kode dan model masih cukup "mentah" dalam hal kualitas pengenalan, kecepatan, konsumsi memori, dll. Tetapi masih ada harapan bahwa akan ada penggemar yang akan tertarik pada model pelatihan untuk kebutuhan mereka, negara mereka, yang akan membantu dan memberi tahu Anda di mana ada masalah dan bersama kami akan membuat proyek tidak lebih buruk daripada rekan komersial.
Masalah yang Diketahui
- Proyek tidak memiliki dokumentasi, hanya contoh kode dasar.
- Sebagai modul pengenalan, tesseract OCR universal dipilih dan dapat membaca banyak, tetapi membuat banyak kesalahan. Dalam hal pengakuan angka Ukraina, sistem koreksi khusus ditulis di sana, yang sejauh ini mengkompensasi beberapa kesalahan, tetapi ada firasat bahwa banyak lagi yang bisa dilakukan di sini.
- Angka "Kotak" (plat nomor dengan proporsi 1: 2) cukup langka dan kami baru saja mulai mengatasinya, sehingga akan ada lebih banyak kesalahan dengan mereka.
- Terkadang, alih-alih plat nomor, model kami menemukan rambu jalan dengan nama desa, dashboard di dalam kabin, dan artefak lainnya.
- Dengan kualitas buruk dari jumlah atau resolusi rendah, wilayah 4 poin tidak sepenuhnya ditentukan
Pengumuman
Jika itu akan menarik bagi seseorang, di bagian kedua kita akan berbicara tentang bagaimana dan bagaimana menandai dataset Anda dan bagaimana melatih model Anda yang dapat bekerja lebih baik untuk konten Anda (negara Anda, ukuran foto Anda). Kami juga akan berbicara tentang cara membuat classifier Anda sendiri, yang, misalnya, akan membantu menentukan apakah nomornya dibuat sketsa di foto.
Beberapa contoh dalam Notebook Jupyter:
Tautan yang bermanfaat