Mastering OpenCV with Practical Computer Vision Projects / Опановуюємо OpenCV через практичні проекти комп'ютерного зору: Розділ 5. Розпізнавання номерних пластин з використанням SVM та нейронних мереж

← →
Английский оригинал Перевод на украинский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

У цьому розділі завдання оптичного розпізнавання символів можна оцінити на основі розміру шаблонів низької роздільної здатності та кількості нейронів прихованого рівня.
Ми закодували застосунок evalOCR.cpp, у якому використали файл тренувальних даних у форматі XML, згенерований програмою trainOCR.cpp. Файл OCR.xml зберігає тренувальні матриці розмірності 5x5, 10x10, 15x15 та 20x20 зі зменшеними шаблонами зображень.

Atronax 04.03.21 в 15:29

0

Mat classes;
Mat trainingData;
//Зчитуємо файл з тренувальними даними.
FileStorage fs;
fs.open("OCR.xml", FileStorage::READ);
fs[data] >> trainingData;
fs["classes"] >> classes;

Atronax 04.03.21 в 15:33

0

Код оцінки опрацьовує кожну зменшену матрицю особливої зони та отримує 100 випадкових рядів для тренування, а також інші, для тестування алгоритму та перевірки помилок.
Перед тренуванням системи тестуємо кожен випадковий елемент на коректність відповіді. Якщо вона неправильна, додаємо одиницю до змінної, що позначає кількість помилок, а потім ділимо результат на кількість примірників. В результаті матимемо відношення похибки від 0 до 1 при тренуванні випадковими даними:

Atronax 04.03.21 в 15:48

0

float test(Mat samples, Mat classes)
{
float errors=0;
for(int i=0; i<samples.rows; i++)
{
int result= ocr.classify(samples.row(i));
if(result!= classes.at<int>(i))
errors++;
}
return errors/samples.rows;
}

Atronax 04.03.21 в 15:48

0

Застосунок повертає в командній стрічці вихідне відношення похибки для кожного розміру примірників. Для якісної оцінки маємо натренувати програми різними випадковими рядами; в результаті це дасть різні тестові значення похибок. Потім додамо їх та знайдемо середнє значення. Щоб виконати це завдання, створимо скрипт bash для автоматизації процесу:

Atronax 04.03.21 в 15:51

0

#!/bin/bash
echo "#ITS \t 5 \t 10 \t 15 \t 20" > data.txt
folder=$(pwd)
for numNeurons in 10 20 30 40 50 60 70 80 90 100 120 150 200 500
do
s5=0;
s10=0;
s15=0;
s20=0;
for j in {1..100}

Atronax 04.03.21 в 15:52

0

do
echo $numNeurons $j
a=$($folder/build/evalOCR $numNeurons TrainingDataF5)
s5=$(echo "scale=4; $s5+$a" | bc -q 2>/dev/null)
a=$($folder/build/evalOCR $numNeurons TrainingDataF10)
s10=$(echo "scale=4; $s10+$a" | bc -q 2>/dev/null)
a=$($folder/build/evalOCR $numNeurons TrainingDataF15)
s15=$(echo "scale=4; $s15+$a" | bc -q 2>/dev/null)
a=$($folder/build/evalOCR $numNeurons TrainingDataF20)
s20=$(echo "scale=4; $s20+$a" | bc -q 2>/dev/null)
done
echo "$i \t $s5 \t $s10 \t $s15 \t $s20"
echo "$i \t $s5 \t $s10 \t $s15 \t $s20" >> data.txt
done

Atronax 04.03.21 в 15:52

0

Код формує файл data.txt, який зберігає всі результати кожного розміру та кількість прихованих нейронів відповідного рівня. Цей файл можна використати для побудови графіка за допомогою gnuplot. Результат можна бачити на наступному малюнку:
Вочевидь, найнижчий рівень похибок складає 8 відсотків, для 20 нейронів у прихованому рівні та символів, що видобуваються з фрагментів зображень 10x10 пікселів.

Atronax 04.03.21 в 16:02

0

Висновки

Atronax 04.03.21 в 16:02

0

У цьому розділі ми дізналися, як працює програма автоматичного розпізнавання номерних знаків, а також приділили увагу двом важливим крокам: локалізації та розпізнаванню пластини.
На першому етапі ми зрозуміли, як сегментувати зображення на фрагменти, які можуть мати пластину, а також як застосувати просту евристику та метод опорних векторів для класифікації фрагментів на номерні знаки та не знаки.
На другому кроці ми навчилися сегментувати фрагменти з використанням алгоритму пошуку контурів, сформували вектор особливих зон для кожного символа та використали штучну нейронну мережу для класифікації кожної з них. Ми також зрозуміли, як оцінити алгоритм шляхом тренування з різними випадковими даними, а також як перевірити його для різних значень параметрів та особливих зон.

Atronax 04.03.21 в 16:12

0
Минутку...

← Предыдущая страница