- •Об авторе
- •О научных редакторах
- •Благодарности
- •От издательства
- •Введение
- •Для кого эта книга?
- •Почему 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. Ограничение доступа по принципу распознавания лиц
- •Усложняем проект: добавление пароля и видеозахвата
224 Глава 7. Выбор мест высадки на Марсе
30 North
Olympus
Mons
Рис. 7.14. Очень ровная поверхность на запад от полей лавы возле горы Олимп
Итоги
В этой главе мы использовали Python, OpenCV, Python Imaging Library, NumPy и tkinter для загрузки, анализа и показа изображений. Так как OpenCV рассматривает изображения в виде массивов NumPy, можно легко извлекать из частей изображенияинформациюиоцениватьееприпомощинаучныхбиблиотекPython.
Использованный нами датасет обеспечил быстрое скачивание и выполнение. Интерн в реальной лаборатории, конечно, использовал бы более крупный и точный набор данных, состоящий из миллионов реальных измерений высоты, но нам нужно было лишь изучить сам процесс, затратив немного усилий и получив удовлетворительные результаты.
Дополнительная литература
У Jet Propulsion Laboratory есть несколько коротких и забавных видео о посадке на Марс. Онлайн вы их найдете по запросу «Mars in a Minute: How Do You Choose a Landing Site?», а также «Mars in a Minute: How Do You Land on Mars?».
Книга «Mapping Mars: Science, Imagination, and the Birth of a World» (Picador, 2002), написанная Оливером Мортоном (Oliver Morton), посвящена истории современного изучения Марса, включая создание карты MOLA.
«The Atlas of Mars: Mapping Its Geography and Geology» (Cambridge University Press, 2019) Кеннета Кольза (Kenneth Coles), Кеннета Танака (Kenneth Tanaka)
Практический проект: визуализация профиля высот 225
и Филипа Кристенсена (Philip Christensen) представляет выдающийся универсальный справочный атлас Марса, содержащий карты минералогии, топографии, геологии, термальных свойств, приповерхностного водяного льда и не только.
Страница данных карты MOLA, использованной в проекте 10, находится на https://astrogeology.usgs.gov/search/map/Mars/GlobalSurveyor/MOLA/Mars_MGS_MOLA_ DEM_mosaic_global_463m/.
Подробные данные о Марсе доступны на сайте Mars Orbital Data Explorer, созданном PDS Geoscience Node в Университете Вашингтона в Сент-Луисе (https:// ode.rsl.wustl.edu/mars/index.aspx).
Практический проект: убедимся, что рисунки становятся частью изображения
Напишите программу Python, которая проверяет, становятся ли добавленные на изображение рисунки, такие как текст, линии, прямоугольники и т. д., частью этого изображения. Используйте NumPy для вычисления среднего значения, а также статистик стандартного отклонения и высоты неровностей профиля для прямоугольной области на полутоновом изображении MOLA. Но при этом не рисуйте контуры прямоугольника. Затем проведите вокруг этой области белую линию и еще раз просчитайте статистику. Совпадают ли два полученных результата?
Решение под названием practice_confirm_drawing_part_of_image.py находится в приложении к книге или в каталоге Chapter_7, доступном для скачивания по адресу https://nostarch.com/real-world-python/.
Практический проект: визуализация профиля высот
Профиль высот — это двухмерное представление ландшафта в поперечном срезе. Это вид сбоку рельефа поверхности вдоль линии, нарисованной между некоторыми точками на карте. Геологи используют такие профили для изучения поверхности и визуализации ее топографии. Для данного практического проекта нарисуйте профиль с запада на восток вдоль линии, которая проходит через самый большой вулканический кратер в Солнечной системе, гору Олимп (рис. 7.15).
Используйте карту Mars MGS MOLA — MEX HRSC Blended DEM Global 200m v2, показаннуюнарис.7.15.Уэтойверсииболеекачественноепоперечноеразрешение, чем у использованной в проекте 10. В ней также используется полный диапазон
226 Глава 7. Выбор мест высадки на Марсе
высот в данных MOLA. Ее копию под названием mola_1024x512_200mp.jpg можете найти в каталоге Chapter_7, доступном для скачивания с сайта книги. Решение же, practice_profile_olympus.py, находится в том же каталоге и в приложении к книге.
В а ( а)
П а Ма а
Рис. 7.15. Увеличенный по вертикали профиль через гору Олимп в направлении с запада на восток
Практический проект: отображение в 3D
Марс является несимметричной планетой: на южном полушарии доминируют испещренные кратерами высокогорья, а северное отличается ровными, плоскими долинами. Чтобы сделать это более наглядным, используйте предоставляемую matplotlib функциональность построения 3D-графиков для изображения mola_1024x512_200mp.jpg, которое использовали в предыдущем практическом проекте (рис. 7.16).
Библиотека matplotlib предоставляет точки, линии, контуры, каркасы модели и плоскости для создания 3D-графиков. Такие графики хотя и получаются
Практический проект: совмещение карт 227
Ю
Ра а А
Ра а Э а а
Г а О
|
а |
|
|
С |
|
Г а Э |
П а |
|
а |
||
|
Рис. 7.16. 3D-график контуров Марса с ориентацией на запад
несколько грубоваты, зато генерируются быстро. Также можно использовать мышь для интерактивного захвата точек на графике и смены угла обзора. Подобные графики особенно полезны для тех, кому сложно визуализировать топографию на основе 2D-карт.
На рис. 7.16 более крупная вертикальная шкала делает наглядным изменение в высоте с юга на север. Здесь также несложно отметить самую высокую гору (Олимп) и самый глубокий кратер (равнина Эллада).
Можете воссоздать график с рис. 7.16 без аннотации с помощью программы practice_3d_plotting.py, которую найдете в приложении к книге или в каталоге Chapter_7, доступном для скачивания с сайта книги. Изображение карты вы найдете там же.
Практический проект: совмещение карт
Создайте новый проект, который придаст научность процессу выбора посадочных площадок. Совместите карту MOLA с цветной геологической картой
228 Глава 7. Выбор мест высадки на Марсе
и найдите наиболее ровные прямоугольные области среди вулканических отложений в провинции Фарсида (показана стрелкой на рис. 7.17).
Рис. 7.17. Геологическая карта Марса. Стрелка указывает на район вулканических отложений в провинции Фарсида
Поскольку провинция Фарсида располагается на значительной высоте, то вместо определения низин сосредоточьтесь на поиске наиболее плоских и ровных областей среди вулканических отложений. Чтобы выделить именно вулканические отложения, рассмотрите вариант бинаризации полутоновой версии карты. Бинаризация — это техника сегментации, которая разделяет передний и задний планы.
С ее помощью можно конвертировать полутоновое изображение в двоичное, где пиксели над или между указанными пороговыми значениями устанавливаются как 1, а все остальные как 0. Такое бинарное изображение позволяет отфильтровать карту MOLA, как показано на рис. 7.18.
Геологическую карту Mars_Global_Geology_Mariner9_1024.jpg вы найдете в каталоге Chapter_7, доступном для скачивания с сайта книги. Вулканические отложения окрашены в светло-розовый цвет. В качестве карты высот используйте mola_1024x512_200mp.jpg из практического проекта «Визуализация профиля высот» на с. 225.
Решения practice_geo_map_step_1of2.py и practice_geo_map_step_2of2.py можно найти в том же каталоге или приложении к книге. Сначала запустите программу practice_geo_map_step_1of2.py, чтобы сгенерировать фильтр для шага 2.