65.9K
CodeProject 正在变化。 阅读更多。
Home

Raspberry Pi 作为低成本高清监控摄像头

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.96/5 (111投票s)

2013 年 10 月 11 日

CPOL

14分钟阅读

viewsIcon

2840407

downloadIcon

12799

构建一个低成本高清视频监控摄像头,可从任何浏览器全球访问

引言

本文介绍了如何利用树莓派微型计算机构建一个监控摄像头,当监控区域内有物体移动时,它能够录制高清视频。您还可以通过任何网页浏览器观看实时画面,甚至在旅途中通过手机观看。

您将获得

  • 随时随地在任何网页浏览器上查看实时流
  • 将任何移动录制成视频文件

通常,这样的摄像头成本约为 1,000 美元,但通过本文的介绍,您只需花费约 120 美元即可获得这样的摄像头。

 

背景

 

您听说过树莓派吗?它是一款低成本的微型计算机,能够运行 Linux,并具有无限的扩展可能性。它仅售约 35 美元,为您提供了无限的创意空间。其官方网站为 http://www.raspberrypi.org/

 

硬件组件

 

本项目需要一些硬件。以下是我们所需主要物品的清单:

  • 树莓派 B 型:这是树莓派计算机系统较大的型号,拥有 700MHz 处理器和 512MB 内存。它支持高清视频。您可以轻松地从例如 这里 订购。价格:约 40 美元


    您也可以使用 树莓派 A 型,它更便宜且功耗更低。Stefan Knight 撰写了一篇 精彩文章,介绍如何在 A 型或 B 型树莓派上运行此项目。如果您计划使用 A 型,请阅读 那篇文章
     
  • 树莓派摄像头模块:该模块是专为树莓派微型计算机设计的。它有一个连接器可以直接插入树莓派主板,并支持高达 1080p 的高清视频。网站 http://www.rs-components.com/raspberrypi 将显示您可以在您所在国家/地区订购的地点。例如,http://www.alliedelec.com/lp/130513rasocameramodule/ 在美国销售此摄像头,价格仅为 29 美元
    稍后还将推出适用于树莓派的红外摄像头模块(http://www.raspberrypi.org/archives/5089)。我们尚未有机会对其进行测试,但它也应该适用于此监控摄像头。


     
  • 摄像头外壳:您无需为您的树莓派购买昂贵的外壳。市面上有大量非常便宜的假监控摄像头,它们非常适合我们的需求。在网上搜索“监控摄像头dummy”(监控摄像头仿制品),您会找到许多只需几美元的外壳。例如,这款可以满足需求:http://amzn.to/15XLaAj,价格仅为 9 美元。我们在德国订购了这款摄像头外壳,花费约 20 欧元,内部有足够的空间容纳所有组件:http://amzn.to/19CTEaN。您可以使用任何摄像头外壳,但请注意外壳尺寸,确保树莓派主板能够放进去。树莓派主板的尺寸为 85.6 x 53.98 x 17 毫米(约 3.37 x 2.13 x 0.67 英寸)。

     
  • 电源:树莓派计算机不附带电源,您需要自己购买。任何带有 micro-USB 插头的电源都可以,只要它能提供至少 1A 的电流。我们订购了这样的电源,它已经带有 micro-USB 插头,价格约为 10 美元

     
  • SD 卡:由于树莓派没有内置存储,您需要添加一些存储空间来安装和运行该设备的操作系统。任何 SD 或 microSDHC 卡都可以,但我们推荐使用Class 10 SD 卡。价格仅为 7 美元左右。

     
  • 要将此摄像头连接到您的网络,您还需要某种网络连接。一种选择是使用 LAN 连接,但这需要在您安装摄像头的位置铺设 LAN 线缆。更好的选择是这种WiFi USB 适配器,价格仅为 10 美元左右。


  •  

就是这样:大约 120 美元,我们就拥有了构建此高清监控摄像头所需的所有硬件。

 

安装 Raspbian

 

首先,您应该在将所有组件组装在一起之前,在树莓派上安装操作系统和软件。操作系统是告诉树莓派硬件如何工作的基本软件。Linux 非常适合此任务。我们选择了Raspbian,因为它是树莓派上最先进的操作系统之一,网上有很多帮助和教程。

您需要准备 SD 卡以便在树莓派上运行 Raspbian:Adafruit 提供的这篇精彩教程将解释必要的步骤。

现在,暂时将您的树莓派主板连接到 LAN 线缆、显示器(HDMI 电视开箱即用,但像这款的 HDMI 转 DVI 线也可以)和 USB 键盘,以进行基本设置。

插入已准备好 Raspbian 安装程序的 SD 卡,然后连接电源。

树莓派应该会启动并引导您完成设置过程,如 Adafruit 的这篇教程所述。完成此操作后,您应该就拥有了一个基本的 Raspbian 操作系统。

请确保在 Raspbian 中启用 SSH,以便在没有连接显示器和键盘的情况下也能控制树莓派设备。您还应该从 Raspbian 设置菜单中启用摄像头,以便我们将其用于运动检测。

现在,请确保您的 RPI 已更新

sudo apt-get install rpi-update
sudo rpi-update

并更新所有软件包

sudo apt-get update
sudo apt-get upgrade

 

通过 SSH 连接

 

基本设置完成后,您应该从计算机连接到您的树莓派设备。您可以从本地网络中的任何计算机连接到 Linux 控制台,并像直接坐在它前面一样控制它。这一点非常重要,因为一旦将其安装在离您的桌面很远的地方,您就需要能够随时进行更新和更改此摄像头的配置,而无需将其从墙上取下并带回您的桌面。

请记住,这个摄像头不仅仅是一个普通的摄像头设备,而是一个运行 Linux 操作系统的强大计算机。它不仅限于我们现在文章中介绍的功能;它将遵循软件的所有发展,使您能够在将来任何时候安装更新的软件和更多模块。

首先,您需要一个软件来连接到树莓派上的 Linux 控制台。对于 Windows,您需要额外的(免费)软件 PuTTY。从 PuTTY 网站下载,安装它,然后连接到您的树莓派设备。

从现在开始,您将不再需要在树莓派上连接显示器和键盘。

 

启用 WiFi

 

如果您想使用 WiFi USB 加密狗(如我们上面建议的)运行此摄像头,您将需要执行一些快速的附加步骤,以使 WiFi 在树莓派上正常工作。

从控制台(PuTTY 窗口)编辑树莓派的网络属性。

sudo nano /etc/network/interfaces

现在,在文件末尾添加这些行(或更改现有行以匹配这些行):

allow-hotplug wlan0 
iface wlan0 inet dhcp 
wpa-ssid "YOUR NETWORK SSID"
wpa-psk "WIFI PASSWORD"

(填写您的 WiFi 网络的 SSID 和密码)

使用此命令重启树莓派,看看它是否能正确连接到您的 WiFi 网络。

sudo reboot

 

组装硬件

 

现在是时候将所有硬件组件组装到外壳中了。根据外壳的不同,这应该不是一项太复杂的任务。

请确保安全地固定树莓派主板,使其不会在外壳中晃动。

由于我们的外壳前面有一个非常大的玻璃窗,我们用一张带孔的黑纸将其封住。

这样做的优点是摄像头“技术”不再可见。如果您希望摄像头录制的 LED 灯可见,请不要遮挡它。每当摄像头检测到任何移动或正在录制时,LED 灯都会发出非常明亮的红色光。

您还可以通过将此行添加到 /boot/config.txt 来关闭摄像头的红色 LED。

disable_camera_led=1

 

安装运动检测软件

 

一个非常好的(免费开源)运动检测/监控软件,具有许多配置选项,是motion

我们现在需要使用命令行进行安装(以用户“pi”登录到您的树莓派):

sudo apt-get install motion

安装过程中会安装一些软件包;只需键入“y”即可继续安装。

由于 motion 的当前版本(尚未)支持树莓派摄像头模块,我们需要下载并安装一个支持此摄像头模块的特殊版本。

cd /tmp 
sudo apt-get install -y libjpeg62 libjpeg62-dev libavformat53 libavformat-dev libavcodec53 libavcodec-dev libavutil51 libavutil-dev libc6-dev zlib1g-dev libmysqlclient18 libmysqlclient-dev libpq5 libpq-dev
wget https://www.dropbox.com/s/xdfcxm5hu71s97d/motion-mmal.tar.gz

现在您需要将下载的文件解压到 /tmp 目录。

tar zxvf motion-mmal.tar.gz

解压后,您需要使用下载的版本更新已安装的 motion。

sudo mv motion /usr/bin/motion
sudo mv motion-mmalcam.conf /etc/motion.conf

您还需要启用 motion 守护进程,以便 motion 始终运行。

sudo nano /etc/default/motion

并将该行更改为:

start_motion_daemon=yes

我们很有信心,motion 的官方版本很快也将支持树莓派摄像头模块。

编辑 motion 配置文件的一个非常重要的命令是:

sudo nano /etc/motion.conf

注意:在标准的 motion 安装中,motion.conf 位于 /etc/motion/ 目录中,但在 Dropbox 网址(见上文)提供的特殊 motion-mmal 版本中,它位于 /etc/ 目录中。如果您按照本教程的所有步骤进行操作,这根本不是问题。

请确保文件权限正确:如果您在以用户“pi”登录时通过 SSH 安装 motion,您需要确保授予用户“motion”在重启后作为服务运行 motion 的权限。

sudo chmod 664 /etc/motion.conf
sudo chmod 755 /usr/bin/motion
sudo touch /tmp/motion.log
sudo chmod 775 /tmp/motion.log

我们对 motion.conf 文件进行了一些更改以满足我们的需求。我们当前的 motion.conf 文件可以在此处下载:raspberry_surveillance_cam_scavix.zip。如果您想使用我们下面描述的确切配置选项,只需下载、解压并保存为 /etc/motion.conf。

我们 motion.conf 的一些主要更改包括:

确保 motion 始终作为守护进程在后台运行。

daemon on

我们想将日志文件存储在 /tmp 中(否则,自动启动用户将无法在 /home/pi/ 文件夹中访问它)。

logfile /tmp/motion.log

由于我们想使用高质量的监控视频,我们将分辨率设置为 1280x720。

width 1280
height 720

我们不需要实时视频,每秒 2 帧对我们来说已经足够了。

framerate 2

这是 motion 软件的一个非常方便的功能:在检测到图像中的运动之前和之后记录一些(在我们的配置中是 2 帧)帧。

pre_capture 2
post_capture 2

我们不想要无尽的电影。相反,我们希望将运动视频分成最多 10 分钟的片段。此配置选项已从 max_movie_time 重命名为 max_mpeg_time。如果您使用 motion-mmal 版本,此选项将起作用。如果您收到“未知配置选项‘max_mpeg_time’”的错误,请将其更改为 max_movie_time,或确保您确实使用了上面所示的 motion-mmal 版本。

max_mpeg_time 600

由于某些媒体播放器(如 VLC)无法播放录制的视频,我们将编解码器更改为 msmpeg4。然后,视频可以在所有播放器中正确播放。

ffmpeg_video_codec msmpeg4

启用对实时流的访问,以便从任何地方访问。否则,只有 localhost(=树莓派设备)才能访问实时流。

stream_localhost off

如果您想通过用户名和密码保护实时流,您应该启用此项。

stream_auth_method 2  
stream_authentication SOMEUSERNAME:SOMEPASSWORD

所有配置参数都在 motion 配置文档 中进行了详细解释。

修改 motion.conf 后,重启树莓派。

sudo reboot

重启后,摄像头模块的红灯应该会亮起,这表明 motion 当前正在使用摄像头检测任何运动。

 

将视频保存在 Windows 共享文件夹中

 

由于树莓派的 SD 卡资源相当有限,我们决定让树莓派摄像头将视频存储在我们的一台 Windows 服务器上。这很容易。

首先,从某台 Windows 机器上共享一个文件夹。如果您以前从未从 Windows 机器共享过文件夹,请遵循互联网上的指南

然后,从 PuTTY 控制台或直接从设备打开树莓派上的 fstab 配置文件。

sudo nano /etc/fstab

现在,添加一个额外的行来配置您的 Windows 网络共享文件夹。

//YOURSERVERNAME/YOURSHAREDFOLDERNAME /mnt/camshare cifs username=YOURSHAREDFOLDERUSERNAME,password=YOURSHAREDFOLDERPASSWORD,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0

确保用户具有将文件保存到该共享文件夹的正确权限。

重启后,树莓派应该有一个额外的文件夹 /mnt/camshare 挂载到 Windows 共享文件夹。您现在应该在 motion.conf 中设置:

target_dir /mnt/camshare

以便 motion 将所有视频保存到 Windows 计算机上的共享文件夹。

 

修复 motion 自动运行

 

我们在 motion 在树莓派重启时未自动启动时遇到了一些麻烦。我们发现这是因为当 motion 尝试访问时,Windows 计算机的挂载文件夹尚未准备就绪。

一个快速的修复解决了我们的问题。

只需使用以下命令编辑 motion 文件:

sudo nano /etc/init.d/motion

并在启动序列中添加以下行:

sleep 30

到启动序列中。

我们修改后的 /etc/init.d/motion 脚本可以在附带的raspberry_surveillance_cam_scavix.zip 中找到。

 

安装摄像头

 

完成所有这些步骤后,您就可以将监控摄像头安装到目标位置了。

一些有用的提示

  • 请务必将电源放置在干燥安全的地方。
  • 关注 WiFi 信号:如果您将摄像头安装在 WiFi 范围之外,它将无法发送任何实时视频或保存任何运动视频。

 

访问实时流

 

现在,您可以从任何浏览器通过 URL http://IPADDRESSOFRASPBERRY:8080 访问摄像头的实时流。

其中 8080 是我们在 motion.conf 文件中为我们的流配置的端口。请参阅您自己的 motion.conf 中的“stream_port”配置设置以了解端口。

我们发现 Google Chrome 30(即使在 iOS 上也不是)由于底层 Chromium 项目中的一个错误,无法直接播放此流。
一种解决方法是创建一个简单的 HTML 文件,其中包含一个带有摄像头流 URL 的大图像。请参阅 raspberry_surveillance_cam_scavix.zip 中的 cam.html 文件。这样,Chrome 也可以显示实时流。希望 Chrome 能在其浏览器中修复此问题。

但其他浏览器,如 FireFox、Safari 甚至VLC 媒体播放器都能够显示摄像头的实时流。

我们未能使 Internet Explorer 中的实时流正常工作,因为它不支持Motion JPEG。Kenneth Lavrsen(motion 的开发者)在此描述了 Internet Explorer 中实时流的解决方法。

 

从任何地方访问实时流

 

要使实时流从任何地方都可访问,您需要为本地网络启用某种动态域名服务。这将使您能够始终从外部连接到您的本地 IP 地址,即使您的本地 IP 地址发生变化(在德国,每个私人 DSL IP 地址每 24 小时更改一次)。

此类(免费)服务使您能够从任何地方访问您的树莓派,即使您的 IP 地址发生变化。我们使用了很多年的一个很好的服务是dyn.com。他们有一些免费服务,并且已集成到许多路由器中。另一个好的服务是anydns.com

设置好动态 IP URL 后,您就可以在浏览器中从任何地方访问摄像头流(例如 http://YOURDYNAMICDOMAIN:8080)。

这也适用于您的移动设备上的浏览器。

 

后续步骤

 

现在,您可以对这样的监控摄像头基本设置做成千上万件事情。当检测到运动时发送Growl通知怎么样?本指南解释了如何轻松添加此功能。

或者您可以轻松地为摄像头添加一个温度传感器。它只需要几美元,并且可以非常轻松地集成

我们目前正在努力将实时流集成到 MediaPortal 服务器中,这样我们就可以切换到一个电视频道,在办公室里观看摄像头的实时流。(无效)

如果您需要额外的安全性,您还可以为摄像头添加电池组。请务必购买一个能够同时充电并为树莓派供电的电池组。这将使您能够检测是否有人切断了摄像头的电源,并向您发送警报消息(例如 SMS 或电子邮件),包括干扰者的视频。

您打算添加什么?让我们知道!
 

 

历史

 

10/11/2013:
文章初稿
11/1/2013:
更新了 motion.conf(新文件可在附件 zip 文件中找到),以使用 /tmp 文件夹进行日志记录,使用 msmpeg4 编解码器和其他一些更改。
11/24/2013:
重写了“安装运动检测软件”段落。
添加了一些用户注释(例如,A 型型号和流式传输到 Internet Explorer)。感谢您的帮助(请参阅下面的评论)!
更新了附件中的 motion.conf。
11/26/2013:
添加了有关权限、max_mpeg_time 配置和 motion.conf 位置的一些注释。感谢您的评论(见下文)!
将附件 motion.conf 中的端口 8080/8081 更改为与文章中描述的端口匹配。
11/28/2013:
为某些命令添加了“sudo”。
添加了“sudo touch /tmp/motion.log”,以便在 motion.log 不存在时正确创建它。
05/10/2014:
进行了一些文本更改和小型更新。

 

 

 

 

 

 

 

 

 

 

 

© . All rights reserved.