Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Воган Ли - Python для хакеров (Библиотека программиста) - 2023.pdf
Скачиваний:
3
Добавлен:
07.04.2024
Размер:
14.76 Mб
Скачать

Дополнительная литература      287

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

К примеру, OpenCV содержит точный и надежный опознаватель лиц, основанный на фреймворке глубокого обучения Caffe. Если хотите узнать об этом детекторе подробнее, почитайте руководство «Face Detection with OpenCV and Deep Learning» на https://www.pyimagesearch.com/.

Еще один вариант — использовать предлагаемый OpenCV каскадный классификатор LBP (Local Binary Patterns), также предназначенный для обнаружения лиц. Эта техника делит изображение лица на блоки, а затем извлекает из них гистограммы локальных бинарных шаблонов (LBPH, Local Binary Pattern Histograms). Подобный способ подтвердил свою эффективность при обнаружении лиц в естественных условиях — то есть лиц, которые плохо выровнены и имеют схожие положения на изображениях. Я познакомлю вас с LBPH в следующей главе, где речь пойдет уже о распознавании лиц, а не о простом их обнаружении.

Итоги

В этой главе вы научились работать с предоставляемым OpenCV каскадным классификатором Хаара для обнаружения человеческих лиц, библиотекой playsound для проигрывания аудиофайлов и pyttsx3 для воспроизведения аудио по принципу синтеза речи по тексту. Благодаря всем этим полезным инструментам мы смогли быстро написать программу для обнаружения лиц, которая воспроизводила голосовые предупреждения и инструкции.

Дополнительная литература

«Rapid Object Detection Using a Boosted Cascade of Simple Features», или метод Виолы — Джонса (Conference on Computer Vision and Pattern Recognition, 2001), — это разработанный Полом Виолой (Paul Viola) и Майклом Джонсом (Michel Jones) фреймворк для обнаружения объектов, который первым предоставил приличную для практического применения скорость их обработки в реальном времени. Именно он положен в основу техники обнаружения лиц, использованной в текущей главе.

Сайт Адриана Роузброка (Adrian Rosebrock) https://www.pyimagesearch.com/ — прекрасный ресурс для создания механизмов поиска по фотографиям, где вы также найдете много интересных проектов из области компьютерного зрения, например программы, которые обнаруживают огонь и дым, находят цели

288      Глава 9. Как различить своих и чужих

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

Практический проект: размытие лиц

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

Рис. 9.17. Пример размытия лица с помощью OpenCV

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

Размытие — единственное в этом процессе, чем мы еще не занимались. Для его реализации используем метод blur(), передав ему изображение и кортеж размера ядра в пикселях.

blurred_image = cv.blur(image, (20, 20))

Усложняем проект: обнаружение кошачьих мордочек      289

В этом примере мы замещаем значение заданного пикселя в image на среднее значение всех пикселей в квадрате 20 × 20, где этот пиксель — центральный. Данная операция повторяется для каждого пикселя image.

Решение под названием practice_blur.py вы найдете в приложении, а также в каталоге Chapter_9, доступном для скачивания с сайта книги.

Усложняем проект: обнаружение кошачьих мордочек

Как оказалось, на планете LV-666 обитают три формы жизни: люди, мутанты и кошки. Счастливый талисман команды — мисс Китти — свободно гуляет по базе и вполне может оказаться в коридоре 5.

Отредактируйте и откалибруйте sentry.py так, чтобы мисс Китти могла спокойно пройти. Это непросто, поскольку кошки не привыкли следовать приказам. Чтобы заставить ее хотя бы взглянуть в камеру, вам может потребоваться добавить в pyttsx3 команды «Here Kitty, Kitty» («Китти, Китти, сюда») или «Puss, puss, puss» («ксс, ксс, ксс»). А еще лучше применить звук открывания банки тунца, используя playsound.

Классификаторы Хаара для кошачьих мордочек можете найти в том же каталоге OpenCV, что и классификаторы, которые мы использовали в проекте 13, а изображение пустого коридора empty_corridor.png — в доступном для скачивания каталоге Chapter_9. Выберите несколько изображений кошек из интернета или своей личной коллекции и вставьте их в разные участки пустого коридора. Чтобы задать для изображения кошки правильный размер, используйте для масштабирования фигуры людей.