Введение в Python

Содержание лекции:

1. Определение компьютерного зрения

2. Универсальный язык программирования Python

3. Необходимые инструменты для обучения на курсе

Запись первого занятия вы можете посмотреть по этой ссылке.

1. Определение компьютерного зрения

Для начала стоит ответить на вопрос: а что такое зрение вообще?

Зрение - способность человека воспринимать информацию путём преобразования светового сигнала зрительной системой.

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

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

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

Задачи компьютерного зрения:

  • Компьютерное зрение начинается с представления изображения в цифровом виде. Изображение закодировано с помощью цветовой схемы и может состоять из нескольких слоев, напр. отвечающих за красный, зелёный и синий цвета. Выбор этих цветов обусловлен физиологией человека. Управляя смещением отдельных цветов, компьютерное зрение позволяет выполнять корректировку изображения. Различные фильтры в Photoshop можно взять в качестве примера такой корректировки.
  • Восстановление изображений. Например: повышение разрешения изображения, устранение шума на изображении и посторонних объектов, восстановление участков изображения.
  • Обнаружение объектов. При помощи анализа отдельных сегментов изображения, компьютерное зрение позволяет локализовать на изображении отдельные объекты и выполнять их классификацию. 
  • Классификация сцены - в данном случае классификация выполняется не для одного объекта, а для изображения целиком, на основе совокупности объектов и фона алгоритм определяет, какая сцена находится на изображении - напр. здание, лес, улица.
  • Смысловая сегментация изображений, то есть определить, каким классам соответствуют отдельные участки изображения.
  • Извлечение характеристик обнаруженных объектов, например, определять человека на фото и его эмоции.
  • Восприятие 3-х мерного пространства. Алгоритмы компьютерного зрения на основе изображений с двух камер позволяют восстановить 3-х мерную сцену, определив т. н. карту глубины.
  • Слежение за объектами.

Применение компьютерного зрения:

  • Первая область, с которой столкнулись непосредственно мы в нашей компании СофтИнжиниринг, - видеоаналитика. Компьютерное зрение позволяет обрабатывать кадры видео с видеокамер в режиме реального времени или отложенном режиме. Компьютерное зрение позволяет обрабатывать кадры видео с видеокамер в режиме реального времени или отложенном режиме. Компьютерное зрение применяется для подсчёта людей. Подсчёт людей может использоваться, например, для подсчёта посетителей в магазине или торговом центре, а также для подсчёта пассажиров.

  • Распознавание лиц. Здесь стоит сказать, что это одна из основных задач компьютерного зрения и технологии распознавания лиц развиваются начиная с 60-х годов прошлого века.

  • Автоматическое управление механическими средствами, например, автомобилем. На изображении пример системы автоматического пилотирования Tesla. Автопилот использует технологию анализа нескольких снимков с разных ракурсов, объединённых в единую систему.

  • Развлечения. Компьютерное зрение применяется в такой технологии, как захват движения, и позволяет анимировать персонажей в фильмах и видеоиграх, а также управлять персонажами, например, с помощью датчика Kinect для Xbox.

  • Генерация изображений. Функция генерации изображений может быть полезна, когда нужно придумать новый образ на основе сочетания характеристик отдельных образов.
  • Повышение качества изображения в играх. В отличии от реальных изображений, в видеоиграх изображения искусственные и зачастую не имеют аналогов в реальной жизни, поэтому такие системы обучаются на сгенерированных изображениях, подходящих по стилю изображениям в игре.
  • Фейки. Последнее время компьютерное зрение часто используют в качестве развлечения для подмены лиц на изображении.
  • Дополненная реальность. Компьютер анализирует окружение, находит на нём поверхности и объекты, после чего позволяет добавить новые объекты, напр. как в игре Pokemon Go, так и удалить существующие, напр. рекламные баннеры.
  • Медицина для анализа снимков и моделирования человеческого организма, а также для поиска аномальных образований, напр. на изображении представлена разработка от Microsoft.

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

2. Универсальный язык программирования Python

Python – интерпретируемый язык программирования

Это значит, что исходный код частями преобразуется в машинный в процессе его чтения специальной программой – интерпретатором.

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

Python – это универсальный язык программирования, используемый в самых различных сферах, такие как: создание игр, построение веб приложений, решение бизнес-задач и разработки внутренних инструментов для всевозможных интересных проектов. Python также широко применяется в научной области для теоретических исследований и решения прикладных задач. Чаще всего Python применяют в работе с большими данными и разработке сайтов и мобильных игр. Он подходит и для создания десктопных и мобильных приложений. 

Примеры, где используется Python: графический редактор GIMP, Торрент-клиент BitTorrent вплоть до 6 версии, Python применялся и в ходе разработки игровых проектов класса ААА: EVE Online, Battlefield 2, World of Tanks и других. А ещё язык Python используется в системном администрировании, для автоматизации задач. Он задействован практически во всех серверах с ОС Linux.

 Основная, но не единственная, поддерживаемая им парадигма, – объектно-ориентированное программирование. Однако в данном курсе мы только упомянем об объектах, а будем изучать структурное программирование, так как оно является базой.

Так как Python интерпретируемый язык, то есть исходники не нужно компилировать. Интерпретаторы Python распространяется свободно на основании лицензии подобной GNU General Public License.

Python используется повсеместно — с ним дружат мобильные и десктопные приложения, игры, наука, ИИ-отрасль. Проще перечислить, где Python ещё не пригодился. Такая пластичность очень способствует его популярности.


На следующем видео вы можете посмотреть рейтинги языков программирования:

Сколько зарабатывают разработчики на Python

По данным блога «Хабр.Карьеры», медианная зарплата Python-разработчика во втором полугодии 2019 года — 115 тысяч рублей. А теперь оценим по уровню специалиста:

  • джуниор получает в среднем 54 тысячи рублей;
  • мидл — около 100 тысяч;
  • сеньор — примерно 160 тысяч. Фактически встречаются разработчики и с окладом 300 тысяч;
  • тимлид — в районе 195 тысяч.

Data Science, машинное обучение и искусственный интеллект развиваются очень активно. Неотъемлемая часть этих отраслей — как раз Python и специалисты, владеющие им. 

3. Необходимые инструменты для обучения на курсе

Для работы рекомендуется использовать Ubuntu 16.04, Python 3.6 и IDE PyCharm Community. Почему именно эти версии:

  • По опыту работы с готовыми решениями, большинство из них работают именно под Ubuntu 16.04 и Python 3.6. Для прохождения курса также подойдут Windows и Python версий 3.5 и 3.7.
  • IDE PyCharm Community является бесплатной и подходит как для Linux, так и для Windows. Альтернативными вариантами являются редакторы Visual Studio Code, Sublime Text и Notepad++. Кто хочет научиться лучше воспринимать код, а не пользоваться средствами автодополнения PyCharm, рекомендуют использовать эти редакторы.


Для работы также понадобится установить следующие библиотеки для Python:

  • opencv-python - библиотека для компьютерного зрения.
  • tensorflow - фреймворк для нейронных сетей.
  • keras - фреймворк для нейронных сетей, надстройка над tensorflow.

Инструкция по установке рабочего окружения:

  • Основной фреймворк, используемый для компьютерного зрения, - OpenCV. Этот фреймворк позволяет разрабатывать приложения на языках С++ и Python.
  • Для использования нейронных сетей, используются такие библиотеки как TensorFlow и Keras. Keras является удобной обёрткой над TensorFlow, которая позволяет упростить и ускорить разработку.

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

Синтаксис языка. Типы и объекты

На языке Python можно программировать в интерактивном режиме. Грубо говоря, интерпретатор выполняет команды построчно. Пишешь строку, нажимаешь Enter, интерпретатор выполняет ее, наблюдаешь результат.

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

Но в нашем курсе мы все-таки будем писать исходный код в среде разработки или notepad++. Несмотря на удобства интерактивного режима, чаще всего необходимо сохранить исходный программный код для последующего выполнения и использования. В таком случае подготавливаются файлы, которые передаются затем интерпретатору на исполнение. Файлы с кодом на Python обычно имеют расширение .py.

Синтаксис

Конец строки является концом инструкции (точка с запятой не требуется).

Вложенные инструкции объединяются в блоки по величине отступов. Отступ может быть любым, главное, чтобы в пределах одного вложенного блока отступ был одинаков.

Блоки кода в языке оформляются пробелами или табуляцией. В языке C/С++ или Java блоки кода оформлены в фигурные скобки. 

В Python принято выделять блоки кода табом или 4-мя пробелами


Комментарии

Бывает такое, что ты написал код для чего-либо с ним все хорошо, он работает как надо и ты забыл про него. Но с течением времени в этой программе нужно что-то изменить или найти ошибку. Ты заходишь в код программы и что ты там видишь? Сплошной текст, в котором прежде чем что-то менять нужно еще разобраться, для чего нужна та или иная переменная, методы и так далее. Поэтому есть правила написания кода, то есть программа должна не только работать верно, но и быть “читаемой”, для того что-бы ты или твой наследник смог с течением времени в нем разобраться. Но кроме правил среди разработчиков используются еще и комментарии

Комментарий - это текст написанный внутри кода, который описывает для чего нужна какая-либо структура, что она делает и как действует. При этом этот текст никак не влияет на работоспособность программы. По сути это стикер, который ты приклеиваешь, чтобы что-то не забыть.

В Питоне однострочный комментарий обозначается знаком “#”

Многострочный выделяется при помощи трех апострофов с двух сторон ‘’’ это комментарий ‘’’’


Строки 

 Любая последовательность символов, заключенная в кавычки, в Python считается строкой; при этом строки могут быть заключены как в одиночные, так и в двойные кавычки: "This is a string." 'This is also a string.' Это правило позволяет использовать внутренние кавычки и апострофы в строках: 'I told my friend, "Python is my favorite language!"' "The language 'Python' is named after Monty Python, not the snake." "One of Python's strengths is its diverse and supportive community."

Вывод/ввод данных 

Для чего нужны программы? Каким образом работают большинство программ? 

Что-бы что-то сделать для пользователя. Например, что общего у калькулятора, переводчика и простого блокнота?

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

В питоне существует метод input() для вводных данных и print() для вывода данных в консоль (если это консольное приложение)


Hello world! 

Итак, правило хорошего тона при изучении любого нового языка, это написать первую программу “Hello world!”. Что ж, приступим. 

Поставим задачу: вывести в консоль текст “Hello world!”.

Для начала потренируемся программировать без среды разработки, при помощи notepad++.

Создадим нашу первую программу. Создать-текстовый файл. Назовем “myFirstProgramm.py”, соглашаемся с тем, что мы изменили формат. ПКМ - открыть с помощью - notepad++

Данная задача в питоне решается в одну лишь строчку: print(“Hello world!”). Компилируем нашу программу. Открываем командную строку, переходим в папку с проектом при помощи команды cd и перетаскиванием файла. И запускаем python myFirstProgramm.py 

И видим результат.

Замечательно, теперь усложним задачу: Программа должна поздороваться с пользователем по имени. На вход - имя пользователя, выход - “Здравствуй, Имя!”

Итого две строчки кода

name=input()

print(“Здравствуй, “, name)

Но, программисты должны быть дружелюбны к пользователю и не должны стоять за спиной и говорить ему, что ему надо написать Имя, фамилию или вообще, песню не правда ли? Давайте, это исправим

Задача: Познакомиться с пользователем и поздороваться с ним. На входе - имя пользователя, на выходе - приветствие

Подключение модулей 

Так как наша дальнейшая работа будет связана с OpenCV, TensorFlow и Keras, нам нужно научиться их подключать.

Модулем в Python называется любой файл с программой (да-да, все те программы, которые вы писали, можно назвать модулями). Модули можно создавать, а также пользоваться открытыми библиотеками и подключать их к вашему коду. Создавать мы их не будем, но научимся подключать из стандартной библиотеки.

Каждая программа может импортировать модуль и получить доступ к его классам, функциям и объектам. Нужно заметить, что модуль может быть написан не только на Python, а например, на C или C++.


Подключение модуля из стандартной библиотеки

Подключить модуль можно с помощью инструкции import. К примеру, подключим модуль os для получения текущей директории:

>>>

>>> import os

>>> os.getcwd()

'C:\\Python33'

После ключевого слова import указывается название модуля. Одной инструкцией можно подключить несколько модулей, хотя этого не рекомендуется делать, так как это снижает читаемость кода. Импортируем модули time и random.

>>>

>>> import time, random

>>> time.time()

1376047104.056417

>>> random.random()

0.9874550833306869

После импортирования модуля его название становится переменной, через которую можно получить доступ к атрибутам модуля. Например, можно обратиться к константе e, расположенной в модуле math:

>>>

>>> import math

>>> math.e

2.718281828459045

Стоит отметить, что если указанный атрибут модуля не будет найден, возбудится исключение AttributeError. А если не удастся найти модуль для импортирования, то ImportError.

>>>

>>> import notexist

Traceback (most recent call last):

  File "", line 1, in

    import notexist

ImportError: No module named 'notexist'

>>> import math

>>> math.Ё

Traceback (most recent call last):

  File "", line 1, in

    math.Ё

AttributeError: 'module' object has no attribute 'Ё'

Использование псевдонимов

Если название модуля слишком длинное, или оно вам не нравится по каким-то другим причинам, то для него можно создать псевдоним, с помощью ключевого слова as.

>>>

>>> import math as m

>>> m.e

2.718281828459045

Теперь доступ ко всем атрибутам модуля math осуществляется только с помощью переменной m, а переменной math в этой программе уже не будет (если, конечно, вы после этого не напишете import math, тогда модуль будет доступен как под именем m, так и под именем math).

Инструкция from

Подключить определенные атрибуты модуля можно с помощью инструкции from. Она имеет несколько форматов:

from <Название модуля> import <Атрибут 1> [ as <Псевдоним 1> ], [<Атрибут 2> [ as <Псевдоним 2> ] ...]

from <Название модуля> import *

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

>>>

>>> from math import e, ceil as c

>>> e

2.718281828459045

>>> c(4.6)

5

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

>>>

>>> from math import (sin, cos,

...          tan, atan)

Второй формат инструкции from позволяет подключить все (точнее, почти все) переменные из модуля. Для примера импортируем все атрибуты из модуля sys:

>>>

>>> from sys import *

>>> version

'3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)]'

>>> version_info

sys.version_info(major=3, minor=3, micro=2, releaselevel='final', serial=0)

Следует заметить, что не все атрибуты будут импортированы. Если в модуле определена переменная __all__ (список атрибутов, которые могут быть подключены), то будут подключены только атрибуты из этого списка. Если переменная __all__ не определена, то будут подключены все атрибуты, не начинающиеся с нижнего подчёркивания. Кроме того, необходимо учитывать, что импортирование всех атрибутов из модуля может нарушить пространство имен главной программы, так как переменные, имеющие одинаковые имена, будут перезаписаны.

Домашнее задание 1: 
Установить среду разработки и необходимые модули. Запустить тестовые программы, чтобы проверить работоспособность среды. Привести сриншоты запуска тестовых программ, в качестве результата.
Написать код из практического задания. Привести код решения задач, в качестве результата.
Привести примеры компаний, которые используют в разработке язык Python (каким образом и/или для чего). В качестве результата в текстовом файле напишите название компании, чем она занимается, для чего использует Python, ссылки. Также можете скинуть это в чат телеграмма, для того чтобы поделиться с другими интересной информацией.

Завершить и продолжить  
Обсуждение

0 Комментарии