- •Об авторе
- •О научных редакторах
- •Благодарности
- •От издательства
- •Введение
- •Для кого эта книга?
- •Почему Python?
- •План книги
- •Версия Python, платформа и IDE
- •Установка Python
- •Запуск Python
- •Использование виртуальной среды
- •Вперед!
- •Глава 1. Спасение моряков с помощью теоремы Байеса
- •Теорема Байеса
- •Проект #1. Поиск и спасение
- •Стратегия
- •Установка библиотек Python
- •Код для теоремы Байеса
- •Время сыграть
- •Итоги
- •Дополнительная литература
- •Усложняем проект. Более грамотный поиск
- •Усложняем проект. Поиск лучшей стратегии с помощью MCS
- •Усложняем проект. Вычисление вероятности обнаружения
- •Глава 2. Установление авторства с помощью стилометрии
- •Проект #2: «Собака Баскервилей», «Война миров» и «Затерянный мир»
- •Стратегия
- •Установка NLTK
- •Корпусы текстов
- •Код стилометрии
- •Итоги
- •Дополнительная литература
- •Практический проект: охота на собаку Баскервилей с помощью распределения
- •Практический проект: тепловая карта пунктуации
- •Усложняем проект: фиксирование частотности
- •Глава 3. Суммаризация текста с помощью обработки естественного языка
- •Стратегия
- •Веб-скрапинг
- •Код для «У меня есть мечта»
- •Установка gensim
- •Код для суммаризации речи «Заправляйте свою кровать»
- •Проект #5. Суммаризация речи с помощью облака слов
- •Модули Word Cloud и PIL
- •Код для создания облака слов
- •Итоги
- •Дополнительная литература
- •Усложняем проект: ночные игры
- •Усложняем проект: суммаризация суммаризаций
- •Глава 4. Отправка суперсекретных сообщений с помощью книжного шифра
- •Одноразовый блокнот
- •Шифр «Ребекка»
- •Проект #6. Цифровой ключ к «Ребекке»
- •Стратегия
- •Код для шифрования
- •Отправка сообщений
- •Итоги
- •Дополнительная литература
- •Глава 5. Поиск Плутона
- •Проект #7. Воссоздание блинк-компаратора
- •Стратегия
- •Данные
- •Код блинк-компаратора
- •Использование блинк-компаратора
- •Проект #8. Обнаружение астрономических транзиентов путем дифференцирования изображений
- •Стратегия
- •Код для детектора транзиентов
- •Использование детектора транзиентов
- •Итоги
- •Дополнительная литература
- •Практический проект: представление орбитальной траектории
- •Практический проект: найди отличия
- •Усложняем проект: сосчитаем звезды
- •Глава 6. Победа в лунной гонке с помощью «Аполлона-8»
- •Цель миссии «Аполлон-8»
- •Траектория свободного возврата
- •Задача трех тел
- •Проект #9. На Луну с «Аполлоном-8»!
- •Использование модуля turtle
- •Стратегия
- •Код программы для расчета свободного возврата «Аполлона-8»
- •Выполнение симуляции
- •Итоги
- •Дополнительная литература
- •Практический проект: симуляция шаблона поисков
- •Практический проект: запусти меня!
- •Практический проект: останови меня!
- •Усложняем проект: симуляция в истинном масштабе
- •Усложняем проект: реальный «Аполлон-8»
- •Глава 7. Выбор мест высадки на Марсе
- •Посадка на Марс
- •Карта MOLA
- •Проект #10. Выбор посадочных мест на Марсе
- •Стратегия
- •Код для выбора мест посадки
- •Результаты
- •Итоги
- •Дополнительная литература
- •Практический проект: убедимся, что рисунки становятся частью изображения
- •Практический проект: визуализация профиля высот
- •Практический проект: отображение в 3D
- •Практический проект: совмещение карт
- •Усложняем проект: три в одном
- •Усложняем проект: перенос прямоугольников
- •Глава 8. Обнаружение далеких экзопланет
- •Транзитная фотометрия
- •Проект #11. Симуляция транзита экзопланеты
- •Стратегия
- •Код для транзита
- •Эксперименты с транзитной фотометрией
- •Проект #12. Получение изображений экзопланет
- •Стратегия
- •Код для пикселизатора
- •Итоги
- •Дополнительная литература
- •Практический проект: обнаружение инопланетных мегаструктур
- •Практический проект: обнаружение транзита астероидов
- •Практический проект: добавление эффекта потемнения к краю
- •Практический проект: обнаружение пятен на звездах
- •Практический проект: обнаружение инопланетной армады
- •Практический проект: обнаружение планеты с луной
- •Практический проект: измерение продолжительности экзопланетного дня
- •Усложняем проект: генерация динамической кривой блеска
- •Глава 9. Как различить своих и чужих
- •Обнаружение лиц на фотографиях
- •Проект #13. Программирование робота-часового
- •Стратегия
- •Результаты
- •Обнаружение лиц в видеопотоке
- •Итоги
- •Дополнительная литература
- •Практический проект: размытие лиц
- •Усложняем проект: обнаружение кошачьих мордочек
- •Глава 10. Ограничение доступа по принципу распознавания лиц
- •Распознавание лиц с помощью LBPH
- •Схема распознавания лиц
- •Извлечение гистограмм локальных бинарных шаблонов
- •Проект #14. Ограничение доступа к инопланетному артефакту
- •Стратегия
- •Поддержка модулей и файлов
- •Код для захвата видео
- •Код для обучения алгоритма распознавания лиц
- •Код для прогнозирования лиц
- •Результаты
- •Итоги
- •Дополнительная литература
- •Усложняем проект: добавление пароля и видеозахвата
- •Усложняем проект: похожие лица и близнецы
- •Усложняем проект: машина времени
- •Глава 11. Создание интерактивной карты побега от зомби
- •Проект #15. Визуализация плотности населения с помощью хороплетной карты
- •Стратегия
- •Библиотека анализа данных
- •Библиотеки bokeh и holoviews
- •Установка pandas, bokeh и holoviews
- •Работа с данными по уровню безработицы и плотности населения в округах и штатах
- •Разбираем код holoviews
- •Код для отрисовки хороплетной карты
- •Планирование маршрута
- •Итоги
- •Дополнительная литература
- •Усложняем проект: отображение на карте изменения численности населения США
- •Глава 12. Находимся ли мы в компьютерной симуляции?
- •Проект #16. Жизнь, Вселенная и пруд черепахи Йертл
- •Код симуляции пруда
- •Следствия симуляции пруда
- •Измерение затрат на пересечение строк или столбцов сетки
- •Результаты
- •Стратегия
- •Итоги
- •Дополнительная литература
- •Дополнение
- •Усложняем проект: поиск безопасного места в космосе
- •Усложняем проект: а вот и Солнце
- •Усложняем проект: взгляд глазами собаки
- •Усложняем проект: кастомизированный поиск слов
- •Усложняем проект: что за сложную паутину мы плетем
- •Усложняем проект: идем вещать с горы
- •Решения для практических проектов
- •Глава 2. Определение авторства с помощью стилометрии
- •Охота на собаку Баскервилей с помощью распределения
- •Тепловая карта пунктуации
- •Глава 4. Отправка суперсекретных сообщений с помощью книжного шифра
- •Составление графика символов
- •Отправка секретов шифром времен Второй мировой войны
- •Глава 5. Поиск Плутона
- •Представление орбитальной траектории
- •Глава 6. Победа в лунной гонке с помощью «Аполлона-8»
- •Симуляция шаблона поисков
- •Заведи меня!
- •Останови меня!
- •Глава 7. Выбор мест высадки на Марсе
- •Убеждаемся, что рисунки становятся частью изображения
- •Визуализация профиля высоты
- •Отображение в 3D
- •Совмещение карт
- •Глава 8. Обнаружение далеких экзопланет
- •Обнаружение инопланетных мегаструктур
- •Обнаружение транзита астероидов
- •Добавление эффекта потемнения к краю
- •Обнаружение инопланетной армады
- •Обнаружение планеты с луной
- •Измерение продолжительности экзопланетного дня
- •Глава 9. Как различить своих и чужих
- •Размытие лиц
- •Глава 10. Ограничение доступа по принципу распознавания лиц
- •Усложняем проект: добавление пароля и видеозахвата
Дополнительная литература 309
Для того чтобы алгоритм LBPH работал максимально точно, нужно использовать его в контролируемых условиях. Напомню, что, вынудив пользователя получать доступ через ноутбук, мы контролировали его позу, размер лица, разрешение изображения и освещение.
Итоги
В этой главе мы реализовали распознавание лиц людей с помощью алгоритма построения гистограмм локальных бинарных шаблонов. Используя всего несколько строк кода, мы создали надежный алгоритм распознавания лиц, который способен с легкостью обрабатывать изменчивые условия освещения. Кроме того, с помощью метода os.path.split() из стандартной библиотеки мы разделили пути к каталогам и имена файлов для создания настраиваемых имен.
Дополнительная литература
В«Local Binary Patterns Applied to Face Detection and Recognition» (Polytechnic University of Catalonia, 2010) автор Лаура Мария Санчес Лопес (Laura María Sánchez López) тщательно разбирает LBPH. В формате PDF эту книгу вы найдете онлайн, например, на сайте https://www.semanticscholar.org/.
В«Look at the LBP Histogram» с сайта AURlabCVsimulator (https://aurlabcvsimulator.readthedocs.io/en/latest/) приведен код на Python, который позволяет визуализировать изображение LBPH.
Если вы являетесь пользователем macOS или Linux, то обязательно ознакомьтесь с библиотекой face_recognition, созданной Адамом Гейтгеем (Adam Geitgey). Это простая и очень точная система распознавания лиц, работающая на принципах глубокого обучения. Инструкции по ее установке и описание вы найдете на сайте Python Software Foundation по адресу https://pypi.org/project/face_recognition/.
«Machine Learning Is Fun! Part 4: Modern Face Recognition with Deep Learning» (Medium, 2016) Адама Гейтгея — короткий и интересный обзор современных техник распознавания лиц при помощи Python, OpenFace и dlib.
«Liveness Detection with OpenCV» (PyImageSearch, 2019), написанное Адрианом Роузброком (Adrian Rosebrock), — онлайн-руководство о том, как защитить систему распознавания от спуфинговых атак, при которых злоумышленник может обмануть алгоритм, например, поднеся к видеокамере фотографию капитана Демминга.
В различных городах и колледжах в разных странах мира начали запрещать использование систем распознавания лиц. При этом изобретательные граждане
310 Глава 10. Ограничение доступа по принципу распознавания лиц
тоже не остаются в стороне, с целью защиты личности они разрабатывают специальную одежду, вводящую системы в заблуждение. «These Clothes Use Outlandish Designs to Trick Facial Recognition Software into Thinking You’re Not Human» («В этой одежде используется неординарный дизайн, благодаря которому системы не могут распознать человека») Аарона Холмса (Aaron Holmes) (Business Insider, 2020 год) и «How to Hack Your Face to Dodge the Rise of Facial Recognition Tech» («Как замаскировать лицо, чтобы избежать обнаружения всепроникающими системами распознавания лиц») Элизы Томас (Elise Thomas) (Wired, 2019) — обзор практичных и непрактичных способов решения этой проблемы.
«OpenCV Age Detection with Deep Learning» (PyImageSearch, 2020) Адриана Роузброка — онлайн-руководство по использованию OpenCV для прогнозирования возраста человека по его фотографии.
Усложняем проект: добавление пароля и видеозахвата
Написанная нами в проекте 14 программа 3_predict.py перебирает каталог фотографий, выполняя распознавание лиц. Перепишите ее так, чтобы она динамически распознавала лица в видеопотоке камеры. Рамка лица и имя должны появляться в видеокадре так же, как на изображениях из каталога.
Сделайте так, чтобы для запуска программы пользователю нужно было ввести пароль, который будет проверяться. На случай ввода верного пароля нужно будет также добавить аудиообращение к пользователю с просьбой посмотреть в камеру. Если программа верно распознает капитана Демминга, то использовать еще одну аудиозапись, сообщающую о предоставлении доступа в лабораторию. В противном случае воспроизводить сообщение об отказе в доступе.
Если вам понадобится помощь в распознавании лица в видеопотоке, то загляните в программу challenge_video_recognize.py в приложении к книге. Обратите внимание, что в случае с видеорядом вам может потребоваться использовать более высокое значение уверенности, чем при работе с фотографиями.
Для того чтобы иметь возможность отслеживать попытки доступа в лабораторию, сохраните один кадр в тот же каталог в виде файла lab_access_log.txt. В качестве имени файла используйте зарегистрированные результаты из datetime. now(), чтобы можно было сопоставить лицо с попыткой доступа. Обратите внимание, что нужно переформатировать строку, возвращенную из datetime. now(), чтобы она содержала только такие символы, которые допускаются вашей операционной системой для имен файлов.
Усложняем проект: машина времени 311
Усложняем проект: похожие лица и близнецы
Используйте код из проекта 14 для сравнения лиц двойников и близнецов знаменитостей. Обучите алгоритм распознавания на фотографиях лиц из интернета
ипроверьте, удастся ли вам обмануть алгоритм LBPH. Для сравнения можно взять Скарлетт Йоханссон и Эмбер Херд, Эмму Уотсон и Кирнан Шипку, Лиама Хемсворта и Карена Качанова, Роба Лоу и Йэна Сомерхолдера, Хилари Дафф
иВикторию Педретти, Брайс Даллас Ховард и Джессику Честейн, а также Уилла Феррелла и Чада Смита.
В качестве известных близнецов — например, астронавтов Марка и Скотта Келли, а также знаменитостей Мэри-Кейт и Эшли Олсен.
Усложняем проект: машина времени
Если вы вдруг решите посмотреть какой-нибудь старый сериал, то увидите в нем известных актеров в молодости или юности. Но даже несмотря на то, что люди хорошо распознают лица, у нас могут возникнуть сомнения при взгляде, например, на молодого Иэна Маккеленна или Патрика Стюарта. Именно поэтому лишь определенная интонация речи или особая манера поведения побуждают нас уточнить у Google, кто играет в данном фильме.
Алгоритмы также могут ошибаться при распознавании состарившихся людей. Чтобы увидеть, как алгоритм LBPH работает в подобных случаях, возьмите программу из проекта 14 и обучите ее на ваших снимках (или ваших родственников), сделанных, например, в ранней юности. А потом протестируйте алгоритм распознавания на снимках, сделанных позже.