Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
дипломчик.docx
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆
      1. Получение изображения с камеры

Для получения изображения с камеры использовалось программное обеспечение ManyCam, которое транслировало изображение с сервера управления камерой на персональный компьютер и представляло полученный видеопоток в виде передачи с виртуальной веб-камеры. Изображение транслировалось со скоростью 30 fps.

Таким образом, общая структура аппаратной реализации комплекса, представлена на рис.8 и 9. Отличие между двумя схемами в том, что в первой будет задержка получения изображения порядка 1 секунды. Во второй схеме задержка будет значительно меньше, что означает, что работу в режиме реального времени вполне можно реализовать. При разработке и тестировке использовалась первая схема из рисунка 8. Изображение с камеры поступает на персональный компьютер и через ManyCam разрабатываемая программа будет захватывать изображение, обрабатывать его, детектировать лицо человека и следить за ним, путем передачи команд камере через интерфейс RS422.

Рис. 8 Схема подключения на тестируемом оборудовании

Рис. 9 Схема подключения на реальном оборудовании

      1. Работа с портом

Открытие и инициализация порта

Сначала откроем выбранный com порт на чтение-запись:

serial->open(QSerialPort::ReadWrite);

Зададим необходимые параметры для передачи по протоколу VISCA:

serial->setBaudRate(QSerialPort::Baud9600);

serial->setDataBits(QSerialPort::Data8);

serial->setParity(QSerialPort::NoParity);

serial->setStopBits(QSerialPort::OneStop);

serial->setFlowControl(QSerialPort::NoFlowControl);

Передача/чтение данных

Передачу данных в com-порт будем осуществлять с помощью функции:

serial->write(command), где command – это массив байтов, содержащий требуемую команду.

После передачи команды в порт поставим ограничение на запись на 200 мсек. Именно столько времени необходимо для передачи команды видеокамере. Считывание данных с com-порта будем проводить с помощью метода:

connect(serial, &QSerialPort::readyRead, this, &MainWindow::readData).

По сигналу readyRead(), который означает, что данные готовы к чтению, мы переходим к слоту readData(), где и осуществляется чтение с порта:

command_read.append(serial->readAll());

QByteArray y = command_read.toHex();

Закрытие порта: serial->close();

3 Анализ видеоизображения. Детектор лица

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

Пусть – изображение с камеры в момент времени t, которое представляет собой совокупность изображений отдельных объектов (лиц) и фона:

,

где – лицо человека, F(x,y) – изображение фона; (x,y) ∈ G – область определения изображения.

определён только на дискретном множестве точек D с координатами ∈ G. При этом,

,

где – дискретная область лица; D = ∪ ∪ … ∪ ∪ ; D – дискретная прямоугольная решётка, в узлах которой определён снимок . Узлы решётки определяются координатами или их номерами (i,j), в которых задаётся цвет снимка в данной точке, что в совокупности определяет пиксель снимка. Таким образом, исходное изображение можно рассматривать как прямоугольную целочисленную решётку P, узлы которой являются пикселями:

P ={p(i, j) | i = 1,N, j = 1,M},

где i, j – целочисленные координаты (номера) пикселя; p(i, j)∈{0, 1} – цветовой компонент пикселя.

Задача: найти множество точек (i,j)∈ , для которых .