Dan lagi tentang captcha

Di sini, di Habré sering ada artikel tentang pengenalan captcha. Saya selalu membacanya dengan penuh minat, dan hari ini giliran saya untuk menulis. Perjalanan dari penerapan naif dengan Tesseract ke layanan web dengan jaringan neural yang kompleks membutuhkan waktu sekitar satu tahun. Jumlah kesalahan pengenalan dikurangi dari 90 menjadi kurang dari 1%.





Setelah layanan hosting file yang cukup terkenal sekali lagi mengubah sesuatu dalam algoritme, dan sebelum mengunduh, jendela masukan captcha mulai muncul di program unduhan. Itu menjengkelkan, dan solusi lama sepertinya tidak berfungsi lagi. Saya mulai berpikir tentang bagaimana memecahkan masalah. Dengan plug-in yang terhubung ke program, semuanya ternyata menjadi sederhana, terserah pengenalan captcha itu sendiri. Ini terdiri dari 4 simbol berwarna (huruf, angka) dengan ukuran berbeda yang diputar hingga 30 derajat di kedua arah pada latar belakang berwarna dengan garis lurus tipis. Sebagai hasil pencarian, saya menemukan program OCR Tesseract, menyimpan beberapa file dengan captcha dan mencoba mengenalinya. Solusi yang naif memberikan sekitar 10% dari hasil yang benar, cukup cepat menjadi mungkin untuk menetapkan daftar karakter yang diizinkan - ini meningkatkan persentase klik menjadi 20. Sudah mungkin untuk bekerja dengan ini - menulis dengan Pythonsebuah program yang mengirimkan captcha untuk dikenali dan mengembalikan hasilnya ke program unduhan. Sepanjang jalan, saya mulai bereksperimen dengan pemrosesan gambar grafis untuk meningkatkan akurasi pengenalan. Awalnya saya mencoba mengubahnya menjadi hitam dan putih, tetapi karena resolusi rendah dan beberapa gradien warna, tepi simbol ternyata terpotong. Saya berhenti menurunkan chroma dengan membuang 6 bit warna yang paling tidak signifikan. Saya juga mendapatkan ide untuk memproses gambar karakter demi karakter, memecah gambar menjadi beberapa bagian dan mencoba beberapa kali pada sudut rotasi yang berbeda. Rotasi dari -30 ke 30 dengan langkah 5 derajat dengan pemilihan hasil yang paling umum memberikan akurasi 30-40%, tetapi waktu untuk satu captcha meningkat menjadi 12 detik.





Tesseract . , - . OCR .





, , 3 . , . - , . , , . , 40-50%. .





- OpenCV NumPy . , , . 70-80%, 85 . - , . .





, MNIST . ( 2500), 2828 , 25% - 9000 . , Keras Tensorflow, 100% 75% . - 1,8 . , NumPy, . "Python Machine Learning" , .





. , , . , . , - . , , . , , . 90%.





, 6000 . , 2 , . - , - - "How to implement an OCR model using CNNs, RNNs and CTC loss". Keras.





, "" , 2%. "", , 20 . - , ( ), . , , - 15000 . - - , 2 . 1 250 . Keras Tensorflow . 3 2 , . - Flask, .





, . , .





:









  1. - - ,





  2. ,





  3. - -





  4. " , . , , , " ()








All Articles