From 444f3f43257288549aea0cbecc7f4e8f0e717ad0 Mon Sep 17 00:00:00 2001 From: waxgourd Date: Fri, 17 Oct 2025 16:58:48 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E6=8E=A8=E5=87=BAfrigate-rkn?= =?UTF-8?q?n-old?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frigate-rknn-old/CHANGELOG.md | 6 +++ frigate-rknn-old/DOCS.md | 90 ++++++++++++++++++++++++++++++++++ frigate-rknn-old/README.md | 32 ++++++++++++ frigate-rknn-old/apparmor.txt | 77 +++++++++++++++++++++++++++++ frigate-rknn-old/config.yaml | 66 +++++++++++++++++++++++++ frigate-rknn-old/icon.png | Bin 0 -> 5801 bytes frigate-rknn-old/logo.png | Bin 0 -> 5801 bytes 7 files changed, 271 insertions(+) create mode 100644 frigate-rknn-old/CHANGELOG.md create mode 100644 frigate-rknn-old/DOCS.md create mode 100644 frigate-rknn-old/README.md create mode 100644 frigate-rknn-old/apparmor.txt create mode 100644 frigate-rknn-old/config.yaml create mode 100644 frigate-rknn-old/icon.png create mode 100644 frigate-rknn-old/logo.png diff --git a/frigate-rknn-old/CHANGELOG.md b/frigate-rknn-old/CHANGELOG.md new file mode 100644 index 0000000..7f1ac28 --- /dev/null +++ b/frigate-rknn-old/CHANGELOG.md @@ -0,0 +1,6 @@ +## rknn1.6-13.2-3 (2024-05-13) +- 增加自动获取默认MQTT用户名和密码 +## rknn1.6-13.2-2-preview (2024-05-09) +- 增加内置默认配置 +## rknn1.6-13.2-preview (2024-04-28) +- 首次推出 diff --git a/frigate-rknn-old/DOCS.md b/frigate-rknn-old/DOCS.md new file mode 100644 index 0000000..cde4aa6 --- /dev/null +++ b/frigate-rknn-old/DOCS.md @@ -0,0 +1,90 @@ +# Frigate-rknpu-old版 +配置参考:[https://docs.frigate.video/configuration/reference](https://docs.frigate.video/configuration/reference) + +## 使用方法: +- 方法一:直接启动,启动完成之后,点击`打开webui`,点击`config`,进行编辑之后,点击`Save Only`,然后再重启本应用 +- 方法二:使用 Filebrowser 编辑`homeassistant/frigate.yaml`,然后启动本应用 +- 方法三:进入 [ip]:7681 导航到`/mnt/data/supervisor/homeassistant/`,使用命令行工具编辑`frigate.yaml`,然后启动本应用 + +`frigate.ayml`默认内容 + +```yaml +mqtt: + enabled: false # 如果要用请修改成 true + host: core-mosquitto + port: 1883 + client_id: gzbdi3 + #topic_prefix: frigate + user: '' # 改成mqtt登录账号 + password: '' # 改成mqtt登录密码 + +ffmpeg: + input_args: preset-rtsp-restream + hwaccel_args: preset-rk-h264 + output_args: + record: preset-record-generic-audio-aac + +cameras: + video: # 多路视频,请从此复制 + ffmpeg: + inputs: + - path: '' # 填写你的rtsp视频流地址,比如:rtsp://username:password@192.168.1.100:554/Streaming/Channels/101 + input_args: preset-rtsp-restream + roles: + - detect + +detectors: + rk-detector: + type: rknn + +model: + width: 320 + height: 320 + input_tensor: nhwc + input_pixel_format: bgr + +detect: + width: 1280 + height: 720 + fps: 6 + enabled: True + +objects: + track: + - person + filters: + person: + min_score: 0.2 + +snapshots: + enabled: true + bounding_box: true + clean_copy: true + retain: + default: 15 + +record: + enabled: True + expire_interval: 60 + retain: + days: 0 + mode: active_objects + events: + pre_capture: 2 + post_capture: 3 + objects: + - person + required_zones: [ ] + retain: + default: 2 + mode: active_objects + objects: + person: 15 + +logger: + default: info + logs: + frigate.event: debug + frigate.mqtt: debug + detect: debug +``` diff --git a/frigate-rknn-old/README.md b/frigate-rknn-old/README.md new file mode 100644 index 0000000..e10ac81 --- /dev/null +++ b/frigate-rknn-old/README.md @@ -0,0 +1,32 @@ +# 冬瓜甄选addons:Frigate-rknpu-old + +###### **此项目最高版为rknn1.6-13.2-3,到此为止,不会再升级** + +## 关于 +Frigate是一款实时智能物体识别应用,所有处理可以在本地硬件上执行,通过网络摄像头捕捉的画面进行物体识别,可通过HA的事件机制,完成各种超过人存在传感器的功能。 + +## 介绍 +1. 通过本地对象检测可以减少误报 + 传统的NVR依赖于简单的运动检测,需要通过数小时的微调设置降低误报率。通过Frigate物体检测算法,即使是普通的硬件也可以运行高级分析,以确定运动是否真的是人、车或其他感兴趣的物体。通过Frigate的本地处理,您就不需要使用把本地视频推送到付费的智能视频识别平台了。 + +2. 通过设置细微区域响应来触发事件和警报 + Frigate 通过实时跟踪物体,可以实现一个人从开始走上前面的台阶或汽车进入指定车道的准确时间。实现根据精确位置响应来优化通知的消息。 + +3. 与 Home Assistant 和其他自动化平台集成 + 在任何支持 MQTT 的设备实体的平台(Home Assistant、NodeRed等),实现检测对象实体。 Frigate 的配套Home Assistant集成,提供低延迟摄像头实体、实时传感器和开关,达到实现自动化和通知功能。 + +4. 为摄像头提供动态实时视频推送查看功能 + 通过Birdseye视图动态渲染让摄像头具有活动检测能力,让您可以轻松查看感兴趣的摄像头。从此告别眯着眼睛看整版由小方格组成的多路视频监控画面的时代。 + +5. RK3566系列soc可以在720P辅码流下,实现4路视频识别,从而实现最优成本的智能感知摄像头功能。(模型库大时,推荐1-2路,会让应用更广泛) + +## 重要说明: + 此addon为“冬瓜haos”的rk3566系列AI固件的专用版,能充分发挥rknn的性能,在2024年4月28日前的rk3566系列机型,都为不带GPU加速的,想使用rknn功能,请确认好主机和固件,否则无法使用!!! + +## 支持探测器: +- cpu +- rknn +- openvino +- 其他官方支持的硬件相关探测器(未测试) + + diff --git a/frigate-rknn-old/apparmor.txt b/frigate-rknn-old/apparmor.txt new file mode 100644 index 0000000..76e6d59 --- /dev/null +++ b/frigate-rknn-old/apparmor.txt @@ -0,0 +1,77 @@ +#include + +profile frigate-rknpu-old flags=(attach_disconnected,mediate_deleted) { + #include + + capability, + file, + signal, + mount, + umount, + remount, + network udp, + network tcp, + network dgram, + network stream, + network inet, + network inet6, + network netlink raw, + network unix dgram, + network, + + signal (send) set=(kill,term,int,hup,cont), + + capability net_admin, + capability net_bind_service, + capability dac_read_search, + capability dac_override, + capability chown, + + + capability setgid, + capability setuid, + capability sys_admin, + capability dac_read_search, + # capability dac_override, + # capability sys_rawio, + + # S6-Overlay + /init ix, + /run/{s6,s6-rc*,service}/** ix, + /package/** ix, + /command/** ix, + /run/{,**} rwk, + /dev/tty rw, + /bin/** ix, + /usr/bin/** ix, + /usr/lib/bashio/** ix, + /etc/s6/** rix, + /run/s6/** rix, + /etc/services.d/** rwix, + /etc/cont-init.d/** rwix, + /etc/cont-finish.d/** rwix, + /init rix, + /var/run/** mrwkl, + /var/run/ mrwkl, + /dev/i2c-1 mrwkl, + # Files required + /dev/fuse mrwkl, + /dev/sda1 mrwkl, + /dev/sdb1 mrwkl, + /dev/nvme0 mrwkl, + /dev/nvme1 mrwkl, + /dev/mmcblk0p1 mrwkl, + /dev/* mrwkl, + /tmp/** mrkwl, + /dev/shm/** rwix, + + # Data access + /data/** rw, + + # suppress ptrace denials when using 'docker ps' or using 'ps' inside a container + ptrace (trace,read) peer=docker-default, + + # docker daemon confinement requires explict allow rule for signal + signal (receive) set=(kill,term) peer=/usr/bin/docker, + +} diff --git a/frigate-rknn-old/config.yaml b/frigate-rknn-old/config.yaml new file mode 100644 index 0000000..41810b7 --- /dev/null +++ b/frigate-rknn-old/config.yaml @@ -0,0 +1,66 @@ +name: frigate-rknpu-old +version: rknn1.6-13.2-3 +slug: "frigate-rknpu-old" +codenotary: "wghaos@163.com" +description: NVR with realtime local object detection for IP cameras +url: "https://gitcode.com/waxgourd/addons" +image: r.hassbus.com/wghaos/frigate +init: false +startup: application +boot: manual +arch: + - aarch64 +map: + - "media:rw" + - "config:rw" +webui: "http://[HOST]:[PORT:5000]/" +watchdog: "http://[HOST]:[PORT:5000]/" +ingress: true +ingress_port: 5000 +ingress_entry: / +panel_icon: "mdi:cctv" +panel_title: Frigate +panel_admin: false +homeassistant_api: true +hassio_api: true +hassio_role: manager +ports: + 8555/tcp: 8555 + 8555/udp: 8555 + 8554/tcp: null + 5000/tcp: null + 1984/tcp: null + 1935/tcp: null +ports_description: + 8555/tcp: WebRTC over tcp + 8555/udp: WebRTC over udp + 8554/tcp: RTSP Restream + 5000/tcp: Web interface (Not required for Hass.io Ingress) + 1984/tcp: go2rtc API + 1935/tcp: RTMP streams +host_network: false +video: true +tmpfs: true +host_ipc: true +apparmor: true +full_access: true +privileged: + - BPF + - DAC_READ_SEARCH + - IPC_LOCK + - NET_ADMIN + - NET_RAW + - PERFMON + - SYS_ADMIN + - SYS_MODULE + - SYS_NICE + - SYS_PTRACE + - SYS_RAWIO + - SYS_RESOURCE + - SYS_TIME +environment: + CONFIG_FILE: /config/frigate.yaml +schema: + plus_api_key: password? +services: + - "mqtt:want" diff --git a/frigate-rknn-old/icon.png b/frigate-rknn-old/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..405411a10e5e69ea7fef7e58685df8baae45efb7 GIT binary patch literal 5801 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 nU_P`^a1{r;Z!HxE`#O-)VE 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 nU_P`^