- •Глава 1 Обзор штрихкодов как способов кодирования информации 9
- •Глава 2 Разработка, тестирование и отладка программного средства распознавания штрихкодов на основе каскадов Хаара 42
- •Глава 3 Экспериментальная проверка программного средства распознавания штрихкодов на основе каскадов Хаара 66
- •Введение
- •Обзор штрихкодов как способов кодирования информации
- •Характеристика ооо «k2it»
- •Структура ооо "к2Айти"
- •Обзор существующих видов штрихкодов.
- •Способы кодирования информации
- •Особенности штрихкода AztecCode
- •Использование штрихкода AztecCode
- •Особенности штрихкода DataMatrix
- •Печать 2d штрихкодов
- •Регулирование и стандартизация
- •Типы сканеров
- •Устройства для считывания двухмерных штрихкодов
- •Программное обеспечение для чтения штрихкодов
- •Постановка задачи дипломного проектирования
- •Математические методы решения задачи
- •Интегральное представление изображений
- •Признаки Хаара
- •Обучение классификатора в методе Виолы-Джонса
- •Применяемый в алгоритме бустинг и разработка AdaBoost
- •Каскадная модель разрабатываемого алгоритма
- •Выводы по главе
- •Разработка, тестирование и отладка программного средства распознавания штрихкодов на основе каскадов Хаара
- •Обоснование выбора аппаратных и программных средств разработки программного обеспечения
- •Операционная система Microsoft Windows
- •Интегрированная среда разработки Microsoft Visual Studio
- •Язык программирования Visual c#
- •Платформа .Net framework
- •Библиотека компьютерного зрения Opencv
- •Библиотека генерации и чтения штрихкодов zXing
- •Алгоритм обучения каскада Хаара для задачи распознавания штрихкодов товаров.
- •Состав и структура программного обеспечения
- •Описание процесса тестирования и отладки программного обеспечения
- •Инструкция пользователю
- •Выводы по главе
- •Экспериментальная проверка программного средства распознавания штрихкодов на основе каскадов Хаара
- •Описание результатов испытаний
- •Оценивание характеристик качества программного средства распознавания штрихкодов товаров
- •Обоснование экономической эффективности программного средства распознавания штрихкодов товаров на основе каскадов Хаара.
- •Выводы по главе
- •Заключение
- •Список литературы
- •Приложение Исходный код пс
Приложение Исходный код пс
RecognForm.cs
namespace Raspoz2
{
public partial class RecognForm : Form
{
private static Capture _cameraCapture; //Камера
public RecognForm()
{
InitializeComponent();
Run(); //Запускаем камеру
}
private void Form1_Load(object sender, EventArgs e)
{
}
void Run()
{
try
{
_cameraCapture = new Capture();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return;
}
Application.Idle += ProcessFrame;
}
void ProcessFrame(object sender, EventArgs e)
{
Image<Bgr, Byte> frame = _cameraCapture.QueryFrame(); //Полученный кадр
using (CascadeClassifier face = new CascadeClassifier("cascade.xml")) //Загрузка каскада
using (Image<Gray, Byte> gray = frame.Convert<Gray, Byte>()) //подготовка изображения
{
//Детектирование
Rectangle[] BarcodesDetected2 = face.DetectMultiScale(
gray, //Исходное изображение
1.1, //Коэффициент увеличения изображения
6, //Группировка предварительно обнаруженных событий. Чем их меньше, тем больше ложных тревог
new Size(5, 5), //Минимальный размер
Size.Empty); //Максимальный размер
//Вывод найденного
foreach (Rectangle f in BarcodesDetected2)
{
frame.Draw(f, new Bgr(Color.Blue), 2);
}
// create a barcode reader instance
IBarcodeReader reader = new BarcodeReader();
// Преобразование кадра к типу Bitmap
System.Drawing.Image frame_sys = frame.ToBitmap();
var barcodeBitmap = new Bitmap(frame_sys);
// Расшифровка штрихкода
var result = reader.Decode(barcodeBitmap);
// Вывод результата
Cascade.xml (до пятнадцатой стадии)
<?xml version="1.0"?>
<opencv_storage>
<cascade>
<stageType>BOOST</stageType>
<featureType>HAAR</featureType>
<height>25</height>
<width>25</width>
<stageParams>
<boostType>GAB</boostType>
<minHitRate>9.9500000476837158e-001</minHitRate>
<maxFalseAlarm>5.0000000000000000e-001</maxFalseAlarm>
<weightTrimRate>9.4999999999999996e-001</weightTrimRate>
<maxDepth>1</maxDepth>
<maxWeakCount>100</maxWeakCount></stageParams>
<featureParams>
<maxCatCount>0</maxCatCount>
<featSize>1</featSize>
<mode>ALL</mode></featureParams>
<stageNum>16</stageNum>
<stages>
<!-- stage 0 -->
<_>
<maxWeakCount>7</maxWeakCount>
<stageThreshold>-9.6873414516448975e-001</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 1 -2.4650871753692627e-002</internalNodes>
<leafValues>
9.7167140245437622e-001 -2.7506014704704285e-001</leafValues></_>
<_>
<internalNodes>
0 -1 31 -4.5817214413546026e-005</internalNodes>
<leafValues>
-7.7021634578704834e-001 3.6752030253410339e-001</leafValues></_>
<_>
<internalNodes>
0 -1 21 -6.0476006183307618e-005</internalNodes>
<leafValues>
-8.1241178512573242e-001 2.5379285216331482e-001</leafValues></_>
<_>
<internalNodes>
0 -1 129 3.2953108893707395e-004</internalNodes>
<leafValues>
2.3736147582530975e-001 -8.5157221555709839e-001</leafValues></_>
<_>
<internalNodes>
0 -1 71 -3.1409598886966705e-002</internalNodes>
<leafValues>
-7.8827428817749023e-001 2.6259097456932068e-001</leafValues></_>
<_>
<internalNodes>
0 -1 49 4.2782999575138092e-002</internalNodes>
<leafValues>
2.1045069396495819e-001 -8.2628446817398071e-001</leafValues></_>
<_>
<internalNodes>
0 -1 123 -7.2767172241583467e-005</internalNodes>
<leafValues>
-7.8245300054550171e-001 1.7855100333690643e-001</leafValues></_></weakClassifiers></_>
<!-- stage 1 -->
<_>
<maxWeakCount>6</maxWeakCount>
<stageThreshold>-7.3041534423828125e-001</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 22 -2.2984955459833145e-002</internalNodes>
<leafValues>
9.6685081720352173e-001 -2.8271406888961792e-001</leafValues></_>
<_>
<internalNodes>
0 -1 131 9.2621368821710348e-005</internalNodes>
<leafValues>
3.3765491843223572e-001 -7.9393005371093750e-001</leafValues></_>
<_>
<internalNodes>
0 -1 101 3.9641359762754291e-005</internalNodes>
<leafValues>
2.2931124269962311e-001 -7.9638719558715820e-001</leafValues></_>
<_>
<internalNodes>
0 -1 11 2.9998266836628318e-004</internalNodes>
<leafValues>
2.3338884115219116e-001 -7.7504962682723999e-001</leafValues></_>
<_>
<internalNodes>
0 -1 25 -2.7225703001022339e-001</internalNodes>
<leafValues>
-8.9511430263519287e-001 1.9871975481510162e-001</leafValues></_>
<_>
<internalNodes>
0 -1 82 -6.1522528994828463e-004</internalNodes>
<leafValues>
7.7864295244216919e-001 -2.8907522559165955e-001</leafValues></_></weakClassifiers></_>
<!-- stage 2 -->
<_>
<maxWeakCount>8</maxWeakCount>
<stageThreshold>-7.6124441623687744e-001</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 98 2.6642694137990475e-003</internalNodes>
<leafValues>
-2.9801324009895325e-001 9.1836732625961304e-001</leafValues></_>
<_>
<internalNodes>
0 -1 94 9.8451739177107811e-004</internalNodes>
<leafValues>
-1.9396866858005524e-001 8.8032341003417969e-001</leafValues></_>
<_>
<internalNodes>
0 -1 87 2.2182296961545944e-003</internalNodes>
<leafValues>
-2.3337045311927795e-001 8.0210471153259277e-001</leafValues></_>
<_>
<internalNodes>
0 -1 70 2.9143627732992172e-002</internalNodes>
<leafValues>
2.8257790207862854e-001 -8.1678903102874756e-001</leafValues></_>
<_>
<internalNodes>
0 -1 3 -1.4558699331246316e-004</internalNodes>
<leafValues>
-7.9803514480590820e-001 2.2243097424507141e-001</leafValues></_>
<_>
<internalNodes>
0 -1 84 5.6398875312879682e-004</internalNodes>
<leafValues>
-3.1254756450653076e-001 6.5493190288543701e-001</leafValues></_>
<_>
<internalNodes>
0 -1 116 -1.0646571899997070e-004</internalNodes>
<leafValues>
3.8564914464950562e-001 -5.4531794786453247e-001</leafValues></_>
<_>
<internalNodes>
0 -1 55 4.4087086280342191e-005</internalNodes>
<leafValues>
-5.3711688518524170e-001 4.0646362304687500e-001</leafValues></_></weakClassifiers></_>
<!-- stage 3 -->
<_>
<maxWeakCount>7</maxWeakCount>
<stageThreshold>-1.1723710298538208e+000</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 53 -1.1368032544851303e-002</internalNodes>
<leafValues>
8.6597937345504761e-001 -2.7722772955894470e-001</leafValues></_>
<_>
<internalNodes>
0 -1 124 -4.1804090142250061e-004</internalNodes>
<leafValues>
-7.0867651700973511e-001 3.6147430539131165e-001</leafValues></_>
<_>
<internalNodes>
0 -1 13 6.2293605878949165e-005</internalNodes>
<leafValues>
2.3243567347526550e-001 -7.5742620229721069e-001</leafValues></_>
<_>
<internalNodes>
0 -1 18 -2.6580391568131745e-004</internalNodes>
<leafValues>
-7.0679146051406860e-001 2.9063123464584351e-001</leafValues></_>
<_>
<internalNodes>
0 -1 27 2.4352136999368668e-002</internalNodes>
<leafValues>
-3.4689226746559143e-001 6.7778885364532471e-001</leafValues></_>
<_>
<internalNodes>
0 -1 128 -1.6083351511042565e-004</internalNodes>
<leafValues>
-6.2784981727600098e-001 3.1239959597587585e-001</leafValues></_>
<_>
<internalNodes>
0 -1 119 -6.5745938627514988e-005</internalNodes>
<leafValues>
-7.0467710494995117e-001 1.9248020648956299e-001</leafValues></_></weakClassifiers></_>
<!-- stage 4 -->
<_>
<maxWeakCount>8</maxWeakCount>
<stageThreshold>-8.2804256677627563e-001</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 69 -1.5331812202930450e-002</internalNodes>
<leafValues>
8.6632388830184937e-001 -2.7828240394592285e-001</leafValues></_>
<_>
<internalNodes>
0 -1 4 2.2877776063978672e-004</internalNodes>
<leafValues>
3.0375176668167114e-001 -7.2120666503906250e-001</leafValues></_>
<_>
<internalNodes>
0 -1 4 -8.7837499449960887e-005</internalNodes>
<leafValues>
-7.4494946002960205e-001 2.6555183529853821e-001</leafValues></_>
<_>
<internalNodes>
0 -1 5 -1.3154254702385515e-004</internalNodes>
<leafValues>
-6.4511001110076904e-001 2.3149906098842621e-001</leafValues></_>
<_>
<internalNodes>
0 -1 41 2.9841929062968120e-005</internalNodes>
<leafValues>
-5.2249288558959961e-001 2.8285980224609375e-001</leafValues></_>
<_>
<internalNodes>
0 -1 61 -1.1242910113651305e-004</internalNodes>
<leafValues>
-6.6514241695404053e-001 2.2884616255760193e-001</leafValues></_>
<_>
<internalNodes>
0 -1 77 9.8163448274135590e-004</internalNodes>
<leafValues>
-1.8956978619098663e-001 8.1250369548797607e-001</leafValues></_>
<_>
<internalNodes>
0 -1 14 -2.7865386800840497e-004</internalNodes>
<leafValues>
-7.6131129264831543e-001 2.4624796211719513e-001</leafValues></_></weakClassifiers></_>
<!-- stage 5 -->
<_>
<maxWeakCount>7</maxWeakCount>
<stageThreshold>-1.0307321548461914e+000</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 23 -3.2398186624050140e-002</internalNodes>
<leafValues>
5.8371043205261230e-001 -4.1302028298377991e-001</leafValues></_>
<_>
<internalNodes>
0 -1 51 1.6625803255010396e-005</internalNodes>
<leafValues>
-5.4822552204132080e-001 3.9287295937538147e-001</leafValues></_>
<_>
<internalNodes>
0 -1 90 2.3175929673016071e-003</internalNodes>
<leafValues>
-2.3395423591136932e-001 7.7779978513717651e-001</leafValues></_>
<_>
<internalNodes>
0 -1 126 1.1726377997547388e-003</internalNodes>
<leafValues>
2.4579028785228729e-001 -7.5748258829116821e-001</leafValues></_>
<_>
<internalNodes>
0 -1 114 4.3141844798810780e-005</internalNodes>
<leafValues>
2.1666172146797180e-001 -8.1352019309997559e-001</leafValues></_>
<_>
<internalNodes>
0 -1 113 -1.3542758097173646e-005</internalNodes>
<leafValues>
3.2708042860031128e-001 -4.7948190569877625e-001</leafValues></_>
<_>
<internalNodes>
0 -1 125 -1.5737346257083118e-004</internalNodes>
<leafValues>
-7.1197426319122314e-001 2.4367219209671021e-001</leafValues></_></weakClassifiers></_>
<!-- stage 6 -->
<_>
<maxWeakCount>10</maxWeakCount>
<stageThreshold>-1.1102532148361206e+000</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 103 1.5819584950804710e-002</internalNodes>
<leafValues>
-4.1383096575737000e-001 5.4716980457305908e-001</leafValues></_>
<_>
<internalNodes>
0 -1 80 -2.7801905525848269e-004</internalNodes>
<leafValues>
-6.5362668037414551e-001 2.8362187743186951e-001</leafValues></_>
<_>
<internalNodes>
0 -1 54 -1.3542758097173646e-005</internalNodes>
<leafValues>
3.4536886215209961e-001 -4.9160996079444885e-001</leafValues></_>
<_>
<internalNodes>
0 -1 52 -3.6751693114638329e-003</internalNodes>
<leafValues>
-7.7156746387481689e-001 2.4632607400417328e-001</leafValues></_>
<_>
<internalNodes>
0 -1 78 1.7518883105367422e-003</internalNodes>
<leafValues>
-2.5899779796600342e-001 8.4888494014739990e-001</leafValues></_>
<_>
<internalNodes>
0 -1 107 -4.8629899538354948e-005</internalNodes>
<leafValues>
3.8012766838073730e-001 -4.5802769064903259e-001</leafValues></_>
<_>
<internalNodes>
0 -1 88 1.2616477906703949e-003</internalNodes>
<leafValues>
-2.5994312763214111e-001 7.5926667451858521e-001</leafValues></_>
<_>
<internalNodes>
0 -1 30 -5.8852325309999287e-005</internalNodes>
<leafValues>
-5.8757412433624268e-001 3.3007568120956421e-001</leafValues></_>
<_>
<internalNodes>
0 -1 85 -7.9056184040382504e-004</internalNodes>
<leafValues>
8.2950729131698608e-001 -2.0915500819683075e-001</leafValues></_>
<_>
<internalNodes>
0 -1 91 -7.3138202424161136e-005</internalNodes>
<leafValues>
-6.3619673252105713e-001 3.0298924446105957e-001</leafValues></_></weakClassifiers></_>
<!-- stage 7 -->
<_>
<maxWeakCount>9</maxWeakCount>
<stageThreshold>-1.1976939439773560e+000</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 45 -2.3124735802412033e-002</internalNodes>
<leafValues>
8.8328909873962402e-001 -2.7228128910064697e-001</leafValues></_>
<_>
<internalNodes>
0 -1 46 2.9466820706147701e-005</internalNodes>
<leafValues>
-5.4980814456939697e-001 4.1867563128471375e-001</leafValues></_>
<_>
<internalNodes>
0 -1 72 1.0501373559236526e-002</internalNodes>
<leafValues>
-4.8026835918426514e-001 3.9370366930961609e-001</leafValues></_>
<_>
<internalNodes>
0 -1 121 2.3898979998193681e-004</internalNodes>
<leafValues>
-5.0796025991439819e-001 3.5177624225616455e-001</leafValues></_>
<_>
<internalNodes>
0 -1 75 -8.7588158203288913e-004</internalNodes>
<leafValues>
6.7114096879959106e-001 -2.4088495969772339e-001</leafValues></_>
<_>
<internalNodes>
0 -1 34 -6.3769432017579675e-005</internalNodes>
<leafValues>
4.0482512116432190e-001 -4.2510727047920227e-001</leafValues></_>
<_>
<internalNodes>
0 -1 12 2.6267470093443990e-004</internalNodes>
<leafValues>
1.5169836580753326e-001 -8.4886437654495239e-001</leafValues></_>
<_>
<internalNodes>
0 -1 122 -3.1930156052112579e-002</internalNodes>
<leafValues>
-9.1139626502990723e-001 1.4687350392341614e-001</leafValues></_>
<_>
<internalNodes>
0 -1 63 8.1062234938144684e-002</internalNodes>
<leafValues>
1.5011204779148102e-001 -7.8267234563827515e-001</leafValues></_></weakClassifiers></_>
<!-- stage 8 -->
<_>
<maxWeakCount>9</maxWeakCount>
<stageThreshold>-1.2852327823638916e+000</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 15 3.8249801844358444e-002</internalNodes>
<leafValues>
-3.1792977452278137e-001 6.6409265995025635e-001</leafValues></_>
<_>
<internalNodes>
0 -1 36 -7.2860326326917857e-005</internalNodes>
<leafValues>
-7.6734501123428345e-001 2.6591709256172180e-001</leafValues></_>
<_>
<internalNodes>
0 -1 33 -1.6327975317835808e-003</internalNodes>
<leafValues>
3.3875334262847900e-001 -4.9987167119979858e-001</leafValues></_>
<_>
<internalNodes>
0 -1 37 2.1789318998344243e-004</internalNodes>
<leafValues>
3.0603858828544617e-001 -5.6173115968704224e-001</leafValues></_>
<_>
<internalNodes>
0 -1 105 -2.1359072707127780e-004</internalNodes>
<leafValues>
-8.0614095926284790e-001 1.6788418591022491e-001</leafValues></_>
<_>
<internalNodes>
0 -1 105 1.9808551587630063e-004</internalNodes>
<leafValues>
2.5436797738075256e-001 -6.3247036933898926e-001</leafValues></_>
<_>
<internalNodes>
0 -1 67 -2.1623399108648300e-002</internalNodes>
<leafValues>
5.5358868837356567e-001 -3.7801659107208252e-001</leafValues></_>
<_>
<internalNodes>
0 -1 99 -4.1011175198946148e-005</internalNodes>
<leafValues>
4.6962505578994751e-001 -4.0010082721710205e-001</leafValues></_>
<_>
<internalNodes>
0 -1 44 -8.9231201855000108e-005</internalNodes>
<leafValues>
-7.8473299741744995e-001 2.0136044919490814e-001</leafValues></_></weakClassifiers></_>
<!-- stage 9 -->
<_>
<maxWeakCount>6</maxWeakCount>
<stageThreshold>-1.3421059846878052e+000</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 6 -2.1999178454279900e-002</internalNodes>
<leafValues>
9.4134896993637085e-001 -2.5496426224708557e-
-4.3406841158866882e-001 5.2149122953414917e-001</leafValues></_>
<_>
<internalNodes>
0 -1 8 -4.7050632536411285e-002</internalNodes>
<leafValues>
7.5384473800659180e-001 -2.9723891615867615e-001</leafValues></_>
<_>
<internalNodes>
0 -1 106 -4.0187966078519821e-005</internalNodes>
<leafValues>
4.9126160144805908e-001 -4.8887139558792114e-001</leafValues></_>
<_>
<internalNodes>
0 -1 65 -4.7354843467473984e-002</internalNodes>
<leafValues>
5.1604723930358887e-001 -3.6243334412574768e-001</leafValues></_>
<_>
<internalNodes>
0 -1 47 -1.0171736357733607e-004</internalNodes>
<leafValues>
3.5303121805191040e-001 -4.8466274142265320e-001</leafValues></_></weakClassifiers></_>
<!-- stage 10 -->
…
