Профессиональный взлом для ваших демонстраций машинного обучения
Делать демонстрации машинного обучения скучно по сравнению с обучением и оптимизацией.
Для одного из моих проектов CV мне пришлось использовать портативную веб-камеру USB вместо встроенной камеры моего ноутбука. Я использовал cv2.VideoCapture
для получения кадров с камеры ноутбука и работал отлично. Когда я попытался использовать USB-камеру с OpenCV, она не смогла обнаружить камеру даже после изменения индекса в cv2.VideoCapture( <index> )
.
Проанализировав ряд вопросов и ответов SO, я почувствовал, что не существует «чистого» способа подключения USB-камеры к OpenCV. Затем я попытался найти способы использовать свой мобильный телефон в качестве портативной камеры и каким-то образом передавать изображения на свой ноутбук (возможно, с помощью WIFI или Bluetooth), и я нашел этот отличный ответ на Quora,
Взломать 1
Взлом простой,
Используйте приложение IP-веб-камеры для потоковой передачи изображения на локальный сервер (запущенное приложением), а затем сценарий Python извлекает изображение с локального сервера для его отображения в приложении Streamlit.
Сначала установите Приложение IP Webcam из магазина Google Play и выберите необходимые настройки для потоковой передачи видео (разрешение, камера, FPS и т. д.). В правом верхнем углу коснитесь меню и выберите Запустить сервер.
Приложение запустит сервер по указанному адресу в формате
http:<network_ip_address>:<port>
Как только вы перейдете по указанному выше URL-адресу в браузере вашего компьютера, вы обнаружите эту страницу,
Нажмите на кнопки «Сделать фото» или «Сделать сфокусированное фото», и он захватит текущий кадр с камеры мобильного телефона и сохранит его на http:<network_ip_address>:<port>/photo.jpg
. Мы можем сделать GET
запрос к этому URL и получить кадр с камеры. На изображении ниже мы используем Postman для выполнения такого запроса.
Приложение Стримлит
Поскольку теперь у нас есть способ получать кадры с камеры, мы сосредоточимся на создании приложения Streamlit. Streamlit — очень полезный фреймворк, который может помочь вам создавать UI-приложения на Python и может использоваться для создания быстрых демонстраций или интерфейсов.
Начнем с создания пустого контейнера изображений, в котором будут храниться кадры, полученные с сервера.
Далее мы создадим цикл, который запрашивает кадр с сервера и отображает его в frame_window
.
Мы можем запустить это приложение, используя streamlit run main.py
, где main.py
— это имя вашего скрипта.
Мы также можем добавить кнопку «Сделать снимок», которая заморозит камеру и сохранит кадр.
Взлом 2
Второй взлом похож на первый, но мы используем другую функцию, доступную с помощью IP Webcam. Перейдите на страницу http:<network_ip_address>:<port>
, перейдите в раздел Другие способы просмотра › Дополнительно и прокрутите вниз до раздела Дополнительно.
Обратите внимание на первый URL-адрес, который соответствует камере MJPEG. Быстрый поиск в Google показывает нам, что
URL-адрес MJPEG -> URL-адрес состоит из IP-адреса камеры, за которым следует обозначение ресурса, например video.mjpeg или mjpg.cgi, как определено поставщиком камеры.
Далее нам нужно прочитать видеопоток с этого URL. Этот ответ на SO дает нам четкий способ сделать это,
В коде
Запустите код, и вы заметите разницу!
Вот и все!
Это было короткое воскресное чтение, которое может помочь привнести что-то новое в Streamlit. Надеюсь, вам понравился хак! Хорошего тебе дня.