Протестирована работа на МиниПК: https://alii.pub/75csno?erid=2SDnjdoJ2kU
С Google Coral: https://alii.pub/75cs5e?erid=2SDnjek8uDN
Давайте начнём с предисловия:
Frigate это приложение разработанное в первую очередь специально для Home Assistant, после чего сильно разросшееся и ставшее полноценным отдельным продуктом.
Но так-же самый популярный способ установки Home Assistant на мой взгляд – это установка его на MiniPC под управлением Proxmox. И вот в одну из виртуальных машин уже устанавливается Home Assistant OS (HAOS).
Такой способ Home Assistant удобен тем, что Вы одной командой устанавливаете его на виртуальную машину. И у Вас остаётся возможность еще виртуальные машины поднимать в Proxmox.
Но в HAOS если брать Frigate, тоже есть некоторые неудобства. Например чтоб фригат установить в HAOS, надо файл конфига frigate.yaml держать у себя в корне сервера Home Assistant, что не очень удобно.
Второе неудобство, это то, что чаще всего используются minipc на процессорах intel. У Intel есть своя графика которая изначально в HAOS не прокинута и во время запуска frigate, процессор начинает очень сильно грузиться, так как обработка видео идёт непосредственно процессором.
Чтоб процессор разгрузить, нужно добавить одну строчку в конфиг Frigate, тогда видео начнёт обрабатываться видео ядром процессора и нагрузка на процессор существенно упадёт. Строчка выглядит так:
ffmpeg:
hwaccel_args: preset-vaapi
Но добавив просто эту строчку у Вас ничего не заработает именно в HAOS системе. Вам нужно до этой виртуалки пробросить еще видео. Видео пробрасывается как шина PCIe и выглядит проброс на процессоре N5105 вот так:
Обратите внимание на все галочки в Primary GPU и All Functions. Ну и тут Device: 0000:00:02.0 – это и есть видео ядро процессора intel:
И вот только после проброса графики, процессор перестанет грузиться.
Но это касается только HAOS в виртуалке и Frigate установленный в HAOS.
И вот теперь к минусу этого способа. А минус тут в том, что при таком пробросе видео в HAOS, он “намертво” забирается виртуальной машиной HAOS и больше ни чем не сможет быть использован. Из-за этого например перестанет работать консольный вход в любую виртуальную машину в proxmox через web интерфейс.
И из-за этого мы плавно переходим к тому, что Frigate имя proxmox и HAOS лучше устанавливать в отдельный контейнер на сам proxmox. Таким образом, во первых нам не надо будет прокидывать видео до этого контейнера, так как контейнер использует все что есть локально на самом сервере proxmox. Во вторых так не будет видеокарта занята “намертво” и сможет использоваться и в других задачах.
Ну а так как frigate дружит с Home Assistasnt только по mqtt, то frigate можно держать где угодно, главное чтоб он и HA были доступны по сети.
Установка Frigate в LXC контейнер на сервер Porxmox:
Установка Frigate на proxmox такая-же лёгкая как и установка HAOS (Home Assistant Operation System) в proxmox. Все это выполняется буквально одной командой:
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/frigate.sh)"
После ввода этой команды в консоли proxmox, начнётся установка Frigate в LXC контейнер. Во время установки спросит пару вопросов, на которые мы соглашаемся и дожидаемся окончания установки.
Установка долгая, у меня на процессоре N5095 заняло порядка 30 минут. Такая установка долгая из-за того, что этот контейнер насколько я понял собирается из исходников конкретно под вас.
После установки у вас в Proxmox web интерфейсе появится контейнер LXC Frigate:
Контейнер кстати требует для установки 4гб оперативной памяти и 20 гб свободного места на диске.
После установки Frigate в LXC контейнер, конфигом мы сможем пользоваться только из web интерфейса управления самого Frigate. Но я думаю вы и так это там и делали, просто я привык иначе.
Теперь Frigate с видеоядром работает хорошо и добавив эту строчку в конфиг:
ffmpeg:
hwaccel_args: preset-vaapi
Вы заметите как сильно у Вас разгрузится процессор. Если конечно у Вас еще настроены параметры, чтоб обнаружение объектов производилось не процессором, а чем-то другим.
Разгрузить процессор можно отдав вычисление объектов на NPU процессор, например на Google Coral: https://alii.pub/75cs5e?erid=2SDnjek8uDN
Настройки Google Coral на LXC контейнере Frigate:
Просто так Google coral не начнёт работать в Frigate установленном на porxmox в LXC контейнер, потому что на google coral по умолчанию нет драйверов на сервере Proxmox.
С одной стороны можно поставить драйвер, но мне кажется это не верный способ, так как в самом LXC контейнере есть уже все нужное для работы с Google Coral. По этому достаточно его будет пробросить в контейнер.
Чтоб Google Coral пробросить в контейнер LXC Frigate, нужно сначала узнать адрес его. (я буду показывать на USB версии Google Coral, так как пробовал с ней).
Вводим команду и смотрим на результат:
lsusb
Этот Вывод нам покажет что Google Inc. у нас находится по адресу Bus 002 Device 004 (USB шина 2 девайс 4).
Это сопоставимо такому адресу:
/dev/bus/usb/002/004
По этому адресу можно даже перейти но нам нужно его прописать в параметры LXC контейнера.
По этому идём в конфиг LXC контейнера:
nano /etc/pve/nodes/pve/lxc/101.conf
Где 101.conf – это конфиг устройства 101 в poxmox (он может отличаться, нужно смотреть по номеру виртуалки в porxmox).
Коulf откроете конфиг, нужно под строкой:
lxc.cgroup2.devices.allow: c 189:* rwm
Прописать строчку проброса google coral, которая выглядит вот так:
lxc.mount.entry: /dev/bus/usb/002/004 dev/bus/usb/002/004 none bind,optional,create=file
где: /dev/bus/usb/002/004 dev/bus/usb/002/004
это какое устройство и куда пробрасывается в контейнере, по этому указывается 2 раза.
И выглядит это все вместе вот так:
После этого сохраняем конфиг и перезапускаем frigate. И у Вас LXC контейнер Frigate после этого сможет работать с Google Coral.
А как Google Coral описать уже в конфиге Frigate я описывал в этой статье:
Вывод:
В этой статье я показал как установить Frigate в LXC контейнер сервера Porxmox.
Этот вариант во первых очень простой, так как устанавливается одной командой.
Во вторых не блокирует видеоядро процессора.
В третьих будет работать более правильно, так как собирается из исходников.
В четвертых не мешает другим виртуалкам, а стоит себе обособлено.
Я проверил его работу и с google coral и на процессоре, и на openvino, которое надо описать в дальнейшем.
В общем рекомендую именно этот способ установки Frigate на сервер proxmox, он можно сказать православный.