Серия «HomeLab»

33

Подключение Frigate с использованием Coral TPU в HA

В предыдущем посте внимательный @Machaeon, заметил у меня на фотке Coral USB Accelerator и спросил, как он. К тому времени я еще не успел его настроить, поэтому пообещал написать пост как разберусь. Не то что бы я полностью разобрался, но постараюсь в этой статье рассказать

- что такое система домашнего видеонаблюдения, какие они бывают
- как установить Frigate и подключить к нему Coral TPU
- как настроить распознавание лиц
- какие ошибки я сделал в процессе настройки своей системы видеонаблюдения

Первые ошибки.
Когда мы говорим про умный дом, часто имеем в виду лампочки, розетки или голосовых ассистентов. Но на самом деле важнейший элемент - это видеонаблюдение и аналитика. Первым моим решением (ошибочным) было купить камеру Aqara Camera E1.

Большую часть времени устройство провело в таком виде.

Большую часть времени устройство провело в таком виде.

Минусы aqara стали мне очевидны только после покупки:
- нет возможности подключения по кабелю (видеосигнал через вайфай не самое надежное решение)
- нет нормальной интеграции с Home Assistant так как RTSP поток на ней не доступен (на самом деле после пары часов плясок с бубном и чатом гпт через go2rtc/HomeBridge мне удалось заставить HA увидеть камеру, но это был опыт который я не могу рекомендовать начинающим)
- большинство интересных функций вроде обнаружения лиц, животных, пожара, машины, посылки - убрано в подписку HomeGuardian за 9.99 евро в месяц.

Мне хотелось другого:

  • хранить записи локально, на NAS (зря его что ли покупал)

  • получать уведомления о реальном движении, а не «порхающей мухи»

  • интегрировать камеры в Home Assistant

  • определять не просто событие "человек в комнате" - но и распознавать этого человека.

Решением стал связанный тандем: Frigate + Coral TPU.

Frigate — это NVR (система записи и аналитики IP-камер) с открытым исходным кодом, созданная специально под Home Assistant.

Основные возможности:

- подключение камер по RTSP,

- детекция объектов (люди, машины, животные),

- хранение записей только по событиям,

- интеграция через MQTT и Home Assistant API,

- поддержка аппаратных ускорителей (Coral TPU, GPU).

Coral Edge TPU — это аппаратный ускоритель от Google, оптимизированный для TensorFlow Lite моделей.

Выполняет до 4 трлн операций в секунду при очень низком энергопотреблении.

Да, вместо Frigate можно использовать MotionEye, Shinobi или Blue Iris, но в первом нет АИ, второй показался сложным в настройке, а третий вариант платновый и под винду - а я же энтузиаст докера уже третий месяц.

Вместо Coral TPU я тоже мог использовать аналоги - подключить AORUS Gaming Box RTX 3080 или вообще использовать CPU. Но Видеокарта жрет существенно больше энергии и шумит, а проц не очень тянет четыре камеры - а я хочу со временем сделать еще парочку - на парковку и с балкона.

Установка.

Сам процесс установки оказался достаточно простым. Я напомню что использую виртуализатор Proxmox VE.

  1. Создаем новую виртуалку. Я где то читал что CORAL может не работать на 13 дебиане и советы ставить на 12 - но забегая вперед скажу что это не правда, все работает хорошо. Если совсем лень, то можно воспользоваться готовым комьюнити скриптом по разворачиванию LXC пакета с Frigate, но мне показалось что проще пробрасывать физические устройства в виртуалку, а не в контейнер, поэтому я ставил фригейт сам.

  2. Ставим собственно фригейт

sudo apt update

sudo apt install -y curl ca-certificates gnupg udev

# Docker

curl -fsSL https://get.docker.com | sh

sudo usermod -aG docker $USER

newgrp docker

Начинаем с докера. Потом в Проксмоксе прокидываем наш usb порт с коралом. Я советую прокинуть именно весь порт, а не отдельное устройство, меньше ебли с тем что виртуалка не увидит свисток.

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

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

Командой lsusb проверяем что корал виден, создаем каталоги под фригейт, монтируем NAS каталоги для хранения видео, создаем docker-compose.yml

version: "3.9"

services:

frigate:

container_name: frigate

image: ghcr.io/blakeblackshear/frigate:stable

restart: unless-stopped

privileged: true

shm_size: "512mb"

ports:

- "5000:5000" # Web UI

- "8554:8554" # RTSP (go2rtc)

- "8555:8555/tcp" # WebRTC

- "8555:8555/udp"

devices:

- /dev/bus/usb/004/004:/dev/bus/usb/004/004

device_cgroup_rules:

- 'c 189:* rmw'

volumes:

- /etc/localtime:/etc/localtime:ro

- /opt/frigate/config:/config

- /mnt/frigate/Frigate:/media/frigate

И в файл конфигурации фригейта добавляем настройки и наши камеры.

# === указываем брокера данных для связи с Home Assistant ===


mqtt:

host: 192.168.0.* # адрес mqtt сервера, у меня он связан с Home Assistant

port: 1883

user: frigate # имя пользователя в mqtt

password: *** # пароль пользователя в mqtt

# === EdgeTPU (Coral USB) ===

detectors:

coral:

type: edgetpu

device: usb

# === Настройки записи ===

record:

enabled: true

retain:

days: 3

mode: motion

alerts:

retain:

days: 30

detections:

retain:

days: 30

snapshots:

enabled: true

retain:

default: 30

# === Настройки распознавания ===

detect:

enabled: true

version: 0.16-0

semantic_search:

enabled: true

model_size: small

face_recognition:

enabled: true

unknown_score: 0.6

recognition_threshold: 0.8

model_size: small

blur_confidence_filter: true # фильтровать размытые лица

lpr:

enabled: false

classification:

bird:

enabled: false

# === База и логирование ===

database:

path: /media/frigate/frigate.db

logger:

default: info

# === Камеры ===, указываем каждую камеру отдельно

cameras:

Имякамеры:

enabled: true

ffmpeg:

inputs:

- path: rtsp://имяпользователя:пароль@айпиадрескамеры:554/h264Preview_01_sub

roles: [detect]

input_args: [-rtsp_transport, tcp]

- path:

rtsp://имяпользователя:пароль@айпиадрескамеры/h264Preview_01_main

roles: [record]

input_args: [-rtsp_transport, tcp]

detect:

enabled: true

width: 640

height: 360

fps: 7

record:

enabled: true

retain:

days: 3

mode: all

Почти готово, вы великолепны. Осталось добавить интеграцию фригейт. Идем в HACS (надеюсь у вас он уже установлен!), затем подключить ее в разделе Настройки-Интеграции.

Отлично, ваши камеры видны в frigate и проброшены в HA по желанию.

Отлично, ваши камеры видны в frigate и проброшены в HA по желанию.


Обучение.

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

  1. Идем в Настройки - Обогащение (Settings - Enrichments)
    2. Добавляем лицо через Add Face (лучше скинуть селфи фронталки с телефона, можно парочку).
    3. Активно ходим вокруг камеры, что бы она детектила лицо.
    4. Затем заходите в Face Library - Train и вручную размечаете фотографии.
    5. Указываем в конфиге frigate.yml настройки точности. Тут можно поиграть с вариантами в зависимости от освещенности, типа камеры, размещения.
    6. В принципе можно еще поиграть с настройками точности

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

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

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

Спасибо что дочитали, надеюсь кому то этот пост поможет избежать тех граблей, что были пройдены мной)

Показать полностью 5
34

HomeLab. Выбор основы

Если бы пол года назад, когда я ставил свою первую операционку на домашний сервер я бы прочитал этот пост - я бы принял иное решение и сейчас мой сервер выглядел по другому. С другой стороны - ничего принципиально нового в посте нет, вся информация давно есть на ютубе, реддите и в чате гпт - нужно было просто спросить. Разные люди по разному воспринимают понятие "домашний сервер" - для кого-то это это коробочка NAS, для кого-то просто виндовый компьютер на антресоли. В рамках этого поста я под домашним сервером буду иметь в ввиду физическую машину с операционной системой линукс. И поговорим о том, какой же дистрибутив можно поставить и в чем отличие.

Очень условно я классифицировал серверные операционные системы исходя из уровня подготовки и целей - и у меня получилось три типа.
- Простые = self-hosting + NAS + лёгкие UI
- Средние = виртуализация + более гибкая настройка
- Продвинутые = оркестрация, облачные сценарии, "мини-дата-центр"

Простые решения (для начинающих / low-entry).
Как следует из названия - это самые простые варианты, они (почти) не требуют знания линукс, имеют удобный веб интерфейс и возможность установки сервисов в несколько кликов. На рынке представлено множество таких решений, самые известные это: YunoHOST, CasaOS, Cosmos Cloud, Umbrel, Tipi, Sandstorm, unraid(!платновое), FreedomBox, cloudron, EmbassyOS

Каталог приложений yunohost.

Каталог приложений yunohost.

Отличия у них минимальны (например у embassy и FreedomBox чуть больше фокуса на приватность, интерфейс YunoHOST немного устарел - но зато самый большой встроенный магазин приложений), а общее у них одно - минимальный порог входа. Если вы новичок без технического бекграунда - с помощью этих решений вы легко можете выстроить всю инфраструктуру.

Интерфейс Космос Клауд. Можно потыкать тут <!--noindex--><a href="https://pikabu.ru/story/homelab_vyibor_osnovyi_13160579?u=https%3A%2F%2Fcosmos-cloud.io%2Fcosmos-ui%2F&t=https%3A%2F%2Fcosmos-cloud.io%2Fcosmos-ui%2F&h=677a8adc6ff6ba3ece259216ef837c2f4d47b74a" title="https://cosmos-cloud.io/cosmos-ui/" target="_blank" rel="nofollow noopener">https://cosmos-cloud.io/cosmos-ui/</a><!--/noindex-->

Интерфейс Космос Клауд. Можно потыкать тут https://cosmos-cloud.io/cosmos-ui/

Некоторые относят к операционным системам этого уровня и OpenMediaVault (OMV) с TrueNAS SCALE (и я купился на это, первая моя операционка как раз именно OMV) - но я с ними не согласен - это скорее операционка именно для NAS - если вы хотите ставить дополнительные сервисы - это возможно, но не интуитивно.

Вот зашел в OMV - а он просит обновится. Это он умеет...

Вот зашел в OMV - а он просит обновится. Это он умеет...

В общем для начинающего, или для "поставил, настроил и забыл" - я бы советовал взять в качестве ОС что то из вышеперечисленного.

А если по%баться? или средний уровень (для энтузиастов / medium-entry)
Вторая группа операционных систем несколько сложнее, требует базового понимания Linux, сетей, Docker, но и дают больше контроля. Я бы посоветовал эту группу себе энтузиастам, которым процесс важнее чем результат.
К этой группе я отношу Proxmox VE, XCP-ng, Harvester, NixOS, DietPi (тут я сразу отмечу, что сам тестировал и работал только с Proxmox VE, про остальное только читал. Поэтому буду рассказывать на его примере).
У проксмокса нет готового каталога приложений, которые можно поставить в один клик (хотя есть отличный каталог пользовательских скриптов установки, 300+ проверенных сервисов, которые устанавливаются через одну строчку) - это скорее универсальный хост для виртуализации. Зато поднять виртуальную машину с нужными параметрами, изменять эти параметры прям на ходу или использовать никогда не было так просто. Еще у проксмокса есть интересный формат контейнеров - LXC, я это воспринимаю как нечто среднее между виртуалкой и контейнером. Используется общее ядро, а контейнеры используют изолированное окружения. В результате эти контейнеры потребляют меньше ресурсов, чем виртуалка - но обладают большей степенью изолированности, чем докер контейнеры.

UI проксмокса чуть сложнее чем интерфесы ОС первого типа - но все еще существенно проще консоли, на мой взгляд.

UI проксмокса чуть сложнее чем интерфесы ОС первого типа - но все еще существенно проще консоли, на мой взгляд.

В общем если бы я начинал сейчас - вместо OMV я бы поставил себе два Проксмокса.

Или три? Продвинутые решения (для экспертов / high-entry)

Последняя группа - это решения для профессионалов. Я не пробовал ничего из этого (пока?), поэтому коротко опишу как я вижу это со стороны и буду рад если кто то расскажет подробней.

  • VMware ESXi – классика корпоративной виртуализации (сейчас менее актуальна из-за Broadcom).

  • Kubernetes (k3s, MicroK8s, TalosOS) – для масштабирования контейнеров, требует глубоких знаний.

  • OpenShift OKD – корпоративный Kubernetes с дополнительным уровнем абстракции.

  • OpenStack – облачная платформа IaaS (виртуальные машины, сети, сторидж).

  • Nomad (от HashiCorp) – оркестрация контейнеров и VM, альтернатива Kubernetes.

  • Bare-metal Linux (Arch, Debian, Ubuntu, Gentoo) – "чистая" установка и ручная настройка всех сервисов.

  • FreeBSD / NetBSD / OpenBSD – более редкие, но мощные для сетевых и серверных задач.

Кажется что это решения, для маленького дата-центра дома. Явно не для всех - но если вы, например, делаете свой стартап, и хотите хостить его из дома - то это ваш выбор. Чат гпт подсказывает мне, что если я поставлю себе третий сервер - я смогу сделать кластер, который будет автоматически масштабироваться под нагрузку и работать даже в случае выхода из строя одной машины. Но я честно пока в душе не знаю, зачем мне это (*но очень надо)

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

Показать полностью 4
Отличная работа, все прочитано!