Книга «Python для хакеров. Нетривиальные задачи и проекты» |
||
|
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2023-05-09 12:59 «Python для хакеров. Нетривиальные проекты и задачи» делает упор на реальные проекты, так что от экспериментирования с синтаксисом вы сразу перейдете к написанию полноценных программ. Развивая свои навыки разработки на Python, вы будете проводить научные опыты, изучать статистику и решать задачи, которые не давали покоя гениям на протяжении многих лет, и даже займетесь обнаружением далеких экзопланет. Каждая глава начинается с четко поставленной цели и обсуждения способов решения задачи. Далее следует собственно миссия и стратегия действий, построенная таким образом, чтобы вы научились мыслить как программист. Вы будете руководить спасательной операцией береговой охраны, спланируете и осуществите полет космического корабля на Луну, реализуете ограничение доступа в секретную лабораторию с помощью распознавания лиц и не только это. Программы, представленные в книге, не отпугнут даже новичков. Вы будете осваивать все более сложные техники и наращивать навыки написания кода. Справившись со всеми миссиями, вы будете готовы к самостоятельному решению любых сложных реальных задач с помощью Python. Проект #10. Выбор посадочных мест на Марсе Представьте, что в качестве интерна вы работаете в NASA над проектом «Орфей». Этот проект посвящен прослушиванию марсотрясений и изучению внутренней структуры планеты, наподобие миссии InSight 2018 года. Поскольку цель «Орфея» — изучение внутреннего строения Марса, то интересные элементы поверхности планеты особой роли не играют. В первую очередь важна безопасность, что делает этот проект мечтой любого инженера. ЗАДАЧА Стратегия Сначала нам надо найти способ разделить цифровую карту MOLA на прямоугольные области и собрать статистические данные о том, на какой высоте они располагаются и насколько ровная их поверхность. Это означает, что мы будем работать с пикселями, поэтому потребуются инструменты для обработки изображений. А поскольку NASA всегда стремится к экономии, то и использовать придется бесплатные открытые библиотеки, такие как OpenCV, Python Imaging Library (PIL), tkinter и NumPy. Обзор и инструкции об установке OpenCV и NumPy ищите в разделе «Установка библиотек Python» на с. 31, а о PIL — в разделе «Модули Word Cloud и PIL» на с. 102. Что же касается tkinter, то этот модуль изначально включен в Python. ![]() Высота неровностей профиля (peak-to-valley, PV) — это разница в высоте между самой высокой и самой низкой точками поверхности, то есть максимальное изменение высоты поверхности. Это важный показатель, так как поверхность может обладать относительно низким, предполагающим ровную поверхность, стандартным отклонением, но при этом быть небезопасной, как показано на рис. 7.3. ![]() Код для выбора мест посадки В программе site_selector.py используются полутоновое изображение карты (рис. 7.4) для выбора прямоугольных посадочных областей и затененная цветная карта (см. рис. 7.2) для их отметки. На полутоновом изображении высота представлена одним каналом, поэтому его проще использовать, чем трехканальную RGB-картинку. ![]() ПРИМЕЧАНИЕ Импорт модулей и присваивание вводимых пользователем констант Код листинга 7.1 импортирует модули и присваивает константы, представляющие вводимые пользователем параметры: имена изображений, размеры прямоугольных областей, максимальный порог высоты и количество предлагаемых к рассмотрению прямоугольников. Начинаем с импорта модуля tkinter. Это предустановленная в Python библиотека GUI для разработки десктопных приложений. С ее помощью мы будем создавать заключительное отображение: окно с цветной картой MOLA вверху и текстовым описанием отмеченных прямоугольников внизу. На большинстве машин с Windows, macOS и Linux tkinter уже установлен. Если у вас этой библиотеки нет или нужна последняя версия, то можно скачать и установить ее со страницы www.activestate.com. Онлайн-документация для этого модуля находится по адресу docs.python.org/3/library/tk.html. Далее импортируем модули Image и ImageTK из Python Imaging Library. Image предоставляет класс, отображающий картинку PIL. Кроме того, он содержит функции, в том числе необходимые для загрузки изображений из файлов и создания новых изображений. Модуль ImageTK обеспечивает поддержку для создания и изменения объектов BitmapImage библиотеки tkinter из изображений PIL. Опять же, мы используем их в конце программы, чтобы разместить в итоговом окне цветную карту и описания. В завершение импортируем библиотеки NumPy и OpenCV. Теперь присваиваем представляющие пользовательский ввод константы, которые по ходу выполнения программы изменяться не будут. Сначала с помощью метода OpenCV imread() скачиваем полутоновое изображение MOLA. Обратите внимание, что нужно использовать флаг cv.IMREAD_GRAYSCALE, поскольку этот метод по умолчанию скачивает изображения в цвете. Повторяем тот же код без флага, чтобы скачать уже цветной вариант. Затем добавляем константы для размера прямоугольников. В следующем листинге мы преобразуем эти размеры в пиксели для использования совместно с картой. Теперь, чтобы наши прямоугольники гарантированно попали в низинные ровные области, нужно ограничить поиск плоскими участками с малым количеством кратеров. Считается, что эти области — дно древних океанов. Таким образом, необходимо установить верхний порог высоты до полутонового значения 55, которое примерно соответствует областям, считающимся древними береговыми линиями (рис. 7.5). ![]() Присваивание выводимых констант и создание объекта экрана В листинге выполняется присваивание констант, выводимых из других констант. Эти значения будут обновляться автоматически при изменении пользователем предыдущих констант, например для тестирования размеров прямоугольников или границ высоты. Оканчивается этот листинг созданием tkinter-объектов screen и canvas для итогового отображения. Распаковываем высоту и ширину изображения с помощью атрибута shape. OpenCV сохраняет изображения как nd-массивы NumPy, являющиеся n-мерными массивами или таблицами элементов одного типа. Для массива изображений shape является кортежем из количества рядов, столбцов и каналов. Высота представляет количество пиксельных строк в изображении, а ширина — количество пиксельных столбцов. Каналы представляют число элементов, используемых для выражения каждого пикселя (например, красный, зеленый и синий). Для полутоновых изображений с одним каналом shape является просто кортежем из высоты и ширины области. Чтобы преобразовать измерение прямоугольных областей из километров в пиксели, нужно знать, сколько пикселей в каждом километре. Поэтому мы делим ширину изображения на длину окружности, получая тем самым соотношение пикселей на километр в области экватора. Затем преобразуем ширину и высоту в пиксели. Эти результаты понадобятся, чтобы вывести значения для квантования индекса, поэтому необходимо, чтобы они были целыми числами, для чего используется int(). Значение этих констант теперь должно быть 32 и 16 соответственно. Нам нужно ограничить поиск наиболее теплыми и солнечными участками, которые располагаются с двух сторон от экватора — между 30° северной и 30° южной широты (рис. 7.6). Можно сказать, что этот регион соответствует земным тропикам. ![]() ![]() ![]() ![]() Обычно только что описанный код tkinter помещается в конце программ, а не в начале. Я же решил разместить его вверху, чтобы упростить восприятие сопутствующих пояснений. Также можно встроить его в функцию, выполняющую финальное отображение. Однако это может вызвать проблемы у пользователей macOS. Для версии macOS 10.6 или более поздних предоставляемый Apple набор инструментов Tcl/Tk 8.5 имеет серьезные баги, которые могут вызвать падение приложения (подробнее — по ссылке www.python.org/download/mac/tcltk). Определение и инициализация класса Search В листинге 7.3 определяем класс, который мы используем для поиска подходящих прямоугольных областей. Следом идет определение метода инициализации _init_(), используемого для инстанцирования новых объектов. Чтобы вкратце узнать об ООП, обратитесь к разделу «Определение класса Search» на с. 36, где мы также определяли класс поиска. Определяем класс Search. Далее прописываем метод _init_(), используемый для создания новых объектов. Параметр name позволит давать собственное имя каждому создаваемому в функции main() объекту. Теперь можно присваивать атрибуты. Начинаем со связывания имени объекта с аргументами, которые будем предоставлять при его создании. Далее присваиваем пустые словари для хранения важных статистических данных для каждого прямоугольника (rect) ?. К ним относятся координаты его угловых точек, средняя высота (mean elevation), высота неровностей профиля (peak-to-valley) и стандартное отклонение (standard deviation). В качестве ключа во всех словарях будут использоваться последовательные числа, начиная с 1. Эти данные нужно отфильтровать, чтобы найти наименьшие значения, поэтому создаем два пустых списка для их хранения ?. Обратите внимание, что для представления статистики высоты неровностей профиля (peak-to-valley) я использую выражение ptp, а не ptv. Это необходимо для согласования со встроенным в NumPy методом peak-to-peak, занимающимся ее вычислением. В конце программы мы поместим прямоугольники, которые одновременно встречаются в упорядоченных списках стандартного отклонения и высот неровностей профиля, в новый список high_graded_rects. Этот список будет содержать номера прямоугольников с наименьшими общими показателями. Эти прямоугольники окажутся лучшими местами для посадочных эллипсов. Более подробно с книгой можно ознакомиться на сайте издательства: » Оглавление » Отрывок По факту оплаты бумажной версии книги на e-mail высылается электронная книга. Для Хаброжителей скидка 25% по купону — Python Источник: habr.com Комментарии: |
|