Блог

Установка TensorFlow в Home Assistant

внимание данная статья актуальна только ниже версии HA 0.98.0, докерфайл и скрипт написан для дебиана, с версии 0.98.0 Хасбиан в докере перешёл на alpine

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

Что позволяет TensorFlow? - распознавать объекты с любой камеры и работать с ними через автоматизации. (какие автоматизации, да какие угодно, зависит от вашей фантазии)

Какие объекты? любые (людей, лица, зонтики, стаканы, собаки(породы собак), кошки, машины, и.т.д.)

Можно распознать в каком эмоциональном состоянии вы находитесь (грусть, печаль, радость) и передать это тег в HA и запилить какую-то автоматизацию, не грусти хозяин- я хоть и хочу "убить всех людей" -Бендер, но все будет хорошо, кожаный мешок :)

Есть возможность обучения, можно обучить на ваше лицо и создать свой faceID и по нему пилить автоматизации

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

Примерная логика того что будет ниже:

  • - настройка скрипта и его запуск внутри контейнера, после
  • - пишем свои Dockerfile и создаем образ и запускаем контейнер одной командой


как запустить на Synology? запустить можно точно! но нужно что то там дополнительно сделать, что читать тут

Алексей Леонтьев @c_ache успешно запустил на Synology, компиляция у него заняла порядка "8 часов" у кого вопросы по Synology можно Алексею их задать, у него в темном углу распознало Котэ как спит. Рыжего котэ не распознало, говорят у рыжих котэ нет души :)

Алексей закинул на github скомпилированный wheel к tensorflow для работы HA в докере на питоне 3.7.*

Данная инструкция 100% сработает для хасбиана в докере на Ubuntu 18.04.2 LTS и полноценной архитектуры процессора, проверено на macmini 2012, проц i5, Ubuntu 18.04.2 LTS при желании инструкцию можно адаптировать под малинку, изменения будут минимальные

Установка через скрипт и докерфайл + docker-compouse

Установка на видео всего что будет ниже, длительность 10 минут, установка проходит успешно, проверил несколько раз, ошибок нет.

действия на видео и ниже, если описать в двух шагах

загрузка файлов и их компиляция
то что скомпилировано закинуть в папку с правильной структурой

(вы это можете сделать вручную, а скрипт для облегчения!)

Установка

Зайти во внутрь контейнера, если у вас HA работает через docker-compose то команда:

docker-compose exec имя_контейнера bash

Если просто докер то:

docker exec -it имя_контейнера bash

Устанавливаем nano

apt-get update apt-get install -y nano

Создаем скрипт

nano start.sh

копируем код скрипта (код ниже), вносим свои изменения под вашу конфигурацию

выход с nano, ctrl+x

Собственно сам скрипт с комментариями, вам нужно изменить:

#1 CONFIG_DIR="/указать свою папку внутри контейнера, локальную"

и подставить ссылку на модель, #4 (и поменять название папки модели)

#1 Измените дериекторию папки конфиг в контейнере на свою CONFIG_DIR="/config" cd /tmp #2 Установка git, opencv и tensorflow версии 1.13.2 apt-get install -y --no-install-recommends git pip install --upgrade pip pip install tensorflow==1.13.2 pip install opencv-python==4.1.0.25 #3 Клонирование модели с GitHub git clone --depth 1 https://github.com/tensorflow/models.git tensorflow-models #4 Загрузка модели которые вы выбрали, путь подставьте свой если модель другая wget http://download.tensorflow.org/models/object_detection/faster_rcnn_inception_v2_coco_2018_01_28.tar.gz tar -xvzf faster_rcnn_inception_v2_coco_2018_01_28.tar.gz mkdir -p $/tensorflow/ mv -v /tmp/faster_rcnn_inception_v2_coco_2018_01_28/* $/tensorflow #5 Загрузка protobuf 3.4 curl -OL https://github.com/google/protobuf/releases/download/v3.4.0/protoc-3.4.0-linux-x86_64.zip unzip -a protoc-3.4.0-linux-x86_64.zip -d protobuf mv protobuf/bin /tmp/tensorflow-models/research #6 Сборка protobuf models cd /tmp/tensorflow-models/research/./bin/protoc object_detection/protos/*.proto --python_out=. #7 Копирование файлов по папкам mkdir -p $/tensorflow/object_detection touch $/tensorflow/object_detection/__init__.py mv -v object_detection/data $/tensorflow/object_detection mv -v object_detection/utils $/tensorflow/object_detection mv -v object_detection/protos $/tensorflow/object_detection #8 Создание папки для будущих картинок и видео записей mkdir $/video_record_ha #9 Очистка папки tmp rm -rf /tmp/*

Какую модель мне выбрать?

перевод с сайта ha (гугл переводчик):

"Компромисс между различными моделями точность против скорости. Пользователи с приличным процессором должны начать с модели faster_rcnn_inception_v2_coco. Если вы работаете на устройстве ARM, таком как Raspberry Pi, начните с модели ssd_mobilenet_v2_coco."

У меня macmini 2012 (ос ubantu) на i5 проце, я выбрал модель faster_rcnn_inception_v2_coco, и указал ссылку на нее для загрузки в скрипте пункт #4 и подставил названия папки faster_rcnn_inception_v2_coco_2018_01_28

добавляем флаг исполняемости

chmod ugo+x start.sh

Запуск скрипта

./start.sh

Docker-compose, создание папок

Если не установлен docker-compose то устанавливаем его:

sudo apt install docker-compose

Если у вас нет файла docker-compose.yml то

Создаем папку и называем ее Docker (чуть ниже будут картинки)

Создаем файлик docker-compose.yml

и копируем в него код ниже (не забудьте изменить путь до вашей папки конфиг)

version: '3' services: homeassistant: image: homeassistant_tf build: context:./ha args: - HA_VERS=latest volumes: - /home/anton/homeassistant/config:/config #укажите свой путь - /etc/localtime:/etc/localtime:ro devices: - /dev/ttyACM0:/dev/ttyACM0 restart: always network_mode: host

Создание докерфайла

далее создаем папку внутри Docker-->ha

создаем там Docker-->ha--->dockerfile, открываем dockerfile и прописываем в этом файле:

ARG HA_VERS FROM homeassistant/home-assistant:$ RUN set -x \ && pip install --upgrade pip \ && pip install tensorflow==1.13.2 \ && pip install opencv-python==4.1.0.25

пример: папка в домашней директории
пример: папку внутри Docker-->ha
пример: докерфайл в папке

Для чего данные команды?

opencv если не поставить то распознование будет работать но с малым разрешением и в логе будет ругань что не установлен OpenCV

tensorflow==1.13.2 Зачем его устанавливать? ведь он уже установлен в образе HA? дело в том что в образе ха версия tensorflow==1.4.0 и она сыпет ошибки в логи, чтобы ошибки убрать откатываем версию на 1.13.2

p.s. ещё была версия 1.5.0. которая работало стабильно и без ошибок в HA, но ее временно убрали и сейчас она недоступна

Собственно если это не сделать то получим такие ошибки:

Настройка конфига

Добавляем в конфиг 2-а кода ниже, 1 код на 1 строку

и указываем внешнею папку через whitelist_external_dirs (подробно почитать можно по ссылке)

homeassistant: whitelist_external_dirs: #- '/home' вариант для venv python - '/config' #вариант для докера

# пример конфигурации для tensorflow image_processing: - platform: tensorflow #scan_interval: 10000 source: - entity_id: camera.door # - entity_id: camera.door2 (если у вас несколько камер то перечисляем их) file_out: - "/config/video record ha/{{ camera_entity.split('.')[1] }}_latest.jpg" #указать путь сохранения файла - "/config/video record ha/{{ camera_entity.split('.')[1] }}_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg" model: graph: /config/tensorflow/frozen_inference_graph.pb #указать путь модели которые вы решили использовать categories: - category: person #катеогрия perosn распознование людей area: # Исключить верхние "top" 10% изображения top: 0.1 - umbrella #(перечесление категорий для распознания, где взять полный список категорий? ответ ниже) - cup - knife - cat - dog

нажимаем проверка конфигурации, если все ок то перезагружаем, если ругается то значит неверно указали путь до модели, тогда внимательно смотреть там где прописано в конфиге model, graph

исправить путь, нажать проверка, если все ок то:

Запуск

Открываем portainer и удаляем контейнер ha

заходим в каталог с докерфайлом и вводим команду на создание нового образа и запуск контейнера через докер-compose

docker-compose up -d --build

на этом установка завершена, мы получили расширенный образ докера с opencv и tensorflow==1.13.2

При последующих обновлениях ХА скрипт выполнять уже не требуется, нужно будет только запустить

docker-compose up -d --build

Список категорий для распознавания смотреть в этом файлике:

Возможные Ошибки и способы их решения

1. Ошибка сохранения файла, выглядит примерно так:

```Can’t write ‘/config/tmp/dafang1_20180614-232044.jpg’, no access to path```

то проверяем внимательно путь который указали и нужно указать в самом начале конфига под homeassistant, whitelist_external_dirs

Внимание варианте для докера созданная папка должна находится внутри папки config, в варианте venv где угодно.

дополнительно про whitelist_external_dirs можно почитать ветку ha

2. Если в логе ругается что не может получить изображение с камеры и что-то там про SSL443 при этом в конфиге entity_id точно название верное с камерой, то переписать код для камеры (актуально для Dafang)

код который выдавал ошибку с компонентом TensorFlow:

camera: - platform: generic name: Door username: root password: ismart12 authentication: basic still_image_url: https://dafang/cgi-bin/currentpic.cgi stream_source: rtsp://192.168.1.246:8554/unicast verify_ssl: false scan_interval: 5

Переписываем так чтобы компонент TensorFlow не ругался и мог получить изображение с камеры:

camera: - platform: generic name: Door still_image_url: https://root:ismart12@192.168.1.246/cgi-bin/currentpic.cgi stream_source: rtsp://192.168.1.246:8554/unicast verify_ssl: false

3. В логе HA ругается на то что модель не скомпилирована

значит пункт 6 в скрипте не выполнен, а именно или папка не загрузилась или файлы не скомпилировались, решение: пункт 6 выполнить вручную

Облачное распознование

Распознавание можно сделать также через облачный сервис амазона

там ничего не нужно копировать и компилировать, что нужно будет сделать (совсем вкратце):

зарегестрироваться на сайте aws.amazon
загрузить кастом компонент с гитхаба
прописать в конфиг HA

С TensorFlow будет посложней (по установке), но, все ваши фото останутся на локальной машине и не улетят в облако амазона

Что дальше?

Хочу загрузить свои датасеты на лицо, чтобы система могла меня распознать, как это сделаю, дополню блог-статью

из того что начал читать выяснилось что требуется версия > = 1.14.0 с которой HA сыпет ошибки НО работает

по идее можно поставить 1.14.0 скормить свои датасеты ей и откатится на 1.13.2 но это все нужно будет тестировать, как оно пока не известно

Спасибо за внимание, есть вопросы? пишите комментарии, но лучше в в телеграмм канал Home Assistant


Антон, спасибо тебе большое! Жду продолжения)

Честно говоря не углублялся в тематику, но созрел вопрос - почему нельзя взять уже готовый контейнер tensorflow/tensorflow?

тензор флоф в сам ХА образ докера уже встроен, но там 2-е проблемы есть, поэтому этот скрипт их решал и самое главное, что копировать в любом случае придется 1 раз файлы во внутрь конфига ХА, чтобы тензорфлоф заработал, это или делать руками ну или скрипт сделает на автомате (правда он для дебиана был создан) под алпайн я его не переделывал, так как уже все скопировано у меня и заново скрипт не нужно запускать, а ну и если архитектура другая то их нужно ещё скомпилить будет. На самом деле не сложно но запутано когда 1-раз делаешь

Добрый день!
У меня стоит Hassio, при заходе в контейнер - docker exec -it имя_контейнера bash, я не могу выполнять команды apt-get


pip install opencv-python==4.1.0.25

Тоже не работает внутри контейнера, пишет ошибку что версия не найдена.

Подскажите, как подружить, спасибо!



Или нужно рядом докер tensorflow/tensorflow развернуть? Как тогда их подружить с докером HA?

https://sprut.ai/static/media/cache/00/53/11/5/3517049/56203/1000x_image.jpeg?1587247116" alt="1000x_image.jpeg?1587247116" />
Сколько нужно оперативной памяти для мгновенного распознавания нескольких десятков объектов?

Вернуться назад
Вернуться назад