Python android работа с камерой

У нас есть фотик и котик — работаем с камерой

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

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

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

Программное включение приложения Камера

Раньше на старых телефонах можно было программно запустить из своей программы системное приложение «Камера» (в этом случае вам не понадобятся дополнительные разрешения) через намерение.

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

А вообще у пользователя могут стоять разные приложения, способные фотографировать. Тогда у вас будет появляться диалоговое окно с выбором нужного приложения. Они все имеют в своём составе такую запись в манифесте (для общего развития):

У Гугла есть своя программа Google Камера. Запустим её, зная имя пакета.

При вызове метода getIntent() вместо new Intent() приложение запускалось сразу, иначе — выводилось диалоговое окно выбора программы из списка. Также нужно быть уверенным, что программа установлена, в примере нет кода проверки.

Делаем фотографии и сохраняем результат. Простой пример

Просто включить камеру не слишком интересно. Рассмотрим практичный пример, когда мы программно запустим приложение «Камера», а полученную фотографию сохраним в папке. Сначала сделаем простой вариант, а потом напишем более сложное приложение.

Используйте статическую константу MediaStore.ACTION_IMAGE_CAPTURE для создания намерения, которое потом нужно передать методу startActivityForResult(). Разместите на форме кнопку и ImageView, в который будем помещать полученный снимок. Этот код запускает стандартное приложение камеры. Полученное с камеры изображение можно обработать в методе onActivityResult():

Не включайте в манифест разрешение на работу с камерой, иначе получите крах приложения.

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

При тестировании примера на своём телефоне я обнаружил небольшую проблему — когда снимок передавался обратно на моё приложение, то оно находилось в альбомном режиме, а потом возвращалось в портретный режим. При этом полученный снимок терялся. Поэтому перед нажатием кнопки я поворачивал телефон в альбомный режим, чтобы пример работал корректно. Возможно следует предусмотреть подобное поведение, например, запретить приложению реагировать на поворот и таким образом избежать перезапуска Activity. У некоторых телефонов такой проблемы нет.

По умолчанию фотография возвращается в виде объекта Bitmap, содержащего миниатюру. Этот объект находится в параметре data, передаваемом в метод onActivityResult(). Чтобы получить миниатюру в виде объекта Bitmap, нужно вызвать метод getParcelableExtra() из намерения, передав ему строковое значение data. В примере использовался упрощённый вариант.

Миниатюра и полноразмерное изображение

Если вы укажете исходящий путь URI с помощью параметра MediaStore.EXTRA_OUTPUT в запущенном намерении, полноразмерное изображение, снятое камерой, сохранится в заданном месте. В таком случае в метод onActivityResult() не будет передана миниатюра, а итоговое намерение продемонстрирует значение null.

В следующем примере показано, как при создании снимка получать миниатюру или полноценное изображение, используя намерение. Изображение будет сохранено во внешнем хранилище под именем test.jpg.

Читайте также:  Crazy chicken для андроид

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

Добавим разрешение на запись файла в хранилище.

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

Запуск камеры в нужном режиме

Мы можем выбрать намерение, позволяющее включить камеру в нужном режиме: фотосъёмка или видео.

Снимаем и кадрируем

Рассмотрим ещё один пример с режимом кадрирования. Основная часть кода остаётся прежней. Рекомендую проверять работу с камерой на реальных устройствах, так как многие производители заменяют стандартные методы съёмки своими прошивками и драйверами. В частности, намерение с кадрированием является проблемной, и в интернете многие жалуются на отсутствие поддержки этого способа. Пример для старых устройств до Android 6.0.

Создадим простенький макет из кнопки для запуска камеры и ImageView для вывода кадрированного изображения.

Для большей красоты сделаем задний фон у ImageView с закруглёнными углами и обводкой. Для этого в атрибуте android:background мы прописали специальный стиль. Создайте папку res/drawable, а в ней файл background.xml следующего содержания:

Этот шаг не является обязательным и его можно пропустить.

При нажатии кнопки запускаем приложение Камера и ожидаем результата.

После того, как пользователь сделал нужный кадр, программа Камера возвращает результат обратно в наше приложение. Результат обрабатывается в методе onActivityResult():

Получив полноразмерное изображение, мы пытаемся откадрировать его. Для этого создадим метод performCrop(), который запускает специальное намерение, предназначенное для этих целей. В успешном случае результат снова возвращается в наше приложение, но уже с другим кодом PIC_CROP. Теперь мы имеем нужное изображение, которое можно вывести на экран.

При кадрировании мы указываем желаемые размеры (код метода ниже). Если указать слишком больше размеры (больше 400), то результат не возвращается. Попробуйте добавить ещё два параметра:

Результат работы приложения, когда запускается намерение кадрирования и итоговый результат. Желательно тренироваться на кошках.

Источник

Доступ к камере Android через Kivy

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

Я разрабатываю приложение для android, но используя python-kivy для пользовательского интерфейса,

что-нибудь будет действительно оценено,

4 ответа

У Kivy есть встроенная поддержка для вызова камеры. Проверьте эту страницу из нового руководства по программированию для основного поставщика или эту страницу из нового руководства по программированию для виджета uix. Теоретически, ядро ​​должно быть в состоянии адаптироваться между платформами, а виджет должен иметь возможность использовать камеру.

Вот мой пример кода, который работает на Android. Просто импортируйте этот файл https://github.com/kivy/plyer/blob/master/plyer/platforms/android/camera.py Кроме того, не забудьте добавить разрешения CAMERA для манифеста.

Это указывает на дискуссию, в которой можно найти пользовательскую реализацию. Он основан на автоматической загрузке PyJNIus класса камеры Android Android. Не пробовал себя, но вы можете попробовать.

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

Я не мог найти способ сделать работу класса Camera прямо из Kivy:

Наконец, я нашел решение выше, и после того, как я потратил некоторое время на его реализацию в своем приложении, оказалось, что мне не удалось вернуться в приложение после того, как сделана фотография — приложение было прекращено, поэтому я не мог пойти обратно в приложение, чтобы использовать картинку (я использовал Kivy Launcher). Совсем недавно я узнал, что этот способ доступа к Camera был оставлен (https://github.com/kivy/plyer/issues/16#issuecomment-54094174)

Но потом я нашел решение ниже и просто запустил пример кода, он выглядит так, что я смогу получить результаты, которые я хочу (просто нужно немного настроить, чтобы не сбой, когда камера андроида отменена/фотография не была сделана )

EDIT: появляется мое приложение было прекращено, потому что я не реализовал on_pause: return True в верхнем виджетах. Тем не менее, текст, приведенный выше, может быть полезен

Читайте также:  Ips или android что лучше

Источник

Connect your android phone camera to OpenCV – Python

Prerequisites: OpenCV

OpenCV is a huge open-source library for computer vision, machine learning, and image processing. OpenCV supports a wide variety of programming languages like Python, C++, Java, etc. It can process images and videos to identify objects, faces, or even the handwriting of a human.

Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning — Basic Level Course

Many a time, while doing Computer Vision or Image Processing using our PC’s webcam is not a very option. Maybe we want to increase the camera quality of our webcam, or we want to create some image processing applications which will use an android camera as the medium.

This article uses Windows to do this. But the basics of the code will be same on other Operating systems too.

Approach

  • Download and install IP Webcam application on your mobile phone.
  • Then make sure your PC and Phone both are connected to the same network. Open your IP Webcam application on your both, click “Start Server” (usually found at the bottom). This will open a camera on your Phone.
  • A URL is being displayed on the Phone screen, type the same URL on your PC browser, and under “Video renderer” Section, click on “Javascript”.

  • You can see video captured on your phone, which starts showing up on your browser. Now, what we will be going to do is, taking image data from the URL using the request module and convert this to an image frame using NumPy, and finally, start using our Android camera as a webcam in Python.
  • In the code:
    • Import module
    • Add URL displayed in your phone
    • Continuous fetch data from URL
    • Keep displaying this data collected
    • Close window

Источник

Доступ к Android-камере через Kivy

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

Я разрабатываю приложение для Android, но с помощью python-kivy для ИП

все будет действительно оценено,

5 ответов

Kivy имеет некоторую родную поддержку для вызова камеры. Проверьте эта страница из нового руководства по программированию для основного поставщика или эта страница из нового руководства по программированию для виджета uix. Теоретически ядро должно быть способно адаптироваться между платформами, и виджет должен иметь возможность использовать камеру.

вот мой пример кода, который работает на Android. Просто импортируйте этот файл https://github.com/kivy/plyer/blob/master/plyer/platforms/android/camera.py Кроме того, не забудьте добавить разрешения камеры для манифеста.

этой ссылки на диск, где можно найти пользовательскую реализацию. Он основан на автоматической упаковке PyJNIus класса камеры Android API. Я не пробовал, но ты можешь попробовать.

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

Я сделал экран и использовал функцию камеры plyer

Я также использовал некоторые другие импортные товары для экранов и ярлыки и всплывающие окна и т. д., которые вы можете определенно смотреть в зависимости от ваше требование

поскольку мне было трудно найти ответ, как использовать камеру на android, я подумал, что поделюсь своим путешествием к ответу, чтобы сэкономить время следующего человека.

Я не мог найти способ сделать рабочий класс камеры прямо из киви:

наконец, я нашел решение, опубликованное выше, и, потратив некоторое время на его реализацию в моем приложении, оказалось, что мне невозможно вернуться к приложение после фотосъемки-приложение было прекращено, поэтому я не мог вернуться в приложение, чтобы использовать изображение (я использовал Kivy Launcher). Совсем недавно я узнал, что этот способ доступа к камере был оставлен (https://github.com/kivy/plyer/issues/16#issuecomment-54094174)

Читайте также:  Прошивка ардуино через андроид

но затем я нашел решение ниже, и просто запустив пример кода, похоже, я смогу получить результаты, которые я хочу (просто нужно немного настроить, чтобы не врезаться, когда android камера отменена/фото не было сделано)

изменить: похоже, мое приложение было прекращено, потому что я не реализовал on_pause: return True в верхнем виджете. Тем не менее приведенный выше текст может оказаться полезным

Источник

Разработка приложения с использованием Python и OpenCV на Android устройстве

В это статье я хочу показать пример того, как андроид устройство можно использовать для разработки на таких языках программирования как python с библиотекой opencv в среде VSCode (будет использован code-server). В конце статьи приведено небольшое сравнение производительности Termux на моем Android устройстве и Raspberry Pi 3B.

Все действия описанные статье выполнялись на:
Huawei MediaPad M5 10.8
4GB ОЗУ, Hisilicon Kirin 960s, EMUI 9, без root

Для начала понадобится установить Termux (эмулятор терминала, предоставляющий возможности среды Linux), о приложении уже писали на habr.

Далее установим необходимые пакеты, а так же, для более быстрой настройки в дальнейшем, установим ssh сервер:

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

По умолчанию openssh прослушивает порт 8022, узнать ip адрес устройства можно с помощью команды ifconfig:

Подключаемся к Termux:

Установить opencv-python в собственном окружении Termux мне не удалось, поэтому воспользуемся трудами Andronix и запустим в Termux Ubuntu 18.04.

В официальном приложением Andronix можно найти команды для установки других дистрибутивов таких как Kali, Manjaro и т.д.
Дополнение 17.11.2020. Если во время установки появляется ошибка proot, читаем комментарий, спасибо @makaedgat.

Если все выполнилось успешно на экране появится

Установим пакеты необходимые для разработки на python3 с использованием opencv:

Установка занимает довольно много времени.

Теперь установим code-server

После установки code-server необходимо отредактировать файл конфигурации

По умолчанию code-server прослушивает адрес 127.0.0.1:8080, для обращения к code-server с других устройств необходимо поменять bind-addr на 0.0.0.0:8080. Присутствует возможность авторизации по паролю. Для задания пароля необходимо изменить значение password. Для отключения авторизации необходимо указать auth: none.

Все действия в статье выполняются в Ubuntu без графического интерфейса в результате чего нет возможности использовать imshow, но есть способ транслировать видео в браузер используя библиотеку flask и специальный MIME тип multipart.

Чтобы не отвлекаться на написание кода, используемого в статье для примера, его можно взять в моем github репозитории.

При первом открытии будет предложено установить расширение Python — соглашаемся.

Установим приложение для потоковой передачи с камеры устройства, например IP Webcam. Главное требование к приложению — возможность транслировать с камеры поток понятный opencv, например rtsp. Разрешение видео потока настраиваем в зависимости от производительности устройства. На моем самое оптимальное 1280×720.

Запускаем трансляцию видео в IP Webcam и проект:

В заключение хочу отметить, что при наличии современного Android устройства его можно использовать как альтернативу raspberry pi. Так, например, сняв ограничения энергопотребления домашний планшет можно использовать как полноценный arm64 мини пк, работающий в фоне постоянно. При этом производительность у Termux вполне высокая.

Разрешение видео 1280×720

Далее несколько дополнений которые не вошли в основную статью

Для того чтобы иметь возможность обмениваться файлами между termux и android необходимо в выполнить команду

Теперь локальная память устройства примонтирована в

Присутствует возможность компилировать приложения .net-core, но к сожалению без возможности отладки так как нет версии OmniSharp скомпилированной под arm.

в start_ubuntu.sh
ищем строчку
command+=» -b /data/data/com.termux/files/home:/root»
и исправляем ее на
command+=» -b /data/data/com.termux/files/home»

если ссылка не работает то руками качаем от сюда.

Источник

Оцените статью