From 7c1e7d744656ec4cec72d5d313d288459f9194d9 Mon Sep 17 00:00:00 2001 From: waxgourd Date: Sun, 28 Apr 2024 23:39:00 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E6=8E=A8=E5=87=BAfrigate?= =?UTF-8?q?=E3=80=81wghaosssh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frigate/CHANGELOG.md | 3 ++ frigate/DOCS.md | 101 +++++++++++++++++++++++++++++++++++++++++ frigate/README.md | 28 ++++++++++++ frigate/apparmor.txt | 77 +++++++++++++++++++++++++++++++ frigate/config.yaml | 81 +++++++++++++++++++++++++++++++++ frigate/icon.png | Bin 0 -> 5801 bytes frigate/logo.png | Bin 0 -> 5801 bytes wghaosssh/CHANGELOG.md | 7 +++ wghaosssh/DOCS.md | 20 ++++++++ wghaosssh/README.md | 10 ++++ wghaosssh/apparmor.txt | 49 ++++++++++++++++++++ wghaosssh/config.yaml | 28 ++++++++++++ wghaosssh/icon.png | Bin 0 -> 18906 bytes wghaosssh/logo.png | Bin 0 -> 18906 bytes 14 files changed, 404 insertions(+) create mode 100644 frigate/CHANGELOG.md create mode 100644 frigate/DOCS.md create mode 100644 frigate/README.md create mode 100644 frigate/apparmor.txt create mode 100644 frigate/config.yaml create mode 100644 frigate/icon.png create mode 100644 frigate/logo.png create mode 100644 wghaosssh/CHANGELOG.md create mode 100644 wghaosssh/DOCS.md create mode 100644 wghaosssh/README.md create mode 100644 wghaosssh/apparmor.txt create mode 100644 wghaosssh/config.yaml create mode 100644 wghaosssh/icon.png create mode 100644 wghaosssh/logo.png diff --git a/frigate/CHANGELOG.md b/frigate/CHANGELOG.md new file mode 100644 index 0000000..4ab0a5d --- /dev/null +++ b/frigate/CHANGELOG.md @@ -0,0 +1,3 @@ +### rknn1.6-13.2-preview (2024-04-28) + +- 首次推出 diff --git a/frigate/DOCS.md b/frigate/DOCS.md new file mode 100644 index 0000000..5b77f04 --- /dev/null +++ b/frigate/DOCS.md @@ -0,0 +1,101 @@ +# Frigate-rknpu版 + +## 使用方法: + +需要在 /mnt/data/supervisor/homeassistant/ 下面添加配置文件frigate.yaml + +可以: +- 方法一:进入 [ip]:7681 导航到指定位置,使用命令行工具添加编辑frigate.yaml +- 方法二:使用 File editor 或者 Filebrowser(推荐) 添加编辑frigate.yaml + +```yaml +mqtt: + enabled: false + +detectors: + rknn_k: + type: rknn + #cpu2: + # type: cpu + # num_threads: 3 + #ov: + # type: openvino + # device: AUTO + # model: + # path: /openvino-model/ssdlite_mobilenet_v2.xml +model: + width: 320 + height: 320 + input_tensor: nhwc + input_pixel_format: bgr + #path: default-yolov8n + #labelmap_path: /openvino-model/coco_91cl_bkgr.txt + +ffmpeg: + input_args: preset-rtsp-restream + hwaccel_args: preset-rk-h264 + output_args: + record: preset-record-generic-audio-aac + +#go2rtc: +# streams: +# frontdoor: +# - ffmpeg:rtsp://your-rtsp/Streaming/Channels/101 + +#注意:下面的path后是要改成自己摄像头rtsp链接的。 + +cameras: + wga-door: + ffmpeg: + inputs: + - path: rtsp://your-rtsp/Streaming/Channels/101 + roles: + - detect +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: 3 + post_capture: 3 + objects: + - person + retain: + mode: active_objects + objects: + person: 15 + default: 2 + +#这里是日志输出设置,请根据情况自行设置 + +logger: + default: debug + logs: + ffmpeg.wga-door.detect: debug + detect: debug +``` + +更多配置参考:https://docs.frigate.video/configuration/ + diff --git a/frigate/README.md b/frigate/README.md new file mode 100644 index 0000000..c065582 --- /dev/null +++ b/frigate/README.md @@ -0,0 +1,28 @@ +# 冬瓜甄选addons:Frigate-rknpu + +## 关于 +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/apparmor.txt b/frigate/apparmor.txt new file mode 100644 index 0000000..3a1f263 --- /dev/null +++ b/frigate/apparmor.txt @@ -0,0 +1,77 @@ +#include + +profile local_frigate 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/config.yaml b/frigate/config.yaml new file mode 100644 index 0000000..533a212 --- /dev/null +++ b/frigate/config.yaml @@ -0,0 +1,81 @@ +name: frigate-rknpu +version: rknn1.6-13.2-preview +slug: 'frigate-rknpu' +codenotary: 'wghaos@163.com' +description: NVR with realtime local object detection for IP cameras +url: "https://gitcode.com/waxgourd/addons" +image: wghaos/frigate +init: false +startup: application +boot: manual +arch: + - amd64 + - 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 +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 +devices: + - /dev/dri/renderD128 + - /dev/dri/renderD129 + - /dev/dri/renderD130 + - /dev/apex_0 + - /dev/apex_1 + - /dev/apex_2 + - /dev/apex_3 + - /dev/dri/card0 + - /dev/dri/card1 + - /dev/dri/card2 + - /dev/vchiq + - /dev/video10 + - /dev/video0 +usb: true +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/icon.png b/frigate/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`^后才会更新到主机。 +- 可视化秘钥列表、支持多密钥添加、删除。 +- 注:默认的两个是冬瓜haos测试秘钥,介意请删除即可。 \ No newline at end of file diff --git a/wghaosssh/apparmor.txt b/wghaosssh/apparmor.txt new file mode 100644 index 0000000..5aa33e5 --- /dev/null +++ b/wghaosssh/apparmor.txt @@ -0,0 +1,49 @@ +#include + +profile hassos_ssh_configurator_addon flags=(attach_disconnected,mediate_deleted) { + #include + + capability, + file, + mount, + umount, + remount, + + capability setgid, + capability setuid, + capability dac_override, + + # S6-Overlay + /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, + /proc/self/attr/** mrwkl, + # Files required + /dev/sda1 mrwkl, + /dev/sda7 mrwkl, + /dev/sda8 mrwkl, + /dev/sdb1 mrwkl, + /dev/mmcblk0p1 mrwkl, + /dev/* mrwkl, + /tmp/** mrkwl, + + # Data access + /data/** rw, + /addon_configs/** 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/wghaosssh/config.yaml b/wghaosssh/config.yaml new file mode 100644 index 0000000..2f849b8 --- /dev/null +++ b/wghaosssh/config.yaml @@ -0,0 +1,28 @@ +name: "WGHAOS SSH 配置器" +version: '0.1.1-34-beta' +slug: 'wghaosssh' +codenotary: wghaos@163.com +description: '这将启用端口22222上的SSH WGHassOS控制台。仅适用于Home Assistant操作系统' +image: registry.wghaos.com/wghaos/addons-wghaos-ssh +url: https://gitcode.com/waxgourd/addons +init: false +arch: + - aarch64 + - amd64 + - armv7 +backup_exclude: + - '*/data/' +ingress: true +ingress_port: 9876 +panel_icon: 'mdi:flower' +boot: manual +privileged: + - SYS_ADMIN +full_access: true +map: + - all_addon_configs:rw + - backup:rw +apparmor: true +docker_api: true +startup: services + diff --git a/wghaosssh/icon.png b/wghaosssh/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7adf19e8316c7bfef88efb4a96e2cd30f8579509 GIT binary patch literal 18906 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