Как стать автором
Обновить

Работа с камерой мобильного телефона в Python

Время на прочтение2 мин
Количество просмотров17K
В прошлой статье мы рассмотрели установку Python для S60 и работу в интерактивной консоли, сегодня мы рассмотрим возможности работы Python с камерой мобильного телефона.

Итак, приступим...



Для работы с камерой в Python существует специальный модуль camera. Для начала получим разрешения фото поддерживаемые камерой:
import camera
sizes = camera.image_sizes()

Причем если мы просто напишем в консоли camera.image_sizes то получим весьма странные результаты – что разрешение камеры не больше 2-х мегапикселей. Для того чтобы была возможность получать фото во всю “мощь” камеры необходимо первоначально перевести приложение в пейзажный режим (горизонтальный).
Для этого перед подключением камеры нам необходимо добавить строку appuifw.app.orientation = 'landscape'.
Для того чтобы включить превью камеры необходимо получить канвас нашей формы, для этого: canvas = appuifw.Canvas()
Также предварительно необходимо подготовить небольшую функцию для инициализации превью:
def cam_finder(im):
canvas.blit(im)


Ну и теперь мы смело можем запускать предпросмотрщик:
camera.start_finder(cam_finder, size=(320,240))
здесь указаны размера окна предпросмотра – они могут быть произвольного размера.

Теперь же нам необходимо сделать снимок с камеры, для этого добавим к центральной кнопке возможность делать фото:
canvas.bind(key_codes.EKeySelect, take_picture)
здесь:
EKeySelect – это центральная кнопка джойстика,
take_picture – это функция которая будет выполняться при нажатии кнопки, напишем ее:
для начала необходимо отключить предпросмотр:
camera.stop_finder()
затем самое главное – получить фото с камеры, для этого служит функция camera.take_photo, которая может принимать множество параметров, таких как zoom, использование вспышки, размер фото и другие. Мы задаем лишь размер фото.
pic = camera.take_photo(size = (cur_w,cur_h))

Вот собственно и то чего мы и добавались – получить фото с камеры. В результате мы имеем объект класса Image который поддерживает основные операции, такие как – ресайзинг, сохранение, добавление текста, рисование простых фигур и другие.
Для того чтобы сохранить полученное изображение используется функция save, которая принимает имя файла и степень качества jpeg от 1 до 99
pic.save(filename, quality=75)

Ниже представлена небольшая программа с возможностью выбора разрешения фото и подробными комментариями.
image
Исходный код сюда не смог написать, так как хабр съедает все пробелы в начале строк, а для питона это критично, так что смотрим исходник с комментариями тут
Теги:
Хабы:
Всего голосов 48: ↑47 и ↓1+46
Комментарии22

Публикации