Исследование алгоритмов

Обучение с учителем и формальная запись задачи классификации. Каскадный классификатор, выбор предметной области и обзор реализаций методов машинного обучения. Мобильные платформы и изучение инструментов разработки. Обучение каскадного классификатора.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 11.07.2016
Размер файла 1,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

4,3"

800x480

IPS

1-ядерный ГГц OC: Android v. 4.0.3

ОЗУ: 512 Мб

Встроенная:

16 Гб

5 Мп

Подготовка к тестированию была осуществлена в несколько этапов:

1) На персональный компьютер был установлен интерфейс для отладки Android, ADB (Android Debug Bridge) Driver, для выполнения отладки по USB и, в целом, контроля работы устройств через USB-соединение;

2) На все используемые устройства было установлено приложение OpenCVManager URL:http://docs.opencv.org/platforms/android/service/doc/index.html, обеспечивающее поддержку средств библиотеки OpenCV; в противном случае запуск созданного приложения для детектирования невозможен;

3) Приложение было успешно установлено на все устройства. В отличие от закрытых систем, в ОС Android предусмотрена возможность установки приложения на устройство без участия Google Play Market двумя способами:

- установка через пакет .apk c помощью менеджера приложений или файлового менеджера;

- установка приложения через пакет .apk с компьютера через Android SDK (средствами отладки ADB). Именно этот вариант и был использован.

После подготовительных работ была проведена серия тестов. Ход эксперимента выглядел следующим образом:

1) Смартфоны устанавливались в автомобиле в горизонтальное положение таким образом, чтобы их основные камеры имели максимальный обзор и возможность полного захвата происходящего на дороге;

2) При приближении к регулируемому перекрестку или пешеходному переходу производился запуск приложения для детектирования пешеходов;

3) Запускалась запись работы приложения с экранов;

4) Для каждого имплементированного метода детектирования пешеходов проводились два теста одинаковой длительности, подробно описанные в пп. 4.1 и 4.2;

5) После завершения эксперимента полученные видеозаписи разбивались на кадры (изображения в формате *.jpg) .

6) Полученные результаты подвергались визуальному анализу.

3.2 Описание проведенных экспериментов

1) Эксперимент №1. Детектирование множества объектов.

Детектирование множества объектов - задача, с которой работающее приложение должно справляться при его непосредственном применении на практике. Главной задачей проведения такого эксперимента стало определение коэффициентов FP, FN, TP и TN, являющиеся показателем точности детектирования объектов.

Условия эксперимента:

- длительность записи, сек: 60;

- количество кадров: 1440;

- количество пешеходов в кадре ежесекундно меняется. Общее число объектов составляет 8256 (вычисления показаны на рис. 3.1).

Для наглядной демонстрации эксперимента №1 на рис. 3.2-3.4. представлены кадры работы приложения в условиях, описанных выше. Количественные результаты представлены в сводной таблице сравнения эффективности рассматриваемых методов детектирования в п. 3.3.

Рисунок 3.1. Вычисление количества объектов

Рисунок 3.2. Демонстрация работы приложения на смартфоне LG G2. Эксперимент 1, метод Haar

Рисунок 3.3. Демонстрация работы приложения на смартфоне LG G2. Эксперимент 1, метод LBP

Рисунок 3.4. Демонстрация работы приложения на смартфоне LG G2. Эксперимент 1, метод HOG

2) Эксперимент №2. Детектирование одного объекта.

Эксперимент с детектированием одного объекта позволит определить среднее число пропущенных объектов в секунду, а также узнать среднее время обработки одного кадра. Такой тест поможет узнать, насколько велико время реакции системы.

Условия эксперимента:

- длительность записи, сек: 10;

- количество кадров: 240;

- расстояние до объекта: 9 м.

- общее количество объектов: 240.

На основе полученных данных можно рассчитать время, в течение которого система обнаружения будет бездействовать:

(1)

где t' - время простоя, n - среднее количество пропускаемых объектов за секунду, - длительность одного кадра.

Демонстрация хода эксперимента №2 представлена на рис. 3.5-3.7.

Рисунок 3.5. Демонстрация работы приложения на смартфоне LG G2. Эксперимент 2, метод Haar

Рисунок 3.6. Демонстрация работы приложения на смартфоне LG G2. Эксперимент 2, метод LBP

Рисунок. 3.7. Демонстрация работы приложения на смартфоне LG G2. Эксперимент 2, метод HOG

Для объективного количественного анализа данных обоих экспериментов построена сводная таблица результатов (табл. 3.2). На основе абсолютных показателей, представленных в данной таблице, составлена дополнительная таблица (табл 3.3) с относительными показателями, выраженными в процентах. Коэффициенты TPR, FPR, Se и Sp вычисляются по следующим формулам:

; (2)

; (3)

; (4)

. (5)

Таблица 3.2

Результаты экспериментов №1 и №2 с максимальным разрешением входного кадра

LG G2

Philips W8510

LG P705 L7

Haar

LBP

HOG

Haar

LBP

HOG

Haar

LBP

HOG

Количество ложно отрицательных срабатываний (false negatives, FN)

189

1106

343

272

1321

446

1205

1334

1238

Количество истинно положительных срабатываний (true positives, TP)

8067

7150

7922

7984

6935

7810

7051

6922

7018

Количество ложно положительных срабатываний (false positives, FP)

247

508

133

389

642

201

675

818

594

Среднее число пропущенных объектов в секунду (FNa)

3,15

18,4

5,71

4,53

22,0

7,43

20,08

22,2

20,6

Время обработки входного кадра (t), мс

218

140

167

200

143

179

308

237

166

Из таблиц видно, что время обработки одного кадра при использовании смартфонов LG G2 и Philips не намного меньше, чем значение этого показателя при запуске приложения на смартфоне LG P705, при том, что их вычислительная мощность на порядок выше. Можно сделать вывод, что такие показатели обусловлены слишком высоким разрешением входного изображения (1980х1080 и 1280х720). Также учитывается тот факт, что каскадные классификаторы были обучены по выборке изображений с разрешением 640х480.

Таблица 3.3

Вычисление относительных показателей по данным таблицы 3.2

LG G2

Philips W8510

LG P705 L7

Haar

LBP

HOG

Haar

LBP

HOG

Haar

LBP

HOG

Доля истинно положительных срабатываний (true positives rate, TPR) %

97

86,6

95,9

96,7

83,9

94,5

85,4

83,8

85,0

Доля ложно положительных срабатываний (false positives rate, FPR) %

17

35,2

9,2

27,0

44,6

13,9

45,6

56,8

41,25

Чувствительность модели (Sensitivity, Se), %

97

86,6

95,9

96,7

83,9

94,5

85,4

83,8

85,0

Специфичность модели (Specificity, Sp), %

83

64,8

90,8

73,0

55,4

86,1

54,4

43,2

58,75

Исходя из этого, было принято решение реализовать функцию для искусственного автоматического снижения разрешения. Функция снижает разрешение кадра, если оно превышает 640х480 пикселей; далее к полученному изображению применяются методы детектирования объектов, и, наконец, на экран выводится результат детектирования в изначальном разрешении. Реализацию функции можно найти в программном коде (приложение В).

В таблицах 3.4 и 3.5 представлены обновленные показатели, полученные в ходе повторного проведения экспериментов в тех же условиях с разрешением входного кадра 640х480. Цветом выделены обновленные данные.

Таблица 3.4

Результаты экспериментов №1 и №2 с разрешением входного кадра 640х480

LG G2

Philips W8510

LG P705 L7

Haar

LBP

HOG

Haar

LBP

HOG

Haar

LBP

HOG

Количество ложно отрицательных срабатываний (false negatives, FN)

223

1312

522

462

1461

691

1205

1334

1238

Количество истинно положительных срабатываний (true positives, TP)

8033

6944

7134

7794

6795

7565

7051

6922

7018

Количество ложно положительных срабатываний (false positives, FP)

279

618

293

452

998

352

675

818

594

Среднее число пропущенных объектов в секунду (FNa)

3,71

21,8

8,7

7,7

24,3

11,52

20,08

22,2

20,6

Время обработки входного кадра (t), мс

98

71

88

132

107

145

308

237

166

Таблица 3.5

Вычисление относительных показателей по данным таблицы 3.4

LG G2

Philips W8510

LG P705 L7

Haar

LBP

HOG

Haar

LBP

HOG

Haar

LBP

HOG

Доля истинно положительных срабатываний (true positives rate, TPR) %

97,2

84,1

86,4

94,4

82,3

91,6

85,4

83,8

85,0

Доля ложно положительных срабатываний (false positives rate, FPR) %

19,3

42,9

20,3

31,3

69,3

24,4

45,6

56,8

41,25

Чувствительность модели (Sensitivity, Se), %

97,2

84,1

86,4

94,4

82,3

91,6

85,4

83,8

85,0

Специфичность модели (Specificity, Sp), %

80,7

57,1

79,7

68,7

30,7

75,6

54,4

43,2

58,75

Данные таблиц 3.2., 3.3, 3.4 и 3.5 указывают на то, что точность детектирования ухудшается при снижении разрешения входного кадра. Однако это ухудшение можно считать незначительным в сравнении с уменьшением времени обработки изображения (почти в 2 раза на смартфоне LG G2 и в 1,3 раза на смартфоне Philips).

3.3 Выводы по результатам тестирования

По полученным в ходе анализа данным сделать вывод о качестве обученных каскадных классификаторов и о причинах таких результатов, а также выяснить, какие меры необходимо предпринять для их дальнейшего улучшения. Также можно сделать выводы о рациональности использования приложения-детектора, работающего на основе обученных каскадов, в задаче детектирования пешеходов.

1) Результаты, полученные при тестировании программы на смартфоне LG P705, показывают, что разработанное приложение следует испытывать только на устройствах с достаточной вычислительной мощностью для обеспечения приемлемого быстродействия; в противном случае ни один из исследуемых методов не сможет обеспечить необходимой точности и быстроты детектирования;

2) Искусственное понижение разрешения входного кадра дает удовлетворительный результат: при возникновении необходимости такой способ позволяет достигнуть уменьшения времени обработки изображения при незначительном ухудшении качества детектирования;

3) Каскадный классификатор, обученный на локальных бинарных шаблонах, не показал удовлетворительных результатов: при достаточно высокой вероятности детектирования объекта в видеопотоке (83,4% в среднем), процент отрицательных примеров, классифицированных как положительные, недопустимо высок (56,3% в среднем). Такой результат связан непосредственно со спецификой алгоритма. Классификатор в том виде, в котором он представлен в работе, не годится для детектирования объектов на видео в реальном времени;

4) Есть возможность улучшить качество работы каскадного классификатора LBP, дополнить или модифицировать алгоритм (например, использовать бинарный шаблон в форме эллипса). Другим решением станет применение данного метода к более простой практической задаче (к примеру, детектирование однотипных объектов или объектов, не меняющих свою ориентацию).

5) Сравнивая результаты работы приложения при использовании методов Haar и HOG, можно сделать вывод, что первый показывает лучший процент верно классифицированных положительных примеров, в то время как второй обеспечивает меньшую долю ложноположительных примеров. Так как в конкретной задаче детектирования пешеходов коэффициент истинно положительных случаев более определяющий, классификатор, обученный по признакам Хаара, является более предпочтительным методом;

6) В целом, каскадный классификатор, обученный на признаках Хаара, даёт хорошие практические результаты и пригоден для детектирования пешеходов в реальном времени;

7) Хорошее качество обученного каскадного классификатора Хаара напрямую связано с применением дополнительных мер по улучшению работы приложения и внедрением новых решений в стандартную процедуру обучения. Итак, в главе 3 была описана система экспериментов, по результатам которых была оценена работа приложения, использующего исследуемые методы. Полученные экспериментальные данные были систематизированы, и на их основе было произведено сравнение каскадных классификаторов Хаара и LBP и метода HOG

Заключение

В настоящей выпускной квалификационной работе была исследована процедура обучения каскадного классификатора с целью повышения точности и вычислительной эффективности алгоритмов детектирования текстурированных объектов на видео для мобильных платформ. Данная проблема была рассмотрена как с теоретической точки зрения, обращаясь к математическим основам, так и с практической - применительно к задаче детектирования пешеходов в реальном времени.

Задачи, поставленные в рамках исследования, были решены. Результаты выглядят следующим образом:

1) Произведен обзор литературы, в ходе которого рассмотрены существующие методы классификации и проанализирована предметная область;

2) Изученный метод обучения каскадного классификатора был реализован в виде приложения для платформы Android;

3) Для разработанного приложения проведена серия экспериментальных тестов по детектированию пешеходов в реальных условиях.

Работа по реализации метода была произведена в несколько этапов, на каждом из которых были предложены подходы к решению существующих проблем детектирования.

Первый этап предусматривал подготовку обучающей выборки изображений. На данном шаге были устранены основные трудности, которые представляет предметная область:

1) Во-первых, была ослаблена проблема отсутствия эталонного образа человека и наличия существенных различий в представлении пешехода. Решением этой проблемы стало комбинирование готовых реалистичных баз изображений и кадров подлинных записей с видеорегистратора, сделанных в реальной среде при различных степенях освещенности и в разное время года;

2) Во-вторых, была ослаблена проблема, касающаяся трудностей, которые представляет среда нахождения детектируемых объектов. Обозначенная проблема была решена путем использования частей позитивных изображений, на которых отсутствует объект, в качестве негативных;

3) В-третьих, была ослаблена проблема многообразия пространственного расположения объекта, зависимости от ориентации и масштаба. Положительная выборка была подготовлена таким образом, что на каждом обучающем положительном образце находился один только объект, по размеру совпадающий с размером изображения; для этого создано дополнительное приложение для быстрой обрезки полного набора позитивных изображений вручную. Такие меры также способствуют снижению длительности обучения классификатора и увеличению точности обучения каскадов.

Вторым этапом была проведена процедура тренировки классификаторов. На этом шаге экспериментальным путем были подобраны оптимальные параметры обучения, что позволило обучить классификаторы наиболее точно и эффективно.

На третьем этапе было реализовано полноценное приложение-детектор для платформы Android, обладающее удобным ннтерфейсом, правильной архитектурой и способное работать с обученными каскадами обоих типов. Структура приложения такова, что в нем можно реализовать любой другой метод детектирования объектов без существенного изменения кода. Так, был имплементирован метод HOG. Эта мера была необходима для сравнения методов, использующих каскадные классификаторов Haar и LBP, с другими способами классификации.

На финальном этапе была предложена экспериментальная система оценки качества работы приложения. Она включает в себя два теста, условия проведения которых были максимально приближены к реальным: детектирование одного объекта и детектирование множества объектов.

На основе результатов экспериментального анализа были сделаны выводы о проведенной работе в целом, а также о рациональности применения каждого из алгоритмов в задаче детектирования текстурированных объектов на видео, что и было основной целью в рамках данного исследования. Эти выводы таковы:

1) Каскадный классификатор, обученный на признаках Хаара, даёт хорошие практические результаты и пригоден для детектирования пешеходов в реальном времени благодаря внедрению новых решений в стандартную процедуру обучения;

2) Метод Haar является более предпочтительным для использования в задаче детектирования пешеходов, чем метод HOG, так как он обеспечивает более высокий процент верно классифицированных положительных примеров, что является ключевым фактором в выборе метода;

3) Каскадный классификатор, обученный на локальных бинарных шаблонах, не показал удовлетворительных результатов и потому не годится для детектирования объектов на видео в реальном времени. В работе сделаны предположения о том, как можно уйти от этой проблемы.

Данное исследование может считаться хорошей базой для дальнейшего изучения проблем детектирования объектов. Также идеи, представленные в работе, следует совершенствовать и в других направлениях. Дальнейшую работу можно проводить в нескольких направлениях. Наиболее перспективными можно назвать трекинг и предсказание направления движения объекта. Существует множество алгоритмов и методов, которые можно применить как к трекингу (Lucas-Kanade, Tomasi-Kanade, Shi-Tomasi-Kanade и др.), так и к предсказанию (например, использование рекурсивных байесовских фильтров), а значит, целью будущей работы может стать выбор, модификация и реализация одного из них применительно к некой практически важной задаче.

Список литературы

1. Binelli E. A modular tracking system for far infrared pedestrian recognition / E. Binelli, A. Broggi, A. Fascioli, S. Ghidoni, T. Graf, P. Grisleri, M. Meinecke // Intelligent Vehicles Symposium. - 2005. - pp. 759-764.

2. Chellapilla K. Optimally Combining a Cascade of Classifiers / K. Chellapilla, M. Shilman, P. Simard // Microsoft Research. - 2007.

3. Chellappa R. Face Tracking and Recognition in Video / R. Chellappa, M. Du, P. Turaga, S.K. Zhou // Handbook of Face Recognition. - 2011. - pp. 323-351.

4. Dalal N. Histograms of oriented gradients for human detection / N. Dalal, B. Triggs // Computer Vision and Pattern Recognition. - 2005. - pp. 54-58.

5. Dйniza O. Face recognition using Histograms of Oriented Gradients / O. Dйniza, G. Buenoa, J. Salidoa, F. De la Torre // Pattern Recognition Letters. - 2011. - vol. 32. - issue 12. - pp. 1598-1603.

6. Enzweiler M. Monocular Pedestrian Detection: Survey and Experiments / M. Enzweiler, D.M. Gavrila // IEEE Transactions on Pattern Analysis and Machine Intelligence. - 2009. - vol. 31. - №12. - pp. 2179-2195.

7. Eveland C. Background modeling for segmentation of video-rate stereo sequences / C. Eveland, K. Konolige, R.C. Bolles // Computer Vision and Pattern Recognition. - 1998. - pp. 266-271.

8. Felzenszwalb P.F. Cascade Object Detection with Deformable Part Models / P.F. Felzenszwalb, R.B. Girshick // University of Chicago. - 2010. - pp. 609-618.

9. Felzenszwalb P. A discriminatively trained, multiscale, deformable part model / P. Felzenszwalb, D. McAllester, D. Ramanan // CVPR Computer Vision and Pattern Recognition. - 2008. - pp. 120-131.

10. Freund Y. A Short Introduction to Boosting / Y. Freund, R.E. Schapire // Journal of Japanese Society for Artificial Intelligence. - 1999. - vol.14(5). - pp. 771-780.

11. Gavrila D.M. Multi-cue Pedestrian Detection and Tracking from a Moving Vehicle / D.M. Gavrila, S. Munder // Computer Vision. - vol.2. - 2006. - pp. 37-49.

12. Giang H.Ng. Reduced training of convolutional neural networks for pedestrian detection / H.Ng. Giang, S.L. Phung // The 6th International Conference on Information Technology and Applications. - 2009. - pp. 61-66.

13. Haralick R.M. Statistical and Structural Approaches to Texture // Proc. of the IEEE. - vol. 67. - No. 5. - 1979. - pp. 786-804.

14. Haritauglu I. W S: A real-time system for detecting and tracking people in 2 1/2D / I. Haritauglu, D. Harwood, L.S. Davis // European Conference of Computer Vision. - 1998, pp. 877-892.

15. Huang D. Local Binary Patterns and Its Application to Facial Image Analysis: A Survey / D. Huang, C. Shan, M. Ardabilian, Y. Wang // IEEE transactions on Systems, man and cybernetics - part C: Applications and rewiews. - 2011. - vol. 41. - pp. 765 - 770.

16. James V.Sh. Simultaneous Detection and Segmentation of Pedestrians using Top-down and Bottom-up Processing / V.Sh. James, W. Davis // Dept. of Computer Science and Engineering. - 2008. - pp. 567-588.

17. Madry M. Unsupervised Learning of Spatio-Temporal Features for Tactile Data / M. Madry, L. Bo, D. Kragic, D. Fox // IEEE International Conference on Robotics and Automation. - 2014. - pp. 2262-2269.

18. Martinez-Gil F., Multi-agent Reinforcement Learning for Simulating Pedestrian Navigation / F. Martinez-Gil, M. Lozano, F. Fernбndez // Lecture Notes in Computer Science. - 2012. - vol. 7113. - pp 54-69.

19. McCarthy M. Active Pedestrian Protection / M. McCarthy, I. Simmons // 19th International Technical Conference on the Enhanced Safety of Vehicles. - 2005.

20. Ojala T. Multiresolution Gray Scale and Rotation Invariant Texture Classification with Local Binary Patterns / T. Ojala, M. Pietikдinen,T. Mдenpдд // Machine Vision and Media Processing Unit. - 2000.

21. Ouyang W. Modeling Mutual Visibility Relationship in Pedestrian Detection / . W. Ouyang, X. Zeng, X. Wang // Department of Electronic Engineering. - 2011. - pp. 89-101.

22. Ouyang W. Single-Pedestrian Detection aided by Multi-pedestrian Detection / W. Ouyang, X. Wang // CVPR. - 2013. - pp. 449-460.

23. Sermanet P. Pedestrian Detection with Unsupervised and Multi-Stage Feature Learning / P. Sermanet, K. Kavukcuoglu, S. Chintala, Y. Lecun // Vision and Pattern Recognition. - 2012. - pp. 2903-2910.

24. Suneetha J. A survey on Video-based Face Recognition Approaches / J. Suneetha // International Journal of Application or Innovation in Engineering & Management. - 2014. - vol. 3 - issue 2. - pp. 208-215.

25. Tang D., Fast Pedestrian Detection by Cascaded Random Forest with Dominant Orientation Templates / D. Tang, Y. Liu, T.-K. Kim // Department of Electrical Engineering. - 2012. - pp. 878-890.

26. Tang S. Learning People Detectors for Tracking in Crowded Scenes / S. Tang, M. Andriluka, A. Milan, K. Schindler, S. Roth, B. Schiele // International Conference on Computer Vision. - 2013. - pp. 231-235.

27. Tou, J.T. Pattern recognition principles / J.T. Tou, R.C. Gonzalez // Journal of Applied Mathematics and Mechanics. - 1977. - vol. 57. - pp. 353-354.

28. Viola P. Detecting pedestrians using patterns of motion and appearance / P. Viola, M. Jones, D. Snow // Proceedings of the 9th International Conference on Computer Vision. - 2003. - vol. 1. - pp. 734-741.

29. Viola P. M.J. Jones Rapid Object Detection using a Boosted Cascade of Simple Features / P.Viola, M.J. Jones // Proceedings IEEE Conference on Computer Vision and Pattern Recognition. - 2001.

30. Walk S. New features and insights for pedestrian detection / S.Walk, N. Majer, K. Schindler, B. Schiele // Computer Vision and Pattern Recognition. - 2010. - pp. 90-99.

31. Wu J. Fast Asymmetric Learning for Cascade Face Detection / J. Wu, S.Ch. Brubaker, M.D. Mullin, J.M. Rehg // Pattern Analysis and Machine Intelligence. - 2008. - 30 с.

32. Yudav U. A Survey on Text Recognition from Natural Scene Images and Videos / U. Yudav, N. Verma // International Journal of Soft Computing and Engineering. - 2015. - vol. 5. - pp. 137-140.

33. Zhang L. Pedestrian detection in infrared images based on local shape features / L. Zhang, B. Wu, R. Nevatia // Computer Vision and Pattern Recognition. - 2007. - pp. 245-253.

34. Zhao L. Stereo- and Neural Network-Based Pedestrian Detection / L. Zhao, Ch.E. Thorpe // IEEE Transactions on intelligent transportation systems. - 2000. - vol. 1, № 3. - pp. 332-354.

35. Вьюгин В.В. Математические основы теории машинного обучения и прогнозирования / В.В. Вьюгин. - М.: 2013. - 387 с.

36. Инновационные информационные технологии: Материалы международной научно-практической конференции. / Под ред. С.У.Увайсова; Отв. за вып. И.А. Иванов, Л.М. Агеева, Д.А. Дубоделова, В.Е. Еремина. - М.:МИЭМ, 2012, 602 с.

37. Казаков А. Быстрый Алгоритм Обнаружения Пешеходов по Видеоданным / А. Казаков, А. Бовырин // The 22nd International Conference on Computer Graphics and Vision. - 2012. - pp. 514-523.

38. Местецкий Л. М. Математические методы распознавания образов / Л. М Местецкий // Курс лекций МГУ, ВМиК, кафедра Математические методы прогнозирования. - 2002-2004.

Приложение А. Исходный код программы для подготовки обучающей выборки

1) file "Program.cs"

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

namespace PictureCropper {

static class Program {

/// The main entry point for the application.

[STAThread]

static void Main() {

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

}

}

}

//end of the file//

2) file "Positives.cs"

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using Emgu.CV;

using Emgu.Util;

using Emgu.CV.Structure;

using Emgu.CV.Features2D;

using Emgu.CV.CvEnum;

using Emgu.CV.Util;

using System.IO;

namespace Positive{

public partial class Form1 : Form{

public Form1(){

InitializeComponent();

}

List<string> St = new List<string>(); //file addresses

Image<Bgr, Byte> CurentIm; //current image

int currentimg = 0; //# of the current image

string fileadress; //description file address

Point MouseDownStart = new Point();

Image<Bgr, Byte> Crop; //cropped image

private void Form1_Load(object sender, EventArgs e){

FolderBrowserDialog FBD = new FolderBrowserDialog();

FBD.SelectedPath = Environment.CurrentDirectory;

if (FBD.ShowDialog() == DialogResult.OK) { //open drectory

string folder = FBD.SelectedPath;

DirectoryInfo thisdir = new DirectoryInfo(folder);

FileInfo[] FI = thisdir.GetFiles();

for (int l = 0; l < FI.Length; l++) //all images in the list

if ((FI[l].Extension == ".jpg") || (FI[l].Extension == ".jpeg") || (FI[l].Extension == ".bmp") || (FI[l].Extension == ".png")){

St.Add(FI[l].FullName);

}

CurentIm = new Image<Emgu.CV.Structure.Bgr, byte>(St[currentimg]);

PictureWindow.Image = CurentIm; //current image output

string s = folder + ".dat";

if (File.Exists(s))

File.Delete(s);

fileadress = s;

}

}

private void PictureWindow_MouseDown(object sender, MouseEventArgs e)

{

MouseDownStart = new System.Drawing.Point(e.X, e.Y);

}

private void PictureWindow_MouseUp(object sender, MouseEventArgs e)

{

Point Select = new Point(Math.Min(e.X, MouseDownStart.X), Math.Min(e.Y, MouseDownStart.Y));

Point Size = new Point(0, 0);

Size.X = Math.Abs(e.X - MouseDownStart.X);

Size.Y = Math.Abs(e.Y - MouseDownStart.Y);

double sx = ((double)CurentIm.Width / (double)PictureWindow.Width);

double sy = ((double)CurentIm.Height / (double)PictureWindow.Height);

Rectangle Rec = new Rectangle((int)(Select.X * sx), (int)(Select.Y * sy), (int)(Size.X * sx), (int)(Size.Y * sy));

Image<Bgr, Byte> Sel = CurentIm.Clone();

Sel.Draw(Rec, new Bgr(100, 100, 100), 3);

PictureWindow.Image = Sel;

CurentIm.ROI = Rec;

Crop = CurentIm.Clone();

CvInvoke.cvResetImageROI(CurentIm);

}

private void Form1_KeyPress(object sender, KeyPressEventArgs e)

{

if (e.KeyChar == ' ')

{

NewNumber(); //next image

}

if ((e.KeyChar == 's') || (e.KeyChar == 'ы')){

SaveIm(); //save

}

if ((e.KeyChar == 'r') || (e.KeyChar == 'к')){

SaveIm(); //save

NewNumber();//next image

}

}

private void NewNumber(){

if (currentimg + 1 < St.Count){

currentimg += 1;

if (File.Exists(St[currentimg])){

CurentIm = new Image<Emgu.CV.Structure.Bgr, byte>(St[currentimg]);

PictureWindow.Image = CurentIm;

}

}

}

private void SaveIm()

{

string s = St[currentimg].Substring(0, St[currentimg].LastIndexOf("\\") + 1) + "Cropper";

if (!Directory.Exists(s))

System.IO.Directory.CreateDirectory(s);

s = s + St[currentimg].Substring(St[currentimg].LastIndexOf("\\"), St[currentimg].Length - St[currentimg].LastIndexOf("\\") - 4)

+ DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + ".bmp";

Crop.Save(s);

File.AppendAllText(fileadress, s + " 1 " + "0 0 " + Crop.Width + " " + Crop.Height + "\r\n");

}

private void PictureWindow_Click(object sender, EventArgs e){

}

}

//end of the file//

Приложение Б. Исходный код приложения для детектирования пешеходов

1) File "MainActivity.java"

package opencvex.hig.opencvdetect;

import android.app.Activity;

import android.os.Bundle;

import org.opencv.android.BaseLoaderCallback;

import org.opencv.android.LoaderCallbackInterface;

import android.view.View;

import android.widget.TextView;

import android.content.Intent;

public class MainActivity extends Activity{

private TextView mHelloTextView;

public static String classifierType;

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {

@Override

public void onManagerConnected(int status) {

switch (status) {

case LoaderCallbackInterface.SUCCESS:// Load native library after(!) OpenCV initialization

setContentView(R.layout.activity_main);

mHelloTextView = (TextView)findViewById(R.id.mHelloTextView);

break;

default:

super.onManagerConnected(status);

break;

}

}

};

@Override

public void onCreate(Bundle savedInstanceState) {

setContentView(R.layout.activity_main);

mHelloTextView = (TextView)findViewById(R.id.mHelloTextView);

super.onCreate(savedInstanceState);

}

public void onClickHaar(View view) {

mHelloTextView.setText("Haar method is chosen");

classifierType = "Haar";

Intent intent = new Intent(MainActivity.this, VideoActivity.class);

startActivity(intent);

}

public void onClickLBP(View view) {

mHelloTextView.setText("LBP method is chosen");

classifierType = "LBP";

Intent intent = new Intent(MainActivity.this, VideoActivity.class);

startActivity(intent);

}

public void onClickHOG(View view) {

mHelloTextView.setText("HOG method is chosen");

Intent intent = new Intent(MainActivity.this, VideoActivity.class);

classifierType = "HOG";

startActivity(intent);

}

}//end of the file//

2) File "VideoActivity.java"

package opencvex.hig.opencvdetect;

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.util.Log;

import org.opencv.android.BaseLoaderCallback;

import org.opencv.android.CameraBridgeViewBase;

import org.opencv.android.LoaderCallbackInterface;

import org.opencv.android.OpenCVLoader;

import org.opencv.core.CvType;

import org.opencv.core.Mat;

import org.opencv.core.MatOfRect;

import org.opencv.imgproc.Imgproc;

import android.view.WindowManager;

import org.opencv.android.*;

import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener;

import java.io.File;

import java.io.InputStream;

public class VideoActivity extends Activity implements CvCameraViewListener {

private int screen_w, screen_h;

private CameraBridgeViewBase openCvCameraView;

private Mat grayscaleImage;

private Mat mGrey;

DetectionActivity detection = new DetectionActivity();

public static InputStream is;

public static File mCascadeFile;

public static File cascadeDir;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

openCvCameraView = new JavaCameraView(this, -1);

setContentView(openCvCameraView);

openCvCameraView.setCvCameraViewListener(this);

}

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {

@Override

public void onManagerConnected(int status) {

switch (status) {

case LoaderCallbackInterface.SUCCESS:// Load native library after(!) OpenCV initialization

if (MainActivity.classifierType == "Haar" || MainActivity.classifierType == "LBP") {

classifierType(MainActivity.classifierType);

detection.load_cascade();// Copy the resource into a temp file so OpenCV can load it

openCvCameraView.enableView();//go

} else {

openCvCameraView.enableView();//go

}

break;

default:

super.onManagerConnected(status);

break;

}

}

};

@Override

public Mat onCameraFrame(Mat aInputFrame) {

Imgproc.cvtColor(aInputFrame, grayscaleImage, Imgproc.COLOR_RGBA2RGB); // Create a grayscale image

MatOfRect pedestrians = new MatOfRect();

if (screen_w >= 1920 & screen_h >= 1080) {

detection.low_resolution(aInputFrame);//use the func to reduce resolution

}

if (MainActivity.classifierType == "Haar" || MainActivity.classifierType == "LBP") {

detection.cascadeDetector(aInputFrame, grayscaleImage, pedestrians);

} else {

detection.hogDetector(aInputFrame, grayscaleImage, pedestrians);

}

return aInputFrame;

}

@Override

public void onResume() {

super.onResume();

OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);

}

@Override

public void onDestroy() {

super.onDestroy();

if (openCvCameraView != null)

openCvCameraView.disableView();

}

@Override

public void onCameraViewStarted(int width, int height) {

screen_w = width;

screen_h = height;

grayscaleImage = new Mat(height, width, CvType.CV_8UC4);

mGrey = new Mat(screen_w, screen_h, CvType.CV_8UC1);

Log.v("MyActivity","Height: "+height+" Width: "+width);

}

@Override

public void onCameraViewStopped() {

grayscaleImage.release();

}

public void classifierType(String classifierType){

switch (classifierType) { // Copy the resource into a temp file so OpenCV can load it

case "Haar":

is = getResources().openRawResource(R.raw.cascade);

cascadeDir = getDir("cascade", Context.MODE_PRIVATE);

mCascadeFile = new File(cascadeDir, "cascade.xml");

break;

case "LBP":

is = getResources().openRawResource(R.raw.lbpcascade);

cascadeDir = getDir("cascade", Context.MODE_PRIVATE);

mCascadeFile = new File(cascadeDir, "lbpcascade.xml");

break;

default:

break;

}

}

}//end of the file//

3) File "DetectionActivity.java"

import android.app.Activity;

import android.util.Log;

import org.opencv.android.CameraBridgeViewBase;

import org.opencv.core.Core;

import org.opencv.core.CvType;

import org.opencv.core.Mat;

import org.opencv.core.MatOfRect;

import org.opencv.core.Rect;

import org.opencv.core.Scalar;

import org.opencv.core.Size;

import org.opencv.imgproc.Imgproc;

import org.opencv.objdetect.CascadeClassifier;

import java.io.FileOutputStream;

import java.util.List;

import org.opencv.core.MatOfDouble;

import org.opencv.core.MatOfFloat;

import org.opencv.core.Point;

import org.opencv.objdetect.HOGDescriptor;

public class DetectionActivity extends Activity {

private int screen_w, screen_h;

private CascadeClassifier cascadeClassifier;

private Mat grayscaleImage;

private Mat mGrey;

private int absoluteFaceSize;

// VideoActivity videoactivity = new VideoActivity();

public void load_cascade() {

try {

//videoactivity.classifierType(classifierType);

FileOutputStream os = new FileOutputStream(VideoActivity.mCascadeFile);

byte[] buffer = new byte[4096];

int bytesRead;

while ((bytesRead = VideoActivity.is.read(buffer)) != -1) {

os.write(buffer, 0, bytesRead);

}

VideoActivity.is.close();

os.close();

cascadeClassifier = new CascadeClassifier(VideoActivity.mCascadeFile.getAbsolutePath());// Load the cascade classifier

} catch (Exception e) {

Log.e("MainActivity", "Error loading cascade", e);

}

if(cascadeClassifier.empty()) {

Log.v("MyActivity","--(!)Error loading A\n");

return;

}

else{

Log.v("MyActivity", "Loaded cascade classifier");

} каскадный классификатор машинный обучение

}

public Mat hogDetector(Mat aInputFrame, Mat grayscaleImage, MatOfRect faces){

HOGDescriptor hog = new HOGDescriptor();

MatOfFloat descriptors = HOGDescriptor.getDefaultPeopleDetector(); hog.setSVMDetector(descriptors);

MatOfDouble weights = new MatOfDouble();

hog.detectMultiScale(grayscaleImage, faces, weights

Point rectPoint1 = new Point(); //Переменные для выделения областей на фотографии

Point rectPoint2 = new Point();

Scalar fontColor = new Scalar(0, 0, 0);

Point fontPoint = new Point();

if (faces.rows() > 0) {

List<Rect> rectangles = faces.toList();

int i = 0;

List<Double> weightList = weights.toList();

for (Rect rect : rectangles) {

float weigh = weightList.get(i++).floatValue();

rectPoint1.x = rect.x;

rectPoint1.y = rect.y;

fontPoint.x = rect.x;

fontPoint.y = rect.y - 4;

rectPoint2.x = rect.x + rect.width;

rectPoint2.y = rect.y + rect.height;

final Scalar rectColor = new Scalar(0, 0, 0);

Core.rectangle(aInputFrame, rectPoint1, rectPoint2, rectColor, 2);//

Core.putText(aInputFrame,

String.format("%1.2f", weigh),

fontPoint, Core.FONT_HERSHEY_PLAIN, 1.5, fontColor,

2, Core.LINE_AA, false);

}

}

return aInputFrame;

}

public Mat cascadeDetector (Mat aInputFrame, Mat grayscaleImage, MatOfRect faces) {

if (cascadeClassifier != null) {// Use the classifier to detect faces

cascadeClassifier.detectMultiScale(grayscaleImage, faces, 1.1, 2, 2,

new Size(absoluteFaceSize, absoluteFaceSize), new Size());//

}

Rect[] facesArray = faces.toArray(); // If there are any faces found, draw a rectangle around it

for (int i = 0; i < facesArray.length; i++)

Core.rectangle(aInputFrame, facesArray[i].tl(), facesArray[i].br(), new Scalar(0, 255, 0, 255), 3);

return aInputFrame;

}

public Mat low_resolution(Mat aInputFrame){

Imgproc.resize(aInputFrame, aInputFrame, new Size(), 0.5, 0.5, Imgproc.INTER_LINEAR);

Imgproc.equalizeHist(aInputFrame, aInputFrame);

return aInputFrame;

}

}//end of the file

4) File "activity_main.xml"

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingLeft="16dp"

android:paddingRight="16dp"

android:paddingTop="16dp"

android:paddingBottom="16dp"

tools:context=".MainActivity"

android:weightSum="1"

android:background="@color/material_blue_grey_800">

<ImageButton

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/imageButton"

android:src="@drawable/haarbuttonbig"

android:layout_below="@+id/mHelloTextView"

android:layout_centerHorizontal="true"

android:layout_marginTop="34dp"

android:onClick="onClickHaar"/>

<TextView

android:id="@+id/mHelloTextView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/greeting"

android:textAppearance="?android:attr/textAppearanceLarge"

android:layout_alignParentTop="true"

android:layout_centerHorizontal="true"

android:layout_marginTop="27dp"

android:textColor="@color/greetingtext_color" />

<ImageButton

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/imageButton2"

android:src="@drawable/lbpbuttonbig"

android:onClick="onClickLBP"

android:layout_below="@+id/imageButton"

android:layout_alignLeft="@+id/imageButton"

android:layout_alignStart="@+id/imageButton"

android:layout_marginTop="28dp" />

<ImageButton

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/imageButton3"

android:layout_marginTop="32dp"

android:src="@drawable/hogbuttonbig"

android:onClick="onClickHOG"

android:layout_below="@+id/imageButton2"

android:layout_alignRight="@+id/imageButton"

android:layout_alignEnd="@+id/imageButton" />

</RelativeLayout>

//end of the file//

5) File "land\activity_main.xml"

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="match_parent"

android:background="@color/material_blue_grey_800"

android:layout_height="match_parent"

android:weightSum="1">

<LinearLayout

android:orientation="vertical"

android:layout_height="wrap_content"

android:layout_width="match_parent"

android:layout_gravity="center"

android:paddingLeft="20dp"

android:paddingRight="20dp"

android:background="@color/material_blue_grey_800">

<TableLayout

android:background="@color/material_blue_grey_800"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:layout_gravity="center"

android:stretchColumns="*">

<TableRow>

<TextView

android:id="@+id/mHelloTextView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/greeting2"

android:textAppearance="?android:attr/textAppearanceLarge"

android:textColor="@color/greetingtext_color" />

</TableRow>

<TableRow>

<ImageButton

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/imageButton"

android:src="@drawable/haarbuttonbig"

android:layout_marginTop="34dp"

android:onClick="onClickHaar"

android:background="@color/dark_button_background2" />

</TableRow>

<TableRow></TableRow>

<TableRow></TableRow></TableLayout>

</LinearLayout>

<ImageButton

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:id="@+id/imageButton2"

android:src="@drawable/lbpbuttonbig"

android:onClick="onClickLBP"

android:background="@color/dark_button_background2"

android:layout_marginTop="18dp" />

<ImageButton

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/imageButton3"

android:src="@drawable/hogbuttonbig"

android:onClick="onClickHOG"

android:background="@color/dark_button_background2"

android:layout_marginTop="5dp" />

</LinearLayout>

//end of the file//

6) File "AndroidManifest.xml"

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="opencvsranyindk.hig.opencvpodkluch">

android:versionCode="19"

android:versionName="2.1">

<supports-screens android:resizeable="true"

android:smallScreens="true"

android:normalScreens="true"

android:largeScreens="true"

android:anyDensity="true" />

<uses-sdk android:minSdkVersion="8"

android:targetSdkVersion="10" />

<uses-permission android:name="android.permission.CAMERA"/>

<uses-feature android:name="android.hardware.camera" android:required="false"/>

<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>

<uses-feature android:name="android.hardware.camera.front" android:required="false"/>

<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>

<application

android:allowBackup="true"

android:label="@string/app_name"

android:icon="@drawable/ic_launcher"

android:theme="@style/AppTheme">

<activity android:name="MainActivity">

android:label="@string/app_name"

android:screenOrientation="landscape"

android:configChanges="keyboardHidden|orientation">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity android:name=".VideoActivity"

android:label="video_title">

</activity>

<activity android:name=".DetectionActivity"

android:label="det_title">

</activity>

</application>

</manifest>

//end of the file//

Размещено на Allbest.ru


Подобные документы

  • Виды машинного обучения, его основные задачи и методы. Подходы к классификации: логистическая регрессия, наивный байесовский классификатор, стохастический градиентный спуск, K-ближайший сосед, дерево решений, случайный лес, метод опорных векторов.

    курсовая работа [436,9 K], добавлен 14.12.2022

  • Популярность алгоритмов машинного обучения для компьютерных игр. Основные техники обучения с подкреплением в динамической среде (компьютерная игра "Snake") с экспериментальным сравнением алгоритмов. Обучение с подкреплением как тип обучения без учителя.

    курсовая работа [1020,6 K], добавлен 30.11.2016

  • Различные методы решения задачи классификации. Нейросетевые парадигмы, методы обучения нейронных сетей, возникающие при этом проблемы и пути их решения. Описание программной реализации классификатора, его функциональные возможности и результаты обучения.

    дипломная работа [1,0 M], добавлен 28.12.2015

  • Обзор существующих алгоритмов для обнаружения лиц. Выравнивание лица с помощью разнообразных фильтров. Использование каскадного классификатора Хаара для поиска лиц на изображении. Распознавание лиц людей с использованием локальных бинарных шаблонов.

    дипломная работа [332,4 K], добавлен 30.09.2016

  • Диагностический анализ изучения алгоритмов обучения нейронных сетей "с учителем". Сбор входных и выходных переменных для наблюдений и понятие пре/пост процессирования. Подготовка и обобщение многослойного персептрона, модель обратного распространения.

    курсовая работа [249,3 K], добавлен 22.06.2011

  • Создание системы предобработки данных; разработка системы классификации на базе методов и алгоритмов машинного обучения, их реализация в программной системе. Предобработка информации, инструкция пользователя, система классификации, машинный эксперимент.

    дипломная работа [917,1 K], добавлен 31.01.2015

  • Описание и анализ предметной области. Принципы обучения слепому методу печати. Обзор существующих клавиатурных тренажеров. Диаграмма объектов предметной области. Функции, которые должна выполнять разрабатываемая система. Построение структурной схемы.

    курсовая работа [8,1 M], добавлен 28.08.2012

  • Проект системы процесса обучения студентов; словарь предметной области, формулировка проблемы. Назначение продукта, заинтересованность пользователей; обзор ключевых потребностей. Альтернативные и конкурентные решения. Архитектура программной системы.

    курсовая работа [1,2 M], добавлен 19.03.2012

  • Искусственные нейронные сети как одна из широко известных и используемых моделей машинного обучения. Знакомство с особенностями разработки системы распознавания изображений на основе аппарата искусственных нейронных сетей. Анализ типов машинного обучения.

    дипломная работа [1,8 M], добавлен 08.02.2017

  • Обзор существующий решений в области электронного обучения. Исследование архитектурных и технологических аспектов построения виртуальных корпоративных университетов. Анализ возможностей системы дистанционного обучения Sakai, отличительные особенности.

    дипломная работа [2,7 M], добавлен 09.04.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.