Разработка приложения на Java по выделению лица на фотографии
Распознавание образов как один из векторов развития искусственного интеллекта. Реализация алгоритма выделения лица на фотографии на языке программирования Java. Исходный код приложения, иллюстрация работоспособности с помощью фотографий различных людей.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | статья |
Язык | русский |
Дата добавления | 19.12.2017 |
Размер файла | 1,5 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Разработка приложения на Java по выделению лица на фотографии
Одним из важнейших векторов в развитии искусственного интеллекта является распознавание образов, которое уже не первое десятилетие продолжает использовать все вычислительные мощности, предоставляемые ему человечеством. Определение лиц -развитая подветвь распознавания образов. Системы распознавания лиц все чаще становятся нужны в мире, будь то электронные замки, которые пропускают только определенных людей или пароли на компьютерах. Определение людей на фотографиях в социальных сетях, да что там, любой современный фотоаппарат или веб-камера имеет в своем функционале какой-либо алгоритм для этого.
Для того чтобы работать с алгоритмом распознавания лиц вначале требуется составить базу каскадов, дабы избежать ошибок. В каскадах хранятся образцы не только лиц, но и объектов, принимаемых за них. В каскадах описаны цветовые пятна и их перекрещивания таким образом, чтобы программа поняла нужно ему это или нет.
Признаки, применяемые алгоритмом, применяют суммирование пикселей из прямоугольных зон. На рис.1 показано четыре разнообразных признака. Размер каждого признака подсчитывается как сумма пикселей в белых прямоугольниках, из которой отнимается сумма пикселей в черных зонах. При хранении изображения в интегральном формате, проверка прямоугольного признака на определенной позиции проводится за определенное количество времени, именно здесь проявляется их преимущество перед более точными вариантами. Каждая прямоугольная зона в применяемых признаках всегда смежна с иным прямоугольником, поэтому расчет признака с двумя прямоугольниками заключается в шести обращениях в интегральный массив, для признака с тремя прямоугольниками - в восьми, с четырьмя прямоугольниками - в девяти.
Рис.1 - Признаки
алгоритм java фотография приложение
Р. Гонсалес, Р. Вудс описали этот и другие методы распознавания образов [6]. Создатели метода П. Виола и М. Дж. Джонес описали распознавание образов в режиме реального времени [14]. Л. М .Местецкий рассмотрел методы распознавания лиц с точки зрения математики [10]. P.Sinha, B.Balas, Y.Ostrovsky и R.Russel исследовали распознание образов мозгом [13]. Козлов П. В., Липин Ю. Н., Южаков А.А. описали алгоритм распознавания лица человека [8]. Достоинства и недостатки методов распознавания человека по характеристикам лица описывают А. Б. Щербань и К. С. Тихонова [11]. Концепцию алгоритма распознавания и анализа лица человека исследуют Д. В. Бутенко, А. В. Перепелицын [5]. Я. Ю. Дорогий описывает построение офтальмогеометрического классификатора для задачи распознавания человека по лицу [7]. А. А. Макаренко, В. Т. Калайда рассмотрели применение нейросетевой технологии для систем распознавания лица человека на групповом изображении [9].
OpenCV (англ. Open Source Computer Vision Library, библиотека компьютерного зрения с открытым исходным кодом) -- библиотека алгоритмов компьютерного зрения, обрабатывания изображений и численных алгоритмов всеобщего назначения с открытым кодом. Создана на C/C++, также ведется разработка для Python, Java, Ruby, Matlab, Lua и прочих языков. OpenCV -- это комплект алгоритмов и библиотек для работы с компьютерным зрением. Поиск объектов на изображениях, распознание символов и все такое прочее. Г. Брадски и А. Каеблер описали основные функции и методы OpenCV [12]. JavaCV является оболочкой для OpenCV для использования OpenCV в Java.
Алгоритм реализуемой программы:
1. Открываем изображение или берем его с камеры методами JavaCV.
2. Программа находит на фотографии лица и вставляет рамки вокруг них.
Создается переменная класса изображения, используемого в JavaCV и окно, в которое будет выводится изображение (рис 2).
Рис. 2. Создание переменной изображения и окна
Окно создано, теперь в переменную нужно «поместить» изображение. Сначала код, где берется изображение с камеры (рис 3).
Рис. 3. Получение изображения с камеры
Здесь переменная grabber - объект с которого будет происходить захват. 0 -- это индекс устройства, он может быть больше нуля, если камер несколько. Значение -1 несет смысл «любая доступная камера». Метод start() запускает камеру, а метод grab() передает текущий кадр с камеры в переменную.
Последняя строка проверяет не пуста ли переменная originalImageи, если это так повторяет предыдущую строку. Загрузить изображение из файла можно, с помощью метода cvLoadImage(рис. 4).
Рис. 4. Получение изображения из файла
RGB-изображение, загруженное через cvLoadImage для поиска требуется преобразовать изображение в градации серого. Сначала создается пустое изображение с размерами загруженного, а затем копируется и преобразуется (рис. 5).
Рис. 5. Преобразование изображения в градации серого
В этом моменте написания кода, происходит главное - на основе каскада CASCADE_FILE выводится ряд найденных лиц.
Рассмотрим константу CASCADE_FILE. Для программиста это будет файл haarcascade_frontalface_alt.xml, а для компьютера - критерий для того, чтобы находить лица на изображении. Каскады для лиц, носов, ртов, автомобильных номеров и т.д. располагаются в папке с OpenCV. А также возможно организовать их создание с помощью программ, располагающихся в папке bin директории, куда был установлен OpenCV. Таким образом, можно настроить каскад под определенное лицо, но для настройки понадобится несколько суток и выборка, состоящая из двух - четырех тысяч изображений, ведь чем больше фотографий в каскаде, тем меньше вероятность ошибки (рис. 6).
Рис. 6. Подключение каскада
Теперь нужно выделить лица на основном изображении (originalImage) (рис. 7).
Рис. 7. Выделение лиц на изображении
Изображение выводится в созданное ранее окно (рис. 8).
Рис. 8. Вывод изображения в окно
Если изображение граббится с камеры, то необходимо завершить ее работу (рис. 9):
Рис. 9. Остановка работы камеры
После компиляции приложения требуется провести его тестирование. Запускается приложение через командную строку (рис. 10).
Рис. 10. Запуск приложения
Для того, чтобы загрузить изображение (рис. 12) нужно ввести его имя на диске (рис. 11).
Рис. 11. Загрузка изображения
Рис. 12 Исходное изображение
В результате, после выполнения, программа выводит обработанное изображение в отдельное окно (рис. 13).
Рис. 13. Вывод изображения в окно
На первой фотографии (рис. 14) из трех в рамки поля зрения программы попало 5 лиц и одно предплечье, что, является ошибкой каскада.
Рис. 14. Фото с ошибкой каскада
На второй фотографии (рис. 15) каскад не допустил ошибок, и только лицо девушки программа выделила.
Рис. 15 Фото с точным распознанием одного лица
Последняя фотография (Рис 16).
Рис. 16 Фото с точным распознанием множества лиц
В ходе решения задачи был изучен алгоритм распознавания образов Виолы-Джонса. На основе этого метода на Java было создано приложение, с помощью которого лица на фотографии выделяются рамкой. Данные исследования можно использовать в преподавании [1-4].
Список литературы
1. Баженов Р.И. О применении балльно-рейтинговой системы для оценивания курсовых работ по дисциплине «Интеллектуальные системы и технологии» // Приволжский научный вестник. 2014. № 5 (33). С. 135-138.
2. Баженов Р.И. Об организации деловых игр в курсе «Управление проектами информационных систем» //Научный аспект. 2014. Т. 1. № 1. С. 101-102.
3. Баженов Р.И. Информационная безопасность и защита информации: практикум. Биробиджан: Изд-во ГОУВПО «ДВГСГА», 2011. 140 с.
4. Баженов Р.И. Об организации научно-исследовательской практики магистрантов направления «Информационные системы и технологии» // Современные научные исследования и инновации. 2014. № 9-2 (41). С. 62-69.
5. Бутенко Д.В., Перепелицын А.В. Концепция алгоритма распознавания и анализа лица человека // Программные продукты и системы. 2011. № 1. С. 43.
6. Гонсалес Р., Вудс Р. Цифровая обработка изображений. М.: Техносфера, 2005. 1072 с.
7. Дорогий Я.Ю. Построение офтальмогеометрического классификатора для задачи распознавания человека по лицу // Информационные технологии. Радиоэлектроника. Телекоммуникации. 2012. Т. 2. № 2. С. 24-33.
8. Козлов П.В., Липин Ю.Н., Южаков А.А. Алгоритм распознавания лица человека / /Вопросы защиты информации. 2011. № 1. С. 52-57.
9. Макаренко А.А., Калайда В.Т. Применение нейросетевой технологии для систем распознавания лица человека на групповом изображении // Информационные технологии. 2007. № 9. С. 27-32.
10. Местецкий Л.М. Математические методы распознавания образов. М.: МГУ, 2002. С. 42 -44.
11. Щербань А.Б, Тихонова К.С. Достоинства и недостатки методов распознавания человека по характеристикам лица // Современные информационные технологии. 2010. № 11. С. 196-206.
Размещено на Allbest.ru
...Подобные документы
История развития языка программирования Java. История тетриса - культовой компьютерной игры, изобретённой в СССР. Правила проведения игры, особенности начисления очков. Создание интерфейса программы, ее реализация в среде Java, кодирование, тестирование.
курсовая работа [168,1 K], добавлен 27.09.2013Создание языка программирования с помощью приложения "Java". История названия и эмблемы Java. Обзор многообразия современных текстовых редакторов. Обработка строки. Методы в классе String. Java: задачи по обработке текста. Примеры программирования.
курсовая работа [276,1 K], добавлен 19.07.2014Назначение и возможности разработанного приложения для контроля активности сетевых и периферийных устройств предприятия. Язык программирования Java. Распределенные многоуровневые приложения. Структура базы данных, интерфейс разработанного приложения.
курсовая работа [1,0 M], добавлен 16.12.2012Сетевые возможности языков программирования. Преимущества использования Java-апплетов. Классы, входящие в состав библиотеки java.awt. Создание пользовательского интерфейса. Сокетное соединение с сервером. Графика в Java. Значения составляющих цвета.
курсовая работа [508,1 K], добавлен 10.11.2014Разработка и создание игры "Змейка". Использование динамически-активных принципов языка Java. Графические объекты программы. Описание игры, правила, теоретические сведения. Классы приложения. Типы данных. Реализация. Метод. Объект. Блок-схема игры.
курсовая работа [12,4 K], добавлен 18.06.2008Анализ возможных подходов к созданию web-приложения с использованием программирования Java и CGI. Разработка структуры базы данных и реализация полученной модели в рамках СУБД. Обеспечение диалога CGI-программы с пользователем, используя браузер.
курсовая работа [310,9 K], добавлен 07.08.2011Кратка историческая справка развития языка Java. Анализ предметной области. Java platform, enterprise and standart edition. Апплеты, сервлеты, gui-приложения. Розработка программного кода, консольное приложение. Результаты работы апплета, сервлета.
курсовая работа [549,2 K], добавлен 23.12.2015Этапы развития, особенности и возможности языка программирования Java; происхождение названия. Приложения Sun Microsystems: идеи, примитивные типы. Python - высокоуровневый язык программирования общего назначения: структуры данных, синтаксис и семантика.
реферат [79,0 K], добавлен 23.06.2012Архитектура Java и Java RMI, их основные свойства, базовая система и элементы. Безопасность и виртуальная Java-машина. Интерфейс Java API. Пример использования приложения RMI. Работа с программой "Calculator". Универсальность, портативность платформ.
курсовая работа [208,6 K], добавлен 03.12.2013Методология объектно-ориентированного программирования в Java. Понятия класса, объекта и объектной переменной. Динамическая и статическая объектные модели. Логическое структурирование приложения. Наследование в Java. Отличия интерфейсов от классов.
курс лекций [547,2 K], добавлен 01.05.2014История создания языка Java. Основные принципы объектно-ориентированного программирования. Структура, особенности синтаксиса и примеры прикладных возможностей использования языка Java, его преимущества. Перспективы работы программистом на языке Java.
курсовая работа [795,9 K], добавлен 14.12.2012Разработка компьютерного приложения "Кипящая жидкость" с применением навыков программирования на языке Java. Проектирование алгоритма для решения поставленной задачи, его предметная область. Создание приложения с графическим пользовательским интерфейсом.
отчет по практике [3,0 M], добавлен 29.10.2015Изучение объектно-ориентированного языка программирования Java, его функциональные возможности. Создание программного кода. Описание классов и методов, использованных в программе. Руководство пользователя, запуск сервера и клиентского приложения.
курсовая работа [1,8 M], добавлен 16.09.2015Архитектура и история создания операционной системы Android. Язык программирования Java. Выбор средства для реализации Android приложения. Программная реализация Android приложения. Проведение тестирования разработанного программного обеспечения.
курсовая работа [167,8 K], добавлен 18.01.2017Разработка тестирующего приложения, которое будет наглядно показывать, как должна выглядеть тестирующая программа для вычисления уровня интеллекта. Программная среда разработки, характеристика основных возможностей приложения. Стандартные диалоговые окна.
курсовая работа [716,9 K], добавлен 02.12.2013Разработка графического редактора для рисования двухмерной и трехмерной графики, используя язык программирования Java и интерфейсы прикладного программирования Java 2D и Java 3D. Создание графического редактора 3D Paint. Основные методы класса Graphics.
курсовая работа [197,5 K], добавлен 19.11.2009Обзор основных используемых языков программирования (С++, Java, Pascal). Анализ существующих методов шифрования паролей. Основные понятия объектно-ориентированного программирования. Реализация приложения для генерирования паролей на языке Object Pascal.
курсовая работа [822,4 K], добавлен 07.07.2012Java Runtime Environment - минимальная реализация виртуальной машины, необходимая для исполнения приложений, без компилятора и других средств разработки. Компиляция исходного кода через командную строку. Основные моменты создания игрового 2d-приложения.
курсовая работа [2,1 M], добавлен 26.04.2014Диаграмма консольного приложения табулирования функции. Отличие консольного приложения и приложения и GUI. Диаграмма классов для JFrameи JPanel. Создание простейшего фрейма в Java. Компоновка элементов интерфейса внутри фрейма. Цикл обработки событий.
лекция [693,8 K], добавлен 01.05.2014Разработка информационной системы "Больница" на основе Java EE-технологий. Проект и реализация трехслойного enterprise-приложения, работающего с базой данных больницы, его структура. Предметная область; визуализация архитектуры с помощью UML-диаграмм.
курсовая работа [2,0 M], добавлен 22.10.2012