Министерство образования Российской Федерации Московский Государственный Технический Университет им. Н.Э. Баумана Факультет «Информатика и системы управления» Кафедра «Теоретическая информатика и компьютерные технологии» УТВЕРЖДАЮ Заведующий кафедрой ИУ-9 ______________ (И.П. Иванов) «___» ______________ 20___ г. Техническая документация на программный проект «Выделение контура ладони на изображении» Исполнители: И.М. Давиденко, К.В. Кондрашов, А.А. Рябинин, А.Г. Руденко Группа: ИУ9-111 СОГЛАСОВАНО Руководитель работы ___________ (М.А. Басараб) «___» _________________ 20___ г. Оглавление 1 Введение..................................................................................................................................3 2 Алгоритм выделения контура руки ......................................................................................4 3 4 2.1 Описание алгоритма .......................................................................................................4 2.2 Рекомендации по съемке изображения .........................................................................7 Клиентское приложение ........................................................................................................8 3.1 Установка приложения ...................................................................................................8 3.2 Запуск приложения .........................................................................................................8 3.3 Получение снимка ..........................................................................................................8 3.4 Просмотр полученного снимка .....................................................................................9 3.5 Настройка адреса сервера ..............................................................................................9 3.6 Передача изображения на сервер ..................................................................................9 3.7 Получение контура .........................................................................................................9 3.8 Выход из приложения ..................................................................................................10 Серверное приложение ........................................................................................................11 4.1 Интерфейс......................................................................................................................11 4.2 Системные требования .................................................................................................12 4.3 Описание сообщений журнала событий .....................................................................12 1 Введение Android Contour Reader — программный комплекс, предназначенный для выделения контура руки на фотографии с камеры мобильного телефона. Программный комплекс состоит из двух частей — сервера, функционирующего под управлением ОС Windows и клиента для мобильных телефонов под управление OC Android. Сервер осуществляет прием изображений, их обработку, и посылку результатов клиентам. Клиент предназначен для съемки изображений и отображения результатов обработки пользователю. Все файлы проекта доступны по адресу: http://code.google.com/p/android-contour-reader/ 2 Алгоритм выделения контура руки 2.1 Описание алгоритма Для локализации области поиска руки используется специальный шаблон (рис. 2.1), доступный для загрузки по адресу http://android-contourreader.googlecode.com/files/chess.png. Для использования шаблон следует распечатать на листе формата А4 с полями 1 см с каждой стороны. Рисунок 2.1. Шаблон для локализации области распознавания. После локализации области к ней применяется перспективное преобразование с целью приведения области к стандартной прямоугольной форме, с которой далее работает алгоритм (рис. 2.2). Алгоритм оперирует в цветовом пространстве HSV — оттенок, насыщенность, яркость. Для каждого канала строится гистограмма и применяется метод Оцу для нахождения порога для оптимального разделения изображения на два класса (рис. 2.3). В качестве классов выступают фон и рука пользователя. К каждому каналу применяется пороговое преобразование с вычисленным значением порога. Полученные в результате бинаризованные изображения комбинируются с целью получения маски руки (рис 2.4). Рисунок 2.2. Исходное изображение и локализованная область Рисунок 2.3. Гистограммы изображения и пороги по методу Оцу Рисунок 2.4. Маска руки Полученная маска может содержать артефакты, вызванные неоптимальными условиями съемки. В связи с этим в маске ищется непрерывная область наибольшей площади. Контур этой области и полагается искомым контуром руки (рис. 2.5). Рисунок 2.5. Контур руки К точкам полученного контура применяется обратное перспективное преобразование с тем, чтобы их координаты соответствовали руке на исходном изображении. 2.2 Рекомендации по съемке изображения Для локализации области распознавания необходимо, чтобы в кадре были полностью видимы оба маркера «шахматная доска», присутствующие на шаблоне. Они не должны оказаться за пределами кадра или перекрываться посторонними предметами. Алгоритм чувствителен к условиям освещения. Основное требование — равномерность освещения в пределах шаблона, как по яркости, так и по оттенку (цветовой температуре). Желательно при этом не использовать источники света, дающие слишком теплый цвет, так как при этом белый цвет приобретает оттенок, близкий к цвету кожи. Для более надежного распознавания рекомендуется: производить съемку в направлении, примерно перпендикулярном плоскости руки (шаблона распознавания); производить съемку таким образом, чтобы шаблон полностью присутствовал в кадре. 3 Клиентское приложение 3.1 Установка приложения Для установки приложения необходимо на телефоне перейти по ссылке: http://androidcontour-reader.googlecode.com/files/acr.apk и согласиться на установку приложения. 3.2 Запуск приложения Для запуска приложения необходимо нажать на иконку появляющуюся после установки в списке доступных программ (рис 3.1). Рисунок 3.1. Иконка клиентского приложения 3.3 Получение снимка После запуска приложения, камера мобильного телефона будет активирована и изображение с нее будет в реальном времени отображаться на экране. Также на экране будут отображены доступные пользователю параметры съемки (рис. 3.2): 1. Тип съемки («обычный» или «с выделением сцены»). 2. Разрешение кадра («2», «6» или «8» МП с соотношением сторон «4:3» или «16:9»). 3. Использование фронтальной камеры вместо основной. 4. Получение снимка по таймеру («нет», «после 2 секунд», «после 5 секунд»). 5. Настройки вспышки («выключена», «включена», «автоматически»). Рекомендуется использовать: обычный кадр, 6 МП, автоматическая вспышка. Двумя основными способами спуска затвора являются: касание экрана и использование специальной кнопки на телефоне (может отсутствовать на некоторых моделях телефонов). Автофокусирование происходит автоматически. В случае успеха пользователю подается звуковой сигнал, и белый прямоугольник в центре экрана становится зеленым. Рисунок 3.2. Параметры съемки Успешное получение кадра подтверждается звуковым сигналом, имитирующим спуск затвора на пленочных фотоаппаратах. 3.4 Просмотр полученного снимка Полученный на предыдущем шаге снимок отображается на экране для предварительного просмотра. Для повторной съемки необходимо нажать клавишу «Назад». Для передачи — коснуться экрана. 3.5 Настройка адреса сервера После установки программы все обрабатываются на основном сервере с ip-адресом «217.10.46.22». Для его изменения необходимо нажать кнопку «Меню» на телефоне и в контекстном меню выбрать пункт «Set server address». В появившемся диалоговом окне присутствует поле ввода, в котором можно задать ip-адрес или доменное имя сервера, и подтвердить изменения нажатием кнопки «ОК». Для выхода без сохранения необходимо нажать кнопку «Cancel» или «Назад» на корпусе телефона. Рисунок 3.3. Диалоговое окно изменения адреса сервера. 3.6 Передача изображения на сервер Касание экрана инициирует начало передачи изображения на сервер для его обработки. В процессе передачи данных отображается прогресс выполнения передачи (рис 3.4), что позволяет удостовериться в активности соединения на медленных мобильных сетях. Передача может быть отменена в любой момент нажатием кнопки «Назад» на корпусе телефона. При недоступности сервера будет выведено соответствующее уведомление. Рисунок 3.4. Отображение прогресса передачи и обработки изображения на сервере. 3.7 Получение контура Обработав изображение, сервер высылает координаты найденного контура обратно, которые отображаются в виде желтой ломанной (рис 3.5). В случае если контур не был найден, выводится соответствующее сообщение. Рисунок 3.5. Результат работы программы. Желтой ломанной выделен контур руки. 3.8 Выход из приложения Выход из приложения осуществляется обычным для Android-приложений способом: нажатием клавиши «Назад» несколько раз или «Меню» один раз. 4 Серверное приложение Приложение является сервером по обработке изображений, поступающих с камеры мобильного телефона. Обработка изображения заключается в распознавании контура ладони человека. Сервер доступен для загрузки по адресу: http://android-contourreader.googlecode.com/files/acr_server.zip 4.1 Интерфейс Экран приложения (рис. 4.1) разделен на две части. В верхней части отображаются изображения, поступающие с мобильных телефонов и контур ладони после его распознавания. В нижней части расположено окно журнала событий, в котором выводиться основная информация о состоянии и событиях приложения. Приложение можно свернуть в область уведомления (трей), нажав кнопку «Свернуть». Восстановить обратно окно можно двойным щелчком по иконке в области уведомлений. Рисунок 4.1 Главное окно серверного приложения 4.2 Системные требования процессор Pentium или более современный с тактовой частотой 1,0 ГГц и выше; ОЗУ: не менее 512 МБ, рекомендуется 1 ГБ и более; cвободное пространство на жестком диске компьютера не менее 500 Мбайт сетевое соединение операционная система Microsoft Windows XP и выше. 4.3 Описание сообщений журнала событий Socket created. Listening port 12345 – возникает при старте приложения. Означает что сокет создан и привязан к указанному порту. Waiting for connection… – приложение ожидает новых входящих соединений Client connected: <ip_address>:<port> – приложение зарегистрировало входящее соединение с указанного IP адреса и порта. Следующие сообщения начинаются с префикса <ip_address>:<port>, что означает, что сообщение относится к соединению с соответствующим IP адресом и портом. <ip_address>:<port>: Receiving image... – начат прием данных (изображения) со входящего соединения с указанным IP адресом и портом. <ip_address>:<port>: Image... – начат прием данных (изображения) со входящего соединения с указанным IP адресом и портом. <ip_address>:<port>: Generating contour... – запущена процедура распознавания контура ладони <ip_address>:<port>: Contour generated. Sending... – процедура распознавания контура ладони завершена. Начата передача контура на мобильное устройство. <ip_address>:<port>: Contour sent – посылка контура ладони на мобильное устройство завершена. <ip_address>:<port>: ERROR: timeout – превышен интервал ожидания. Соединение будет закрыто. <ip_address>:<port>: Connection error : <сообщение> – ошибка соединения. <ip_address>:<port>: Protocol error: Unexpected command – клиент нарушил протокол взаимодействия, отправив не ту команду, которая ожидается. <ip_address>:<port>: Protocol error: Magic const checking failed – клиент нарушил протокол взаимодействия отправив не верный код завершения операции. Exception occurred : <сообщение> – неожиданная ошибка приложения. Обратитесь к разработчику.