当前位置: 首页 > news >正文

在树莓派上部署开源监控系统 ZoneMinder

原文:https://blog.iyatt.com/?p=17425

前言

自己搭建,可以用手里已有的设备,不需要额外买。这套系统的源码是公开的,录像数据也掌握在自己手里,不经过不可控的三方。

file

file

支持设置访问账号
file

可以保存录像,启用运动侦测
file
file

有配套 APP 使用
file

环境

  • 树莓派CM4
  • raspios 20240704 Debian 12 arm64
  • ZoneMinder 1.36.33

部署

参考官方文档:https://zoneminder.readthedocs.io/en/stable/installationguide/debian.html#debian-12-bookworm

配置数据库

安装 Mariadb 数据库(MySQL 开源替代品)

sudo apt update
sudo apt install -y mariadb-server

创建数据库

sudo mariadb # 连接数据库进入交互终端
CREATE DATABASE zm; # 创建数据库 zm,这个不建议自定义名字
CREATE USER zm_user@localhost IDENTIFIED BY 'zm123456'; # 创建用户 zm_user,并设置登录密码为 zm123456
GRANT ALL PRIVILEGES ON zm.* TO zm_user@localhost; # 将 zm 所有权限授予 zm_user 用户
FLUSH PRIVILEGES; # 刷新
exit; # 退出数据库交互

导入数据库结构

# zm_user 和 zm 对应前一步创建的用户名和数据库,执行后要输入上面设置的命令确认
mariadb -u zm_user -p zm < /usr/share/zoneminder/db/zm_create.sql

配置 ZoneMinder

安装软件

sudo apt install -y zoneminder apache2

更新 ZoneMinder 到最新版

sudo echo 'deb http://deb.debian.org/debian bookworm-backports main contrib' >> /etc/apt/sources.list
sudo apt update
sudo apt -t bookworm-backports install zoneminder

修改文件权限

sudo chgrp -c www-data /etc/zm/zm.conf
sudo chown -R www-data:www-data /usr/share/zoneminder/www
sudo find /usr/share/zoneminder/www -type d -exec chmod 755 {} \;
sudo find /usr/share/zoneminder/www -type f -exec chmod 644 {} \;

以 root 身份编辑 /etc/zm/zm.conf,找到ZM_DB_NAME、ZM_DB_USER、ZM_DB_PASS,分别对应前面创建的数据库、用户、密码,修改到等号后面
file

启用服务

sudo a2enconf zoneminder
sudo a2enmod cgi
sudo systemctl restart apache2.service
sudo systemctl restart zoneminder.service
sudo systemctl status zoneminder.service # 查看运行状态

使用

首次使用

访问测试
首次使用会出现隐私协议,翻到底部同意协议
file

修改地区和时区

上面从左到右第二个 option 选项,
file

语言选 zh_cn 就是中文(只是汉化不彻底,很多中英混合),还有 LOCALE_DEFAULT 选 zh_Hans_CN
file

再往下选时区,中国大陆地区的时区选亚洲上海(国际标准时区在新中国成立之前就定下来了,毕竟当时洋人多在上海,还是国际都市),修改后右下角点保存
file

添加 USB 摄像头

安装媒体工具库

sudo apt install -y v4l-utils

查看摄像头设备

v4l2-ctl --list-devices

file

这里的 imx291 就是我的 USB 摄像头,一般一个摄像头有两个 /dev/video 设备文件,其中第一个可以输出视频流,查看支持的媒体格式

v4l2-ctl -d /dev/video0 --list-formats-ext

我这里输出了下面的内容

yx@raspberrypi:~ $ v4l2-ctl -d /dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMTType: Video Capture[0]: 'MJPG' (Motion-JPEG, compressed)Size: Discrete 1920x1080Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.040s (25.000 fps)Interval: Discrete 0.050s (20.000 fps)Interval: Discrete 0.067s (15.000 fps)Interval: Discrete 0.100s (10.000 fps)Interval: Discrete 0.200s (5.000 fps)Size: Discrete 1280x1024Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.040s (25.000 fps)Interval: Discrete 0.050s (20.000 fps)Interval: Discrete 0.067s (15.000 fps)Interval: Discrete 0.100s (10.000 fps)Interval: Discrete 0.200s (5.000 fps)Size: Discrete 1280x720Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.040s (25.000 fps)Interval: Discrete 0.050s (20.000 fps)Interval: Discrete 0.067s (15.000 fps)Interval: Discrete 0.100s (10.000 fps)Interval: Discrete 0.200s (5.000 fps)Size: Discrete 800x600Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.040s (25.000 fps)Interval: Discrete 0.050s (20.000 fps)Interval: Discrete 0.067s (15.000 fps)Interval: Discrete 0.100s (10.000 fps)Interval: Discrete 0.200s (5.000 fps)Size: Discrete 640x480Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.040s (25.000 fps)Interval: Discrete 0.050s (20.000 fps)Interval: Discrete 0.067s (15.000 fps)Interval: Discrete 0.100s (10.000 fps)Interval: Discrete 0.200s (5.000 fps)Size: Discrete 320x240Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.040s (25.000 fps)Interval: Discrete 0.050s (20.000 fps)Interval: Discrete 0.067s (15.000 fps)Interval: Discrete 0.100s (10.000 fps)Interval: Discrete 0.200s (5.000 fps)[1]: 'YUYV' (YUYV 4:2:2)Size: Discrete 1920x1080Interval: Discrete 0.200s (5.000 fps)Size: Discrete 1280x1024Interval: Discrete 0.200s (5.000 fps)Size: Discrete 1280x720Interval: Discrete 0.100s (10.000 fps)Size: Discrete 800x600Interval: Discrete 0.050s (20.000 fps)Interval: Discrete 0.067s (15.000 fps)Interval: Discrete 0.100s (10.000 fps)Interval: Discrete 0.200s (5.000 fps)Size: Discrete 640x480Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.040s (25.000 fps)Interval: Discrete 0.050s (20.000 fps)Interval: Discrete 0.067s (15.000 fps)Interval: Discrete 0.100s (10.000 fps)Interval: Discrete 0.200s (5.000 fps)Size: Discrete 320x240Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.040s (25.000 fps)Interval: Discrete 0.050s (20.000 fps)Interval: Discrete 0.067s (15.000 fps)Interval: Discrete 0.100s (10.000 fps)Interval: Discrete 0.200s (5.000 fps)

即支持MJPG和YUYV,以及在各种分辨率输出下支持的帧率大小

在控制台选项卡下点击新建监视器
file

取一个名字,信号源选本地
file
左侧切换到信号源,填上摄像头的设备文件路径,设置一下分辨率,就可以保存了
file
页面右上角切换状态到运行
file

由于 zoneminder 是以 www-data 用户运行的,而 /dev/video* 设备属于 video 用户组,可能没有权限访问
将 www-data 添加到 video 用户组,这样就能正常使用了

# 添加
sudo usermod -aG video www-data# 刷新
sudo newgrp video

内网穿透实现公网访问

大体还是基于这个思路:https://blog.iyatt.com/?p=17340
ZoneMinder 提供的配置方案是基于 Apache2 的,我看了好久都没搞懂怎么给 ZoneMinder 配置 https 访问,最后在本地用 Nginx 反向代理 Apache2 的 80 端口,转为 https,再用 frp 把 Nginx 代理的端口映射到公网,这样直接公网就能访问了,服务器还是新加坡的,视频先送到新加披再传回来,感觉延时都还可以,应该在 1 秒内,不会感觉明显的迟钝。

file

启用登录验证

打开选项,左侧用户栏可以创建或编辑用户
file

设置用户密码、语言、带宽限制、是否启用、可访问的设备、享有的设备权限…
设置后点击保存
file

选项左侧打开系统,勾选OPT_USE_AUTH,然后保存,这样就支持登录验证了
file

客户端程序(桌面程序、手机APP)

file
可以从 GitHub 下载:https://github.com/ZoneMinder/zmNinja/releases
我是用的 Android 手机,最开始是在 Google Play 上查找 APP,发现是收费的,后面才去 GitHub 上查找 ZoneMinder 项目,倒是可以直接下载(上面的链接)

配置 API 访问

在选项-系统中勾选OPT_USE_API然后保存,即启用 API
file

然后在选项-用户中,为指定用户启用 API,这样该用户就能在 APP 上使用了

“Login Auth Sucess but api failed”/“登录身份验证成功,但 API 失败”问题解决

APP 装上了,但是使用的时候就遇到标题的错误,网页端也能正常使用。
客户端应该是通过 API 连接的,就是这个 API 有问题。
昨天晚上就卡在这里,今天(2024.9.30)下班回家后,晚上又继续尝试解决这个问题,一直不停地在谷歌上搜索尝试,ZoneMinder 的项目 issues 找了都没解决,搜了两个小时,最后在 ZoneMinder 论坛上找到的回答解决了:https://forums.zoneminder.com/viewtopic.php?p=111193#p111193
推测就是树莓派版本的 ZoneMinder 包有问题,我用中文再转述一下解决方法:

新建一个文件名为 .htacess,写入

<IfModule mod_rewrite.c>RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^ index.php [L]RewriteBase /zm/api
</IfModule>

修改文件所属用户和权限

sudo chown www-data:www-data .htacess
sudo chmod 644 .htacess

然后将这个文件复制到下面三个路径下面

  • /usr/share/zoneminder/www/api
  • /usr/share/zoneminder/www/api/app
  • /usr/share/zoneminder/www/api/app/webroot

可以测试访问,当可以显示版本或下图格式的错误信息的时候,就代表 API 正常工作了

地址//zm/api/host/getVersion.json

file
如果选项没有勾选OPT_USE_LEGACY_API_AUTH(旧版 API 认证,在启用 API 下一项),就会显示下面的状态,不启用也不影响 APP 使用
file

录像存储路径设置

打开选项-Storage,自己新建存储路径,填好路径并取一个名字
file

在具体的摄像头配置的 Storage 里有个存储区域,就可以选设置的路径名称
file

相关文章:

在树莓派上部署开源监控系统 ZoneMinder

原文&#xff1a;https://blog.iyatt.com/?p17425 前言 自己搭建&#xff0c;可以用手里已有的设备&#xff0c;不需要额外买。这套系统的源码是公开的&#xff0c;录像数据也掌握在自己手里&#xff0c;不经过不可控的三方。 支持设置访问账号 可以保存录像&#xff0c;启…...

2022年6月 Frontier 获得性能第一的论文翻译

为百万兆级加速架构做高性能 Linpack 优化 摘要 我们详细叙述了在 rocHPL 中做的性能优化&#xff0c;rocHPL 是 AMD 对 HPL 基准的开源实现&#xff0c;主要是针对节点进行优化的架构&#xff0c;是为百万兆级系统而设计的&#xff0c;比如&#xff1a;Frontier suppercomput…...

B2B商城交易解决方案:赋能企业有效重塑采购与销售新生态

在电商零售领域&#xff0c;商城系统始终是企业搭建商城的关键利器。 伴随着电商行业的蓬勃发展&#xff0c;各类新模式层出不穷&#xff0c;各种商城系统也应运而生&#xff0c;其中B2B商城更是最为常见的一种。 近年来&#xff0c;得益于电子商务的迅猛发展&#xff0c;B2B商…...

初始C语言(五)

前言 本文章就代表C语言介绍以及了解正式完成&#xff0c;后续进行具体分析和详细解析学习。知识根深蒂固才可以应付后来的学习&#xff0c;地基要打好&#xff0c;后续才会轻松。 十四、结构体 结构体是C语言中最最重要的知识点&#xff0c;使得C语言有能力描述复杂的类型。 …...

mysql学习教程,从入门到精通,SQL 修改表(ALTER TABLE 语句)(29)

1、SQL 修改表&#xff08;ALTER TABLE 语句&#xff09; 在编写一个SQL的ALTER TABLE语句时&#xff0c;你需要明确你的目标是什么。ALTER TABLE语句用于在已存在的表上添加、删除或修改列和约束等。以下是一些常见的ALTER TABLE语句示例&#xff0c;这些示例展示了如何修改表…...

【网络基础】网络常识快速入门知识清单,看这篇文章就够了

&#x1f490;个人主页&#xff1a;初晴~ 在现在这个高度智能化的时代&#xff0c;网络几乎已经成为了空气一般无处不在。移动支付、网上购物、网络游戏、视频网站都离不开网络。你能想象如果没有网络的生活将会变成什么样吗&#x1f914; 然而如此对于如此重要的网络&#xf…...

OceanBase 关于一号表笔记与ERROR 1060(42S21)问题

OceanBase 关于客户端访问OceanBase 的表数据的过程说明 1.OBserver中的location cache 会保存observer 曾经访问过的实体表的位置信息(meta table 主要包括 __all_core_table、__all_root_table、__all_tenant_meta_table 三张内部表。OB 集群中所有实体表的 location&#x…...

【四】Spring Cloud OpenFeign原理分析

Spring Cloud OpenFeign原理分析 概述 Spring Cloud 微服务实践也有挺多年了&#xff0c;一直想着总结一下这系列的知识点&#xff0c;最近终于下定决心来出一个Spring Cloud 系列文章了。本文主要围绕fegin组件来进行讲解&#xff0c;文中将会给出基础使用的示例&#xff0c;还…...

EDM平台大比拼 用户体验与营销效果双重测评

本文评测了ZohoCampaigns、Mailchimp、Sendinblue、AWeber四款EDM平台&#xff0c;分别适合中小企业、多平台集成、多功能集成、初学者等需求。建议企业根据自身规模、技术水平和功能需求选择最适合的平台。 一、Zoho Campaigns 功能概述 Zoho Campaigns是Zoho旗下的一款专注…...

开卷可扩展自动驾驶(OpenDriveLab)

一种通用的视觉点云预测预训练方法 开卷可扩展自动驾驶&#xff08;OpenDriveLab&#xff09; 自动驾驶新方向&#xff1f;ViDAR&#xff1a;开卷可扩展自动驾驶&#xff08;OpenDriveLab&#xff09;-CSDN博客 创新点 在这项工作中&#xff0c;本文探索了专为端到端视觉自动…...

基于大数据的二手电子产品需求分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

SpringBoot——基础配置

但是还需要删除pom.xml中的标签——模板的文件也同样操作 banner的选项——关闭 控制台 日志 banner图片的位置——还会分辨颜色 在 Java 的日志框架&#xff08;如 Logback、Log4j2 等&#xff09;中&#xff0c;logging.level.root主要用于设置根日志记录器的日志级别…...

Android OpenGLES2.0开发(三):绘制一个三角形

我们总是对陌生人太客气&#xff0c;而对亲密的人太苛刻 上一篇文章中&#xff0c;我们已经将OpenGL ES环境搭建完成。接下来我们就可以开始我们的绘图之旅了。该篇我们讲解最基本图形三角形的绘制&#xff0c;这是一切绘制的基础。在OpenGL ES的世界里一切图形都可以由三角形拼…...

数据清洗的重要性与方法

在数据分析和机器学习的世界中&#xff0c;数据清洗是一个不可或缺的步骤。 它涉及到对原始数据进行处理&#xff0c;以便使其适合进一步的分析和建模。 数据清洗的重要性 提高数据质量 数据质量直接影响分析结果的准确性。 脏数据&#xff08;包含错误、重复、不完整的数据&a…...

AI与大数据的结合:如何从海量数据中提取价值

引言 在当今数字化时代&#xff0c;数据如同新石油&#xff0c;成为推动社会与商业进步的重要资源。随着物联网、社交媒体和企业运营中数据生成的激增&#xff0c;我们正处在一个数据爆炸的时代。然而&#xff0c;面对海量且复杂的数据信息&#xff0c;仅依靠传统的分析方法已经…...

【漏洞复现】孚盟云oa AjaxSendDingdingMessage接口 存在sql注入漏洞

》》》产品描述《《《 孚盟与阿里强强联手将最受青睐的经典C系列产品打造成全新的孚盟云产品&#xff0c;让用户可以用云模式实现信息化管理&#xff0c;让用户的异地办公更加流畅&#xff0c;大大降低中小企业在信息化上成本&#xff0c;用最小的投入享受大型企业级别的信息化…...

【VUE】案例:商场会员管理系统

编写vuedfr实现对会员进行基本增删改查 1. drf项目初始化 请求&#xff1a; POST http://127/0.0.0.1:8000/api/auth/ {"username":"cqn", "password":"123"}返回&#xff1a; {"username":"cqn", "token&q…...

IDEA 最新版创建 Sping Boot 项目没有 JDK8 选项的解决方案

问题 今天新建一个 Java 项目写 demo 时&#xff0c;发现 Idea 上只能勾选 Java 17、21、23 三个版本 解决方案 IDEA 页面创建 Spring 项目&#xff0c;其实是访问 spring initializr 去创建项目。我们可以通过阿里云国服去间接创建 Spring 项目。服务器 URL 地址替换为 ht…...

Unity Asset Store的默认下载位置及更改下载路径的方法

修改Unity Asset Store的默认下载路径 Unity Asset Store默认下载位置 Unity Asset Store里下载资源&#xff0c;默认是下载到C盘里的&#xff0c;如果你不想做C盘战士的话&#xff0c;记得将下载的资源转移到其他盘。 Unity商城默认下载路径是C:\用户\用户名&#xff08;一般…...

ArcEngine实现要素坐标转换:平移、缩放、旋转(批量处理)

在二维坐标系统中&#xff0c;常见转换坐标&#xff1a;平移、缩放、旋转。在ArcGIS中可以通过工具实现移动 、旋转 和缩放&#xff0c;具体操作如下&#xff1a; &#xff08;1&#xff09;移动要素&#xff1a;可通过指针或指定值以交互方式操作所选要素。移动要素&#xf…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...