Устройство слежения за лицом

Разница между человеческим и компьютерным зрением. Общая структура распознавания лица и алгоритмы. Программные средства разработки: Microsoft Visual Studio 2012 и Arduino IDE, Open Source Computer Vision Library, языки программирования С++ и С – 51.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 06.06.2018
Размер файла 6,6 M

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

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

Размещено на http://www.allbest.ru/

Введение

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

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

Постановка задачи

Необходимо разработать и собрать устройство, которое способно определять лица на основе OpenCV за счет захвата видео с веб-камеры со встроенным алгоритмом детектирования лица и отслеживать их с помощью системой слежения на базе ArduinoUno и сервоприводов,которые отвечают за координаты X, Y.

1. Компьютерное зрение

1.1 Компьютерное зрение

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

На данном этапе развития компьютерных технологиях, КЗ можно считать самой передовой и перспективной технологией.

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

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

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

Основываясь на то, что КЗ является технологической дисциплиной, она стремится применить как теорию, так и технологию это привело к созданию системы КЗ.

Рисунок 1. - Системы компьютерного зрения.

1.2 История развитие компьютерного зрения

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

· 1955 г. - профессор МТИ Оливер Селфридж опубликовал статью «Глаза и уши для компьютера». В ней онпредложил идею оснащать компьютеры средствами, за счет которых, он бы смог распознавать звуки и изображения.

· 1958 г. - психолог Фрэнк Розенблатт из Корнеллского университета изобрел персептрона (от perception - восприятие) - устройства, которое моделирует схему восприятия информации человеческим мозгом и смоделировал его на ЭВМ IBM-704.

· 1960-е гг.- это время появления первых программных систем обработки изображений (удаления различных помех с фотоснимков), так же проводились прикладные исследования в области распознавания печатных символов.

· 1970-е гг. - Лавренсе Робертс, аспирант МТИ, за счет своей выдвинутой концепции машинного построения трехмерных образов объектов на основе анализа двумерных изображений благодаря этому стал проводиться более глубокий анализ данных. В следствии чего начали развиваться различные подходы к распознаванию объектов на изображении.

· 1979 г. - профессор Ганс-Хельмут Нагель из Гамбургского университета стал основоположником теории анализа динамических сцен, которые позволяли распознавать движущиеся объекты в видеопотоке.5. 1979 г. - профессор Ганс-Хельмут Нагель из Гамбургского университета стал основоположником теории анализа динамических сцен, которые позволяли распознавать движущиеся объекты в видеопотоке.

· Конец 1980-х, уже были созданы роботы, которые слабо, но в какой-то степени могли ориентироваться в окружающей среде и самостоятельно выполнять действия.

· Начало 1990-х, Была предложена модульная парадигма Д. Марром, которая основывалась на длительном изучения механизмов зрительного восприятия человека, от так же утверждает, что обработка изображений должна опираться на последовательность уровней восходящей информационной линии: от «иконического» представления объектов в виде растрового изображения - к их символическому представлению в виде реляционных структур, векторных данных и т.п.

· 2003 г. появление надежных систем распознавания лиц.

1.3 Общая структура распознавания лица

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

Рисунок 3.1. - Общая структура распознавания лиц.

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

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

1.4 Метод Виолы-Джонса

Данный метод появился в 2001 г. и является разработкой двух людей Полом Виолой и Майклом Джонсом. Он до сих пор остается эффективным для поиска объектов в реальном времени, как на изображениях, так и на видеопоследовательностях. Стоит отметить тот факт, что этот определитель обладает крайне низкой вероятностью ложного обнаружения лица. Также этот метод способен обнаруживать черты лица под небольшим углом, примерно до 30 градусов. Если угол превышает 30 градусов, в этом случаи возможность обнаружение лица резко падает. Из-за этого недостатка, данный алгоритм неэффективен в современных производственных системах с учетом их растущих потребностей.Данный метод основывается на:

· Интегральном представлении, за счет чего происходит быстрое объектов.

· Признаках Хаара, с помощью которого производится поиск конкретного объекта.

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

· Классификаторе, на вход которого поступают все признаки, после чего даёт результат «верно» либо «ложь».

· Каскадных признаках. Основывается на быстром отбрасывании окон, в местах где не удалось обнаружить лицо.

1.5 Задачи компьютерного зрения

Стандартная задача КЗ это распознавание, где один или несколько предварительно заданных или изученных объектов, классов, которые могут быть распознаны в двумерном положении если речь идет об изображении так и в трехмерном положении на сцене.

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

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

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

· Оценка положения: это ориентация конкретного объекта относительно камеры.

· Оптическое распознавание знаков: это осуществление распознавание символов на различных изображениях, обычно это используется для перевода в текстовый формат.

1.6 Компьютерное зрение - это сложно

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

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

Рисунок 3.2. - Демонстрация освещения.

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

Живые объекты, существенно претерпевают деформацию и перекрывают друг друга. За счет перекрытия, определить объект становится гораздо сложнее.

1.1 Разница между человеческим и компьютерным зрением

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

Что же касается компьютера, то здесь все гораздо сложнее.В первую очередь это из-за проблемы накопления опыта. Ведь нужно собрать огромное количество примеров, правда к большому сожалению это пока не очень получается.

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

Давайте представим такую задачу, что нам нужно научиться с одного взгляда определять пол одетого человека по фотографии. Для начала нужно определить факторы, которые могут указывать на принадлежность к тому или иному объекту. Помимо этого, нужно собрать еще обучающее множество. Желательно конечно, чтобы оно было репрезентативным. К примеру, возьмем в качестве обучающей выборки всех присутствующих в аудитории. И попробуем на их основе найти отличительные факторы: например, длина волос, наличие бороды, макияжа и одежда (юбка или брюки). Зная, у какого процента представителей одного пола встречались те или иные факторы, мы сможем создать достаточно четкие правила: наличие тех или иных комбинаций факторов с некоей вероятностью позволит нам сказать, человек какого пола на фотографии.Естественно это является условным примером и то что было рассмотрено это лишь поверхностно. В реальных же задачах, которые ставятся перед системами КЗ, факторов гораздо больше. Определять их вручную и просчитывать зависимости - непосильная для человека задача. Поэтому в таких случаях без машинного обучения не обойтись никак.

2. Программные средства разработки

2.1 Программа Microsoft Visual Studio 2012

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

Microsoft Visual Studio объединяет в себе огромное количество функций, позволяющих осуществлять разработки для Windows всех версий, в том числе и 8, Интернета, SharePoint, различных мобильных устройств и облачных технологий. В Visual Studio реализуется новая среда разработчика, благодаря которой создавать приложения стало проще. Microsoft Visual Studio - это обновленная и упрощенная программная среда, для которой характерна высокая производительность, причем она не зависит от особенностей оборудования.

Каждая новая версия программы состоит из новейших инструментов и технологий, позволяющих разрабатывать приложения с учетом особенностей и положительных моментов современных платформ. Например, Visual Studio 2012 может поддерживать более ранние версии, в том числе Windows XP и Windows Server 2003. При этом разработчикам открыта дорога к созданию новых и модернизации уже существующих приложений, предназначенных для ранних версий ОС Windows. Стоит отметить, что в процессе использования поддерживаемых системой вариантов исходные файлы, проекты и решения в программе Visual Studio будут работоспособными, но исходный код может нуждаться в изменениях. Visual Studio Ultimate 2012 представляет собой передовую программу, которая дает возможность любым по размеру командам осуществлять проектирование и создание привлекательных приложений. Благодаря инструментам гибкого планирования можно внедрять методы последовательной разработки и применяться гибкие методологии в темпе, удобном для пользователя. С помощью расширенных средств моделирования, обнаружения и проектирования можно максимально полно описать систему, которая позволит наиболее удачно реализовать конкретную концепцию архитектуры.

2.2 БиблиотекаOpen Source Computer Vision Library

Open CV (англ. Open Source Computer Vision Library, библиотека компьютерного зрения с открытым исходным кодом) -- библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом. Реализована на C/C++, также разрабатывается для Python, Java, Ruby, Matlab, Lua и других языков. Может свободно использоваться в академических и коммерческих целях -- распространяется в условиях лицензии BSD.

2.3 Программа Arduino IDE

Среда разработки Arduino состоит из встроенного текстового редактора программного кода, области сообщений, окна вывода текста(консоли), панели инструментов с кнопками часто используемых команд и нескольких меню. Для загрузки программ и связи среда разработки подключается к аппаратной части

2.4 Язык программирования С++

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

2.5 Язык программирования С - 51

C - это язык программирования общего назначения, предназначенный для написания программ, эффективных по исполняемому коду, с элементами структурного программирования и богатым набором операторов. Язык программирования C эффективно используется для решения широкого круга задач. Однако при написании программ для микроконтроллеров, принадлежащих к семейству MCS-51, необходимо учитывать особенности построения аппаратуры этих микросхем, поэтому был создан диалект этого языка.

В состав языка программирования С-51 введён ряд изменений, отображающих особенности построения памяти микроконтроллеров семейства MCS-51. Кроме того, эти изменения позволяют непосредственно обращаться к встроенным портам, таймерам и другим устройствам микроконтроллеров указанного семейства. Особенности микроконтроллеров этого семейства в основном отображаются через описания переменных.

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

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

3. аппаратные и инструментальные средства

3.1 Микроконтроллер ATmega328P

ATmega328P - это 8-ми битный микроконтроллер,построенный на расширенной архитектуре AVR RISC. Используя команды, исполняемые за один такт, контроллер достигает производительности в 1 MIPS на рабочей частоте 1 МГц, позволяет оптимизировать потребление энергии за счет выбора оптимальной производительности.

Характеристики:

· Высокопроизводительный, 8-ми битный процессор

· Развитая RISC архитектура

· 131 исполняемых команд, большинство которых выполняются за один такт

· 32 рабочих регистра общего назначения

· статический режим работы - полностью

· производительность составляет при 20 МГц до 20 MIPS

· установлен 2-х тактовый умножитель

· Помять является энергозависимой, как для программ так и для данных

· имеется внутрисистемно самопрограммируемая 32К байтная FLASH памяти с количеством циклов перепрограммирования до10 000.

· EEPROM составляет 1024 байт с допустимым количеством циклов стирания записи до 100 000.

· SRAM составляет 2К байт

· программируемый ключ защиты программ

· JTAG

· Сканирование памяти стандартом JTAG

· Встроенная поддержка отладчика

· Программирование FLASH, EEPROM производится черезJTAG интерфейс

· Периферийные функции

· два 8-битных и один 16-битный таймера/счётчика с программируемым предделителем, режимом сравнения и захвата

· счётчик реального времени с программируемым генератором

· 8-и канальный, 10-и битный АЦП

· Специальные функции

· Master/Slave SPI последовательный интерфейс

· четыре ШИМ генератора

· байт- ориентированный, двухпроводный интерфейс

· программируемый USART

· Программируемыи Watchdog таймер с программируемым генератором

· Встроенный аналоговый компаратор

· Reset по включению питания и выключение при снижении напряжения питания

· Внутренний калиброванный RC генератор

· Внешние и внутренние источники прерывания

· 6 экономичных режимов: Idle, подавления шумов АЦП, экономичный, режим Выкл., режимы ожидания и расширенного ожидания.

· 23 программируемых вывода вход-выход и 1 вход

· 28 выводной корпус PDIP, 32 выводной корпус TQFP, и 32 контактный QFN/MLF

· Напряжение питания:

· 1.8 В до 5.5 В

· Тактовая частота:

· 0-20 МГц

Ядро AVRсочетает в себе расширенный набор команд с 32 рабочими регистрами которые соединены с АЛУ, тем самым обеспечивая доступ к 2 независимым регистрам на время исполнения команды за 1 такт. За счет такой архитектуры была достигнута высокая производительность, которая превосходит в 10 раз равноценныймикроконтроллер CISC.

ATmega328Pимеет 32Кбайт программируемую FLASH память, которая дает возможность чтение во время записи, а также позволяет перепрограммировать область программной памяти внутрисистемно через последовательный SPI интерфейс стандартным программатором используя загрузочную программу из энергонезависимой памяти работающую в AVR ядре.1024 байт именно столько содержится в EEPROM, 2К байт в SRAM, 32 рабочих регистра, JTAG интерфейс сканирования внутренних регистров, встроенную систему отладки и программирования, три гибких таймера - счётчика с модулем сравнения, внутренние и внешние прерывания, последовательный программируемый интерфейс USART, байт-ориентированный двухпроводный последовательный интерфейс, 8 - и канальный, 10 - и битный АЦП с дифференциальным программируемым усилителем который рассчитан исключительно для TQFP, порт SPI с шестью режимами энергосбережения. В режиме Idle ЦПУ не функционирует в то время как функционируют USART, двухпроводный интерфейс, АЦП, SRAM, таймеры - счётчики, SPI порт и система прерываний. В Atmega328P существует специальный режим подавления шума АЦП, при этом в целом в спящем режиме функционирует только АЦП и асинхронный таймер для уменьшения цифровых шумов преобразования. В выключенном режиме, процессор сохраняет содержимое всех регистров, на времяприостанавливает генератор тактовых сигналов и все другие функции кристалла до прихода внешнего прерывания или поступления внешней команды Reset. В режиме ожидания работает один тактовый генератор, при остановке остальных функций контроллера. Благодаря быстрому переходу в нормальный режим работы в том числе и по внешнему прерыванию ATmega328P успешно приспосабливается к внешним условиям работы и требует меньше энергии, чаще оказываясь в режиме Выкл. В расширенном режиме ожидания в рабочем состоянии находятся основной генератор и асинхронный генератор.

При создании микросхемы используетсятехнологияAtmel, ее суть заключается в энергонезависимой памяти высокой плотности. Комбинация расширенной 8 - и битной RISC архитектуры ЦПУ и твердотельной FLASH памяти обеспечивают Atmega328P высокую гибкость и экономическую эффективность во встраиваемых системах управления.

Рисунок 5.1. - Микроконтроллер ATmega328P, расположение выводов

3.2 Аналог ArduinoUNOR3 на микроконтроллере ATmega328P

Аналог Arduino Uno контроллер построен на базе микроконтроллера ATmega328P.Arduino этокроссплатформенная система, которая позволяется создавать интересные проекты, не имея особых знаний в области программирования и электротехники, достаточно иметь представление и интерес в данном направлении. На своем борту AUNONO несет 14 цифровых вход/выходов (6 из которых могут использоваться как выходы ШИМ), 6 аналоговых входов, кварцевый генератор 16 МГц, разъем USB, силовой разъем, разъем ICSP и кнопку перезагрузки. Так же в продаже имеется большое количество различных датчиков и дополнительных устройств.В качестве питания можно использовать USB, блок питание (например, от телефона) или запитать от батареи.

Рисунок 5.2.- Аналог ArduinoUNOR3

Характеристики:

· Микроконтроллер: ATmega328

· Рабочее напряжение: 5 В

· Входное напряжение (рекомендуемое): 7-12 В

· Входное напряжение (предельное): 6-20 В

· Цифровые Входы/Выходы: 14 (6 из которых могут использоваться как выходы ШИМ)

· Аналоговые входы: 6

· Постоянный ток через вход/выход: 40 мА

· Постоянный ток для вывода: 50 мА

Подробные характеристики микроконтроллера ATmega 328P указаны в пункте 5.1

Таблица5.1. Обозначения выводовArduinoUNO.

Название

Функция

1

VIN

Вход используется для подачи питания от внешнего источника (в отсутствие 5 В от разъема USB или другого регулируемого источника питания). Подача напряжения питания происходит через данный вывод.

2

5V

Регулируемый источник напряжения, используемый для питания микроконтроллера и компонентов на плате. Питание может подаваться от вывода VIN через регулятор напряжения, или от разъема USB, или другого регулируемого источника напряжения 5 В.

3

3V3

Напряжение на выводе 3.3 В генерируемое встроенным регулятором на плате. Максимальное потребление тока 50 мА.

4

GND

Выводы заземления.

5

ШИМ 3, 5, 6, 9, 10 и 11

Любой из выводов обеспечивает ШИМ с разрешением 8 бит

6

SPI: 10 (SS)

Cвязь SPI

7

SPI: 11 (MOSI)

Cвязь SPI

8

SPI: 12 (MISO)

Cвязь SPI

9

SPI: 13 (SCK)

Cвязь SPI

10

LED: 13

Встроенный светодиод, подключенный к цифровому выводу 13. Если значение на выводе имеет высокий потенциал, то светодиод горит

11

A0

Аналоговый вход с разрешением 10 бит

12

A1

Аналоговый вход с разрешением 10 бит

13

A2

Аналоговый вход с разрешением 10 бит

14

A3

Аналоговый вход с разрешением 10 бит

15

A4

Аналоговый вход с разрешением 10 бит

16

A5

Аналоговый вход с разрешением 10 бит

17

I2C: 4 (SDA) и 5 (SCL)

Cвязь I2C (TWI)

18

AREF

Опорное напряжение для аналоговых входов.

19

Reset

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

3.3 Веб-камера Logitech HD Webcam C525

Портативная среднебюджетная веб-камера Logitech HD Webcam C525 предназначена не только для видеовызовов, но для записи видео в формате высокой четкости с автоматической фокусировкой.

Рисунок 5.3.- Веб-камера Logitech HD Webcam C525

Характеристики:

· Матрица (Мп) : 1.3

· Разрешение (видео) : 1280x720

· Микрофон : встроенный

· Технология Logitech Fluid Crystal

3.4 Сервопривод Tower Pro MS 9g SG90

Простой, надежный, аналоговый сервопривод с нейлоновым редуктором.

Рисунок 5.4. - Сервопривод SG90

Таблица 5.2. Обозначения выводовсервопривода SG90.

1

Коричневый провод

Земля ( Ground, подключается к пину GND на плате Arduino )

2

Красный провод

Питание +5 V ( подключается к пину 5V на плате Arduino )

3

Желтый провод

Сигнал управления ( подключается к цифровому пину Arduino )

Характеристики:

· Рабочая скорость: 0.12sec / 60 градусов

· Блокирующий момент: 1.2кг/см (4.8В); 1.6кг/см (6.0В)

· Рабочее напряжение: 3-7.2В

· Температурный диапазон: 30-60

· Размер: 22мм х 11.5мм х 27мм

· Вес: 9г

· Длина провода: 20 см

3.5 Ноутбук Dellinspiron 7720

· Отличная вычислительная мощность. В основе производительности модели заложен четырех ядерный процессор Intel Core i7 3630QM с тактовой частотой 2,4 ГГц, а также оперативная память DDR3 объемом 8 Гб и дискретный видеокартой NVIDIA GeForce 650M, идеальный подходит для просмотра широкоформатных фильмов, игр и различных мультимедийных приложений. Для хранения информации имеется большой резерв памяти емкость которого составляет один терабайт.

· Хороший экран. Его размер составляет 17,3-дюймовый с разрешением 1920х1080, со встроенной светодиодной подсветкой, тем самым обеспечивая достойное качество при просмотре высококачественного видеоконтента.

· Для удобства пользователя. В этой машине все продумано до мелочей. Четыре встроенных в ноутбук Dell Inspiron 7720 разъема USB 3.0 обеспечат быстрый обмен данными с совместимыми носителями, интерфейс HDMI позволит подключиться к HD-монитору или плазменной панели для просмотра фильмов формата Full HD, модуль Bluetooth даст возможность подсоединить беспроводные наушники, а сетевой модуль Wi-Fi создаст комфорт пользования беспроводным Интернетом в любом месте, где имеется доступ к сигналу Wi-Fi.

Рисунок 5.4. - Ноутбук Dell Inspiron 7720

4. разработка

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

Рисунок 6.1 - Схема устройства.

В данном проекте последовательность действий такова:

В начале происходит определение ВК. Также можно выбирать ВК изменяя параметр «cap (1)». В моем случаи это означает, что я выбрал подключенную ВК. Если же поставить 0 (по умолчанию), тогда компьютер выберет первую попавшую камеру (если имеется встроенная камера, выберется она).

Рисунок 6.2 - Само устройство.

VideoCapture cap(1);

if (!cap.isOpened())

{

cout<< "exit" <<endl;

return -1;

}

После этого идет подключение Arduinoпо последовательному порту, с установленной скоростью соединения.

arduino_com = new Tserial();

if (arduino_com!=0) {

arduino_com->connect("COM3", 57600); }

Затем начинает непрерывно поступать видеопоток на ПК, и отображаться в созданном окне.

namedWindow(window, 1);

cv::imshow(window, frame);

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

cvtColor(frame, frame_gray, CV_BGR2GRAY);

так как не все алгоритмы способны работать с цветным изображением.

Далее задействуется алгоритм определения лица.

face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );

Когда лицо определяется оно обрисовывается квадратом, это наглядно видно рисунке 6.3,

Рисунок 6.3 - Лицоопределилось.

После того как лицо определилось, устанавливается центр его положения.

Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );

Затем при отклонении от центра, как показано на рисунке 6.4,высчитывается по координатам в какою именно сторону оно отклонилось и через последовательный порт посылается сигнал на Arduino.

LSB = faces[i].x & 0xff;

MSB = (faces[i].x >> 8) & 0xff;

arduino_com->sendChar( MSB );

arduino_com->sendChar( LSB );

LSB = faces[i].y & 0xff;

MSB = (faces[i].y >> 8) & 0xff;

arduino_com->sendChar( MSB );

arduino_com->sendChar( LSB );

posx = servox.read();

posy = servoy.read();

Рисунок 6.4 - Лицо сместилось в сторону.

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

MSB = Serial.read();

delay(5);

LSB = Serial.read();

MSBLSB=word(MSB, LSB);

valx = MSBLSB;

delay(5);

MSB = Serial.read();

delay(5);

LSB = Serial.read();

MSBLSB=word(MSB, LSB);

valy = MSBLSB;

delay(5);

posx = servox.read();

posy = servoy.read();

servox.write(posx);

servoy.write(posy);

Рисунок 6.5 - AUNO подстроило камеру по центру.

В результате, как видно на рисунке 6.5 AUNOудачно подстроил веб-камеру по центру лица.

За отображение информации в верхнем правом угу, отвечает данный участок кода:

cv::putText(frame, "Frames: " + frameset, cvPoint(30, 30), FONT_HERSHEY_COMPLEX_SMALL, 0.8, cvScalar(0, 255, 0), 1, CV_AA);

cv::putText(frame, "Faces Detected: " + faceset, cvPoint(30, 60), FONT_HERSHEY_COMPLEX_SMALL, 0.8, cvScalar(0, 255, 0), 1, CV_AA);

cv::putText(frame, "Resolution " + wi + " x " + he, cvPoint(30, 90), FONT_HERSHEY_COMPLEX_SMALL, 0.8, cvScalar(0, 255, 0), 1, CV_AA);

Заключение

В процессе разработки дипломного проекта была изучена предметная область, библиотека OpenCV.Узнал историю развития данной технологии, ознакомился с методомВиолы-Джонса, который в моем проекте отвечает за определение лица человека. Непосредственно был приобретен опыт работы с данной библиотекой и мощным инструментом разработки MicrosoftVisualStudio. Получил навык работы с ArduinoUNOи его средой разработки,была разработана схема, выбраны компоненты и изучена архитектура микроконтроллера Atmega328P.Самое главное был получен опыт в реализации компьютерного зрения.

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

Библиография

1 Компьютерное зрение. Современный подход Дэвид А. Форсайт, Жана

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

3 Обнаружение и локализация лица на изображении. Владимир Вежневец Анна ДегтяреваПрименение Микроконтроллеров AVR: схемы алгоритмы программы. Баранов В.Н.

4 Learning OpenCV Gary Bradski, Adrian KaehlerМикроконтроллеры AVR в радиолюбительской практике. Белов А.В.

5 Переход к Microsoft Visual Studio 2010 Патрис Пелланд, Паскаль Паре, Кен ХайнсСоздаем устройства на микроконтроллерах. Белов А.В.

6 Визильтер Ю.В. Желтов С.Ю. Князь В.А. и др. Обработка и анализ цифровых изображений с примерами на LabVIEW и IMAQ Visionэлектрические измерения и приборы. 3.1. Роль измерений в электротехнике. URL: http://www.kipia.info/bibliotek/elektrotehnika-i-elektronika-(-uchebnoe-posobie-dlya-vuzov)/glava-3-elektricheskie-izmereniya-i-priboryi/(08.06.2016).

7 Компьютерное зрениеURL: https://ru.wikipedia.org/wiki/Компьютерное_зрение (09.06.2016).

8 Выделение и распознование лицURL: http://wiki.technicalvision.ru/index.php/Выделение_и_распознавание_лиц (09.06.2016).

9 Введение в компьютерное зрениеURL: http://www.slideshare.net/ktoshik/cv2015-01-introimage.(09.06.2016).

10 The OpenCV Tutorials URL: http://docs.opencv.org/2.4/opencv_tutorials.pdf (09.06.2016).

ПриложенИЯ

Листинг

#include "opencv2/objdetect/objdetect.hpp"

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include <iostream>

#include "Tserial.h"

using namespace std;

using namespace cv;

void detectAndDisplay( Mat frame );

String face_cascade_name = "haarcascade_frontalface_alt.xml";

String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";

CascadeClassifier face_cascade;

CascadeClassifier eyes_cascade;

string window_name = "Capture - Face detection - Remixed by TechBitar";

int arduino_command;

Tserial *arduino_com;

short MSBLSB = 0;

unsigned char MSB = 0;

unsigned char LSB = 0;

int main( int argc, const char** argv )

{

CvCapture* capture;

Mat frame;

arduino_com = new Tserial();

if (arduino_com!=0) {

arduino_com->connect("COM7", 57600, spNONE); }

if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };

if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };

capture = cvCaptureFromCAM( 3 );

if( capture )

{

while( true )

{

frame = cvQueryFrame( capture );

if( !frame.empty() )

{ detectAndDisplay( frame ); }

else

{ printf(" --(!) No captured frame -- Break!"); break; }

int c = waitKey(10);

if( (char)c == 'c' ) { break; }

}

}

arduino_com->disconnect();

delete arduino_com;

arduino_com = 0;

return 0;

}

void detectAndDisplay( Mat frame )

{

std::vector<Rect> faces;

Mat frame_gray;

cvtColor( frame, frame_gray, CV_BGR2GRAY );

equalizeHist( frame_gray, frame_gray );

face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );

for( int i = 0; i < faces.size(); i++ )

{

Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );

ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 2, 8, 0 );

cout << "X:" << faces[i].x << " y:" << faces[i].y << endl;

LSB = faces[i].x & 0xff;

MSB = (faces[i].x >> 8) & 0xff;

arduino_com->sendChar( MSB );

arduino_com->sendChar( LSB );

LSB = faces[i].y & 0xff;

MSB = (faces[i].y >> 8) & 0xff;

arduino_com->sendChar( MSB );

arduino_com->sendChar( LSB );

Mat faceROI = frame_gray( faces[i] );

std::vector<Rect> eyes;

}

imshow( window_name, frame );

}

тсериал

#ifndef TSERIAL_H

#define TSERIAL_H

#include <stdio.h>

#include <windows.h>

enum serial_parity { spNONE, spODD, spEVEN };

class Tserial

{

protected:

char port[10];

int rate;

serial_parity parityMode;

HANDLE serial_handle;

public:

Tserial();

~Tserial();

int connect (char *port_arg, int rate_arg,

serial_parity parity_arg);

void sendChar (char c);

void sendArray (char *buffer, int len);

char getChar (void);

int getArray (char *buffer, int len);

int getNbrOfBytes (void);

void disconnect (void);

};

#endif TSERIAL_H

#define STRICT

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <process.h>

#include <conio.h>

#include <windows.h>

#include "Tserial.h"

Tserial::Tserial()

{

parityMode = spNONE;

port[0] = 0;

rate = 0;

serial_handle = INVALID_HANDLE_VALUE;

}

Tserial::~Tserial()

{

if (serial_handle!=INVALID_HANDLE_VALUE)

CloseHandle(serial_handle);

serial_handle = INVALID_HANDLE_VALUE;

}

void Tserial::disconnect(void)

{

if (serial_handle!=INVALID_HANDLE_VALUE)

CloseHandle(serial_handle);

serial_handle = INVALID_HANDLE_VALUE;

}

int Tserial::connect (char *port_arg, int rate_arg, serial_parity parity_arg)

{

int erreur;

DCB dcb;

COMMTIMEOUTS cto = { 0, 0, 0, 0, 0 };

if (serial_handle!=INVALID_HANDLE_VALUE)

CloseHandle(serial_handle);

serial_handle = INVALID_HANDLE_VALUE;

erreur = 0;

if (port_arg!=0)

{

strncpy(port, port_arg, 10);

rate = rate_arg;

parityMode= parity_arg;

memset(&dcb,0,sizeof(dcb));

dcb.DCBlength = sizeof(dcb);

dcb.BAUNOdRate = rate;

switch(parityMode)

{

case spNONE:

dcb.Parity = NOPARITY;

dcb.fParity = 0;

break;

case spEVEN:

dcb.Parity = EVENPARITY;

dcb.fParity = 1;

break;

case spODD:

dcb.Parity = ODDPARITY;

dcb.fParity = 1;

break;

}

dcb.StopBits = ONESTOPBIT;

dcb.ByteSize = 8;

dcb.fOutxCtsFlow = 0;

dcb.fOutxDsrFlow = 0;

dcb.fDtrControl = DTR_CONTROL_DISABLE;

dcb.fDsrSensitivity = 0;

dcb.fRtsControl = RTS_CONTROL_DISABLE;

dcb.fOutX = 0;

dcb.fInX = 0;

dcb.fErrorChar = 0;

dcb.fBinary = 1;

dcb.fNull = 0;

dcb.fAbortOnError = 0;

dcb.wReserved = 0;

dcb.XonLim = 2;

dcb.XoffLim = 4;

dcb.XonChar = 0x13;

dcb.XoffChar = 0x19;

dcb.EvtChar = 0;

serial_handle = CreateFile(port, GENERIC_READ | GENERIC_WRITE,

0, NULL, OPEN_EXISTING,NULL,NULL);

if (serial_handle != INVALID_HANDLE_VALUE)

{

if(!SetCommMask(serial_handle, 0))

erreur = 1;

if(!SetCommTimeouts(serial_handle,&cto))

erreur = 2;

if(!SetCommState(serial_handle,&dcb))

erreur = 4;

}

else

erreur = 8;

}

else

erreur = 16;

if (erreur!=0)

{

CloseHandle(serial_handle);

serial_handle = INVALID_HANDLE_VALUE;

}

return(erreur);

}

void Tserial::sendChar(char data)

{

sendArray(&data, 1);

}

void Tserial::sendArray(char *buffer, int len)

{

unsigned long result;

if (serial_handle!=INVALID_HANDLE_VALUE)

WriteFile(serial_handle, buffer, len, &result, NULL);

}

char Tserial::getChar(void)

{

char c;

getArray(&c, 1);

return(c);

}

int Tserial::getArray (char *buffer, int len)

{

unsigned long read_nbr;

read_nbr = 0;

if (serial_handle!=INVALID_HANDLE_VALUE)

{

ReadFile(serial_handle, buffer, len, &read_nbr, NULL);

}

return((int) read_nbr);

}

int Tserial::getNbrOfBytes (void)

{

struct _COMSTAT status;

int n;

unsigned long etat;

n = 0;

if (serial_handle!=INVALID_HANDLE_VALUE)

{

ClearCommError(serial_handle, &etat, &status);

n = status.cbInQue;

}

return(n);

}

#include <Servo.h>

#define servomaxx 180

#define servomaxy 180

#define screenmaxx 320

#define screenmaxy 240

#define servocenterx 90

#define servocentery 90

#define servopinx 9

#define servopiny 10

#define bAUNOdrate 57600

#define distancex 1

#define distancey 1

int valx = 0;

int valy = 0;

int posx = 0;

int posy = 0;

int incx = 10;

int incy = 10;

Servo servox;

Servo servoy;

short MSB = 0;

short LSB = 0;

int MSBLSB = 0;

void setup() {

Serial.begin(bAUNOdrate);

Serial.println("Starting Cam-servo Face tracker");

pinMode(servopinx,OUTPUT);

pinMode(servopiny,OUTPUT);

servoy.attach(servopiny);

servox.attach(servopinx);

servox.write(servocenterx);

delay(200);

servoy.write(servocentery);

delay(200);

}

void loop () {

while(Serial.available() <=0);

if (Serial.available() >= 4)

{

MSB = Serial.read();

delay(5);

LSB = Serial.read();

MSBLSB=word(MSB, LSB);

valx = MSBLSB;

delay(5);

MSB = Serial.read();

delay(5);

LSB = Serial.read();

MSBLSB=word(MSB, LSB);

valy = MSBLSB;

delay(5);

posx = servox.read();

posy = servoy.read();

if(valx < (screenmaxx/2 - incx)){

if( posx >= incx ) posx += distancex;

}

else if(valx > screenmaxx/2 + incx){

if(posx <= servomaxx-incx) posx -=distancex;

}

if(valy < (screenmaxy/2 - incy)){

if(posy >= 5)posy += distancey;

}

else if(valy > (screenmaxy/2 + incy)){

if(posy <= 175)posy -= distancey;

}

servox.write(posx);

servoy.write(posy);

}

}

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


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

  • Аппаратные средства с возможностью расширения и открытыми принципиальными схемами. Процесс работы с микроконтроллерами. Теоретические сведения о платформе Arduino. Установка драйверов для Arduino Duemilanove, Nano или Diecimila в Windows 7, Vista или XP.

    курсовая работа [3,3 M], добавлен 26.09.2014

  • Принципы работы цифрового компаса HMC5883L, платы Arduino UNO. Особенности шины I2C, ее недостатки и преимущества. Программа Fritzing, ее значение для построения схемы подключения цифрового компаса к Arduino UNO. Согласование уровней выхода со входом.

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

  • Упрощенная модель системы регулировки. Стандартный конструктив Ардуино с платами расширения. Внешний вид Ардуино Uno. Среда разработки Arduino. Встроенный текстовый редактор программного кода. Программа управления шаговым двигателем в однофазном режиме.

    курсовая работа [4,5 M], добавлен 02.06.2015

  • Разработка клиент-серверного приложения для передачи данных с использованием среды программирования Microsoft Visual Studio 2005. Архитектура клиент/сервер. Сокеты и библиотека WinSock. Разработка системы передачи данных в локальной вычислительной сети.

    курсовая работа [479,1 K], добавлен 23.06.2012

  • Разработка информационно-вычислительной сети для магазина бытовой техники. Создание системы программ "клиент-сервер", осуществляющих взаимодействие посредством сети с использованием среды визуального программирования Microsoft Visual Studio C++ 2010.

    курсовая работа [896,8 K], добавлен 23.06.2012

  • Функции системного программного обеспечения. Системы программирования – программные средства, обеспечивающие автоматизацию разработки и отладки программ. Состав и назначение операционной системы (ОС). Сервисные программы, расширение возможностей ОС.

    реферат [17,2 K], добавлен 25.04.2009

  • Классификация и характеристика систем автоматического определения местоположения. Методы местоопределения по радиочастоте и навигационного счисления. Системы поиска и слежения: GPS-приемники, радиоконтроль и пеленгование. Варианты защиты от слежения.

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

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

    контрольная работа [455,8 K], добавлен 23.11.2013

  • Разработка функциональной системы слежения, выбор элементов схемы, расчет передаточных функций. Построение ЛФЧХ и последовательного корректирующего звена. Исследование системы слежения на устойчивость, определение показателей качества полученной системы.

    курсовая работа [241,5 K], добавлен 23.08.2010

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

    курсовая работа [770,4 K], добавлен 14.10.2010

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