最近、強盗が多発してるため、監視カメラ増強および増強したことによる録画の監視管理が大変になってきたので、AIを利用して誤認検知を減らし、各種センサーとも統合的に運用して管理をしやすくできないか?と思い立った。
というわけで、とりあえず、手持ちの位置情報記録サーバとして使っていたGMKtec N100 PCにDocker+HomeAssistant+frigateをインストールしてみることにした。
AIを使うのも初めてだし、よくわからず。Coral USB Acceleratorと組み合わせると非力なPCでもそこそこ使えるようになるということで、Coral USB Acceleratorも購入。
実際にどの程度使えるかはテストしながらやっていくが、とりあえずインストールでつまづいたところを羅列。ざっとなので抜けてるところは勘弁。
ハードウェア環境:
・GMKtec N100 PC (Amazonでセールで購入。2万円弱くらい)
・Coral USB Accelerator (RSコンポーネンツで購入。1万円くらい)
ソフトウェア環境:
Ubuntu Server 24.04 のミニマムインストール
手順はほぼ、以下のサイトの情報からです。感謝いたします。
元SEの忘備録五十代からの「・・・・・」
https://www.yo7612.com/archives/8905#toc16
上記のアーカイブ
https://web.archive.org/web/20240226170524/https://www.yo7612.com/archives/8905#toc16
ほぼ、上記サイトのまんまでN100でもインストールまでは行けました。
ハマった点を先に書くと、
・Home Assistant で frigateを統合する時にMQTTとつなぐ時のURL欄にN100サーバのIPアドレスとポート5000番を入れても「Unable to connect to Frigate.」と出て統合できないこと。5日くらい試行錯誤しました。
結論としては上記サイトも含めた各所のfrigateインストールの解説にあるdocker-compose.yamlの冒頭に記載される
version: 3
とかのバージョン表記が問題だった模様。この行を削除してfrigateをインストールしただけで当方の環境ではHome Assistantにfrigateを統合する時のURL記入→送信にて「Unable to connect to Frigate.」のエラーが出なくなって統合できました(その後のカメラやffmpegなど他の設定は個々の環境に合わせて微調整が必要です)。
これが原因と言うのがどこのサイトを探してもなかなか出て来ず、dockerではdocker-compose.yamlへの表記が非推奨になったという情報を見つけて試したらたまたまうまく行ったというだけです。
解説してるサイトの方が悪いとかではなく、情報の掲載時点からバージョンアップで使用が変わってDockerではversion:の記載が非推奨に変わったということです。Linux系ではLinux登場最初期からよくあること、ありまくりなことなだけです。

さて、ここから当方でうまく行った時の手順です(2024年11月11日時点)。
- ubuntu serverのインストール
適当にどうぞ。当方はミニマムインストールでSSHをインストールして、IPアドレスは固定でインストールしました。当方の知識不足があり、このserverのインストール時点でDockerやMosquittoを入れるとうまく設定できませんでした。勉強してもいいのだが、ちょっと最近多忙なので(言い訳)。Word Pressすらまともに使えないのに..。
2. Dockerのインストール
$ sudo su –
でrootになって作業しました。お作法も知らない為、Dockerの格納場所は上記リンク先の解説の通りにして/home/dockerというディレクトリを作成してその中にぶっこんであります。
以下、先頭の#はルートユーザ時の表記、$は一般ユーザ時の状態です。
Ubuntu Serverのインストール後は、PuttyでSSHでN100 PCにつないで作業してます。
ダッサいディレクトリの作り方とか作業してますけど、皆さんはかっこよくやってください。たまにしかUbuntuやらLinux系で作業しないのでやり方覚えてもすぐ忘れちゃうんですよ・・・。
普段ログインで使用するubuntuのユーザとは別に、Dockerのファイルを格納する/home/dockerを作る。
#cd /home
#mkdir docker
#cd docker
とりあえず、アップデート。
#apt update
#apt upgrade -y
nano使いのヘタレなのでnanoを入れる。viとかすぐ使い方忘れる。
#apt install nano
unzipも後で必要になるので入れる。
#apt install unzip
ここからは上記サイトのまま。
dockerのインストール
#apt install apt-transport-https ca-certificates curl software-properties-common
#curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#apt update
#apt-cache policy docker-c
#apt install docker-ce
#systemctl status docker
ctrl+cで抜ける。
特定の一般ユーザでdockerコマンドを実行できるようにする。
一旦、普段お使いのユーザになる。
#exit
$sudo usermod -aG docker ${USER}
$su - ${USER}
$groups
普段使いのDockerのコマンドを実行できる一般ユーザがdockerグループに登録されたのがわかるかと。
docker-composeのインストールバージョン確認
rootに戻る。
$sudo su -
Dockerの作業ディレクトリに戻る。
#cd /home/docker
#docker compose version
今後、/home/dockerの下にdocker-compose.yamlを配置する。
以下の内容のdocker-compose.100ファイルを作成する。
------------ここから
services:
homeassistant:
container_name: homeassistant
image: "ghcr.io/home-assistant/home-assistant:stable"
volumes:
- ./home-assistant/config:/config
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
privileged: true
network_mode: host
------------ここまでの間の部分をコピペ
※今回ハマったversion: 3は削除。
作成した/home/docker/docker-compose.100をdocker-compose.yamlとしてコピー
# cp docker-compose.100 docker-compose.yaml
homeassistantをインストール
# docker compose up -d
問題なければ、Home Assistantがインストールされて動作開始する。
http://<N100 PCのIPアドレス>:8123/
でN100 PCのポート8123に接続すると、アカウントの作成、位置の登録などHome Assistantの初期設定ができるので作業する。
MQTTブローカーのインストール(docker編)を参考にMosquittoをDockerでインストール
以下の内容のファイルdocker-compose.200ファイルを作成する。(先頭の空行も含める)
------------ここから
mosquitto:
container_name: mosquitto
image: eclipse-mosquitto
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
restart: unless-stopped
environment:
- PUID=1000
PGID=1000
ports:
- 1883:1883
- 9001:9001
------------ここまでの間の部分をコピペ
Mosquittoインストール前に
/home/docker/mosquitto/config/mosquitto.conf
を作成する。
#cd /home/docker
#mkdir mosquitto
#cd mosquitto
#mkdir config
#cd config
#nano mosquitto.conf
mosquitto.confの内容は以下。
------------ここから
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
listener 1883 0.0.0.0
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
allow_anonymous false
password_file /mosquitto/config/password
------------ここまでの間の部分をコピペ
MQTTで使うデフォルトユーザ・パスワードを設定。
#nano /home/docker/mosquitto/config/password
内容は以下。
------------ここから
mqttuser:$7$101$cnSh5Ey47Rm/kO2o$deMGXkDTwIXDn0v8aSVyj8Dwel13Ob1If8dHaq8Nj+LMfsPl1sM9x4RdJBc8421Q72+qJBPFy50d5NMkUPzr1A==
------------ここまでの間の部分をコピペ
ユーザ名は参考にしたサイトだとadminになってましたが、自分がわかれば別になんでもいい感じです。
Mosquittoをインストール
#rm docker-compose.yaml
#cat docker-compose.[12]00 > docker-compose.yaml
#docker compose up -d
MQTT(Mosquitto)で使うパスワードを自分が使う任意のパスワードに設定(今回の例ではmqttuserにした)。
# docker compose exec mosquitto mosquitto_passwd -c /mosquitto/config/password mqttuser
Home Assistantの統合のセットアップ
ブラウザを使ってN100 PCHome Assistantに接続して以下の操作を行う。
Home Assistantで、
[設定]→[デバイスとサービス]→[統合を追加]→Home Assistantの検索窓で「MQTT」を検索→「MQTT」を選択→上記で設定したN100 PCのIPアドレス、MQTT用のユーザ名とパスワード入力→[送信]ボタンを押すと統合完了。
frigateのインストール
以下の内容のファイルdocker-compose.300ファイルを作成する。(先頭の空行も含める)
------------ここから
services:
frigate:
container_name: frigate
privileged: true # this may not be necessary for all setups
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:stable
#shm_size: "64mb" # update for your cameras based on calculation above
shm_size: "128mb" # update for your cameras based on calculation above
devices:
- /dev/bus/usb:/dev/bus/usb # passes the USB Coral, needs to be modified for other versions
volumes:
- /etc/localtime:/etc/localtime:ro
- /home/hoge/frigate/config.yml:/config/config.yml
- /home/hoge/frigate/storage:/media/frigate
- type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "5000:5000"
- "8554:8554" # RTSP feeds
- "8555:8555/tcp" # WebRTC over tcp
- "8555:8555/udp" # WebRTC over udp
environment:
FRIGATE_RTSP_PASSWORD: "7XXXXXXX"
------------ここまでの間の部分をコピペ
以下のコマンドを実行し、frigateをインストールする。
# rm docker-compose.yaml
# cat docker-compose.[123]00 > docker-compose.yaml
# docker compose up -d
一度、frigateを止めてから /home/docker/frigate/config/config.ymlを以下の内容で作成する。
#docker stop frigate
#nano /home/docker/frigate/config/config.yml
config.ymlの内容は以下。
------------ここから
mqtt:
host: 192.0.2.235
user: frigate
password: password
detectors:
coral:
type: edgetpu
device: usb
logger:
default: info
rtmp:
enabled: false
live:
height: 720
quality: 1
birdseye:
enabled: True
restream: false
width: 640
height: 360
quality: 1
mode: continuous
ffmpeg:
hwaccel_args: -hwaccel vaapi
#hwaccel_args: -hwaccel h264_amf
# hwaccel_args: -hwaccel h264_amf
# TODO - This is the Hardware Acceleration for Intel-based CPUs (<10th Generation) via Quicksync
# check that this fits your use case - https://docs.frigate.video/configuration/hardware_acceleration
#hwaccel_args: -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format yuv420p
#hwaccel_args: -hwaccel vaapi
#hwaccel_args: -hwaccel qsv
cameras:
sv3c_sv_b01w_1080p_hx:
ffmpeg:
inputs:
- path: rtsp://user:pass@192.0.2.181:554/11
roles:
- record
- path: rtsp://user:pass@192.0.2.181:554/12
roles:
- detect
objects:
track:
- person
filters:
person:
min_score: 0.4
threshold: 0.7
detect:
width: 640
height: 360
fps: 5
snapshots:
enabled: True
record:
enabled: True
retain:
days: 2
events:
retain:
default: 10
------------ここまでの間の部分をコピペ
シンプルにするためにカメラ1個だけ登録。
動作確認後にあとで追加していく予定。
ただ、このままだと当方のカメラはうまく表示されなかったので、ここから先はまだ未作業でパラメータなどの調整が必要。今回の記事は自分の中ではとりあえずfrigateのインストールとHome Assistantへの統合までの記録が目的なので・・・。
上記、/home/docker/frigate/config/config.ymlの中で当方が弄ったのは、
1つめ。
mqtt:
host: 192.0.2.235
user: frigate
password: password
この部分は、
「host:」はN100 PCのIPアドレス。
「user」と「password」はMQTT(Mosquittoのインストール時に設定したやつ)のユーザとパスワードを入力した。
2つめ。
cameras:
の「sv3c_sv_b01w_1080p_hx」を自分が使ってるカメラの名前に変更。
以下を自分が使ってるネットワークカメラのIPアドレスに変更。
- path: rtsp://user:pass@192.0.2.181:554/11
- path: rtsp://user:pass@192.0.2.181:554/12
ポート554の後の11と12はネットワークカメラにより変わるはず。
メインストリームとサブストリームのことだと思う。
3つめ。
track:
- person
の部分。AIで検知する対象を設定。
一応、検知できるものには以下の種類があるようだ。
自転車(bicycle)やら自動車(car)やら猫(cat)やら犬(dog)やら、
お好きにどうぞ。
------------ここから
track:
- person
- bicycle
- car
- motorcycle
- airplane
- bus
- train
- car
- boat
- traffic light
- fire hydrant
- street sign
- stop sign
- parking meter
- bench
- bird
- cat
- dog
- horse
- sheep
- cow
- elephant
- bear
- zebra
- giraffe
- hat
- backpack
- umbrella
- shoe
- eye glasses
- handbag
- tie
- suitcase
- frisbee
- skis
- snowboard
- sports ball
- kite
- baseball bat
- baseball glove
- skateboard
- surfboard
- tennis racket
- bottle
- plate
- wine glass
- cup
- fork
- knife
- spoon
- bowl
- banana
- apple
- sandwich
- orange
- broccoli
- carrot
- hot dog
- pizza
- donut
- cake
- chair
- couch
- potted plant
- bed
- mirror
- dining table
- window
- desk
- toilet
- door
- tv
- laptop
- mouse
- remote
- keyboard
- cell phone
- microwave
- oven
- toaster
- sink
- refrigerator
- blender
- book
- clock
- vase
- scissors
- teddy bear
- hair drier
- toothbrush
- hair brush
------------ここまでの間の部分
上記で一度止めたfrigateをスタートする。
#docker start frigate
Home AssistantへHACSのインストール。
Home Assistantは最近のバージョンだと、Dockerでインストールするバージョンは、アドオンストアがないため、それを補助するHACSというのを入れる。
これを入れるとfrigateとHome Assistantの統合が簡単になる。
# cd /home/docker/home-assistant/config
# wget -O - https://get.hacs.xyz/install | bash -
HACSの統合
この操作にはgithubアカウントが必要である。あらかじめ作成しておく。
N100 PCのHome Assistantをブラウザで開いて
[設定]→[デバイスとサービス]→[統合を追加]→検索窓に「HACS」と入力して検索→一覧にHACSが表示されるのでクリック→何個かのチェックボックスにチェック(HACSについての注意事項を理解してるかの確認チェックボックス)→[送信]クリック→URLと8桁のキーが表示される→URLをクリックするとgithubのサイトに飛ぶ(githubにログインしていない場合ログインする)→8桁のキーを入力する→Authorize hacs→成功の画面が表示されたら右下の完了をクリックする
これで、ホームアシスタント画面左にHACSが追加される。
frigateの統合作業 その1
画面左の一覧から「HACS」をクリック→「Home Assistant Community Store」が開くので、虫眼鏡の検索窓に「frigate」と入力してfrigateを検索→Frigateの横の縦の点3つをクリック→[DOWNLOAD]→frigateのリポジトリのバージョン選択画面が表示される(今回は一番新しいv5.4.1を選択した)→右下のDOWNLOADクリック
ダウンロードしたらHome Assistantを再起動
#docker restart homeassistant
frigateの統合作業 その2
N100 PCのHome Assistantをブラウザで開いて
[設定]→[デバイスとサービス]→[統合を追加]→「frigate」で検索→frigateを一覧から選択→URLをIPアドレスとポートを入力→送信
設定がうまく行ってれば、これで統合が完了する。
冒頭のとおり、ここで5日ほどハマった。
あとは、また細かい設定を弄りながら作業します。