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

Делать демонстрации машинного обучения скучно по сравнению с обучением и оптимизацией.

Для одного из моих проектов 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. Надеюсь, вам понравился хак! Хорошего тебе дня.