Русский
Русский
English
Статистика
Реклама

Как видит компьютер



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

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

  1. Компьютер;
  2. Web-камера;
  3. Python 3;
  4. Ваш любимый редактор кода (PyCharm, Jupyter и т.д.).

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

Для начала, качаем необходимые библиотеки Python с помощью команды в Командной строке:

pip install opencv-python; numpy




Коротко о том, зачем они нам нужны:

OpenCV. Эта библиотека основа почти каждого современного проекта по компьютерному зрению. В ней хранятся сотни алгоритмов компьютерного зрения и обработки изображений. Изначально написана на C/C++, но в дальнейшем была переписана и на Python ввиду большой востребованности ее на данном языке.

Numpy. Будет помогать с внутренними вычислениями библиотеки OpenCV.

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

Присоединяем библиотеку компьютерного зрения OpenCV

import cv2 as cv

2. Захват видеопотока с Web-камеры производим с помощью метода VideoCapture(index), где index порядковый номер нашей Web-камеры в системе. Если камера одна, то параметр будет равен 0.

capture = cv.VideoCapture(0)


3. Для получения видео воспользуемся методом read(), который возвращает нам флаг rtrn -показывает успешность захвата кадра из видеопотока и image кадр нашего видеопотока (numpy-массив). Считывать данные из видеопотока будем непрерывно, пока не будет нажата клавиша Escape.

while True:    rtrn, image = capture.read()    cv.imshow("Capture from Web-camera", image) # Вывод кадра в окно с названием    if cv.waitKey(1) == 27:  # Выход из программы по нажатию Esc        breakcapture.release()cv.destroyAllWindows()


Сохраняем наш файл, запускаем из командной строки с помощью python имя_нашего_файла.py. Теперь наша программа умеет принимать видеопоток с Web-камеры! А это значит, что мы уже на полпути к тому, чтобы компьютер мог распознавать лица.

4. Давайте сделаем так, чтобы наш компьютер также мог записывать видео в файл:

Указываем кодек для сохранения видео, указываем имя для сохраняемого файла, fps и размеры. Для нашей задачи мы берем кодек XVID.

import cv2 as cvcapture = cv.VideoCapture(0)codec = cv.VideoWriter_fourcc(*'XVID')


5. Выводим последовательно кадры в окно video, а после сохраняем результат в переменную output. Затем данные из output, после завершения видеопотока, передадим в файл saved_from_camera.avi:

output = cv.VideoWriter('saved_from_camera.avi ', codec, 25.0, (640, 480))while capture.isOpened():    rtrn, image = capture.read()    if cv.waitKey(1) == 27 or rtrn == False:        break    cv.imshow('video for save', image)    output.write(image)output.release()capture.release()cv.destroyAllWindows()


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

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

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

Разработчики OpenCV уже провели работы по определению Признаков Хаара и предоставили всем желающим результаты для возможностей обработки видеопотока.

Приступим к написанию детектора лиц с нашей Web-камеры:

6. Первым делом, получим наши Признаки Хаара и определим параметры для захвата видеопотока. Файл с Признаками лежит по пути, где устанавливаются библиотеки Python. По умолчанию, они находятся в папке,

C:/Python3X/Lib/sitepackages/cv2/data/haarcascade_frontalface_default.xml


где X Ваша подверсия Python 3.

import cv2 as cvcascade_of_face = cv.CascadeClassifier('C:/Python3.X/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml ')capture = cv.VideoCapture(0)capture.set(cv.CAP_PROP_FPS, 25) # Частоту зададим 25 кадров в секунду


7. Далее, в цикле будем поочередно считывать кадры с Web-камеры и передавать его нашему детектору лиц:

while True:    rtrn, image = capture.read()    gr = cv.cvtColor(image, cv.COLOR_BGR2GRAY)    faces_detect = cascade_of_face.detectMultiScale(        image=gr,        minSize=(15, 15),        minNeighbors=10,        scaleFactor=1.2    )    for (x_face, y_face, w_face, h_face) in faces_detect:        cv.rectangle(image, (x_face, y_face), (x_face + w_face, y_face + h_face), (0, 0, 255), 2)    cv.imshow("Image", image)    if cv.waitKey(1) == 27:  # Esc key        breakcapture.release()cv.destroyAllWindows()


8. Теперь объединим всё в одно целое и получим программу, которая захватывает видео с Web-камеры, распознает на нем лица и сохраняет результат в файл:

import cv2 as cvfaceCascade = cv.CascadeClassifier('C:/Users/Zet/Desktop/Python/test_opencv/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')capture = cv.VideoCapture(0)capture.set(cv.CAP_PROP_FPS, 25)codec = cv.VideoWriter_fourcc(*'XVID')output = cv.VideoWriter('saved_from_camera.avi', codec, 25.0, (640, 480))while True:    rtrn, image = capture.read()    gr = cv.cvtColor(image, cv.COLOR_BGR2GRAY)    faces_detect = faceCascade.detectMultiScale(        image=gr,        minSize=(15, 15),        minNeighbors=10,        scaleFactor=1.2    )    for (x_face, y_face, w_face, h_face) in faces_detect:        cv.rectangle(image, (x_face, y_face), (x_face + w_face, y_face + h_face), (255, 0, 0), 2)    cv.imshow("Image", image)    output.write(image)    if cv.waitKey(1) == 27:  # Esc key        breakoutput.release()capture.release()cv.destroyAllWindows()


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

БОНУС

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

1. Зайдем в Планировщик заданий (можно найти через стандартный Поиск Windows);
2. Создадим Простую задачу, дадим ей название и краткое описание;



3. Нажимаем Далее и попадаем в пункт Триггер. Здесь выбираем событие, при котором будет происходить запуск нашего задания. Выбираем При входе в Windows;

4. Далее в действии указываем Запустить программу;

5. В Действии указываем путь до python.exe, а в Параметрах путь до нашей программы:



Готово! В результате, при входе в систему будет записываться лицо вошедшего под учетной записью, а видео будет сохранено. Таким образом, можно отслеживать, кто работал за компьютером в Ваше отсутствие, с сохранением записи доказательств.
Источник: habr.com
К списку статей
Опубликовано: 16.07.2020 12:18:27
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Искусственный интеллект

Машинное обучение

Computer vision

Обработка видео

Категории

Последние комментарии

© 2006-2020, personeltest.ru