В целом, уже получается, что нужно бы вернуться в рабочее и продуктивное русло, но что-то не случается, все еще. Тем не менее, мозг уже начинает намекать на то, что пора начинать писать то, что никому и никогда не пригодится.
Сегодня такой темой окажется, пожалуй, DeepStack и прочие прелести распознования картинок, которые можно натянуть на глобус, а точнее на HomeAssisstant.
Попытки распознования картинок уже были использованы в предыдущих итерация внедрения искусственной глупости, но не получили широкой известности в узких стенах квартир, однако в этот раз получилось решение, которое работает, а так же, чисто гипотетически, помогает.
Итак, первое, с чего все начиналось – это было YOLO. Вроде как работало, но магии не получалось – процессилось долго, неуклюже, никакого API, да и сценарии использования – только в оффлайне перебирать фоточки, что тоже, возможно, неплохо, но все же.
Поигравшись, посмотрев, что, оно и правда что-то умеет – идея ушла в дальний ящик на, где-то, год. Идея вернулась в голову, когда появились дешевые ESP32-CAM в арсенале – в этот раз получилось сделать так, чтобы в относительном реалтайме получалась картинка, и, ее, неожиданно, появилась идея обрабатывать это и распозновать предметы.
В этот раз было выбрано решение, которые называется Deepstack. В целом, задачи стояли такие – чтобы к этому можно было подключиться через API и попробовать обрабатывать катинки в режиме клиент-сервера, во-вторых, хотелось подсобрать статистику посещения различных помещений.
Как некоторый механизм упрощения развертывания и понимания механизма работы заодно развернул веб-морду, сделанную миром открытого исходного кода.
version: '3.3'
services:
deepstack:
container_name: deepstack
image: deepquestai/deepstack:latest
volumes:
- /docker/deepstack:/datastore
ports:
- 5000:5000
restart: always
environment:
- VISION-FACE=True
- VISION-DETECTION=True
networks:
deepstack:
ipv4_address: 172.50.0.3
deepstackui:
container_name: deepstack_ui
image: robmarkcole/deepstack-ui:latest
ports:
- 8501:8501
restart: always
environment:
- DEEPSTACK_TIMEOUT=100
- DEEPSTACK_IP=172.50.0.3
- DEEPSTACK_PORT=5000
networks:
deepstack:
ipv4_address: 172.50.0.2
networks:
deepstack:
driver: bridge
ipam:
config:
- subnet: 172.50.0.0/16
Немаловажной составляющей всего этого бардака является то, что результаты можно запечатлить и сохранить. Среди всего прочего можно отметить вполне себе сносное определение того, что видит камера.
Например, можно считать количество людей в комнатах. Очевидно, что для того, чтобы результат был бы похож на результат – нужно настроить пределы точности, разобраться со светом, правильно поставить камеры, но с другой стороны – и так ничего. Как PoC.
Как трепетный читатель может видеть – в данном примере продолжает использоваться Grafana как некоторый способ визуализации данных. Вынужденно соглашусь с мнением тех самых хомяков – это и правда, удобно. И даже наглядно. Нужно будет собрать все имеющиеся данные в рамках одного дашборда, который красиво представит все данные.
Среди всего прочего возникла потребность весь этот балаган кроме того, что скрестить, так еще и, допустим, закрепить таким образом, чтобы это были не просто провода растянутые по всей кваритре, а еще и некоторая эстетика.
Заодно освоено использование таких магических инструментов Автоматизированного Проектирования как Autocad Fusion. Прямо чортова магия.
Думаю, что остальные детали этого удивительного приключения раскрою позже, но тем не менее выводом из радостного похода на две веселые буквы (CV) будет – можно. Можно сделать дешево, можно сделать опенсорсно. Вопрос только один – а нужно ли?