安全,带一点视频色彩

作者:Marcel Gagné

过来,弗朗索瓦,看看这个。是的,你正在观看几分钟前的你自己的电影。为什么?正如你所知,弗朗索瓦,本期杂志的主题是安全。当每个人都在谈论计算机和网络安全时,我想为我们的客人提供一些不同的东西。安全,就像葡萄酒一样,有很多风味,non(不是吗)?

你看,你正从酒窖回来。你的步态真有趣,mon ami(我的朋友)。弗朗索瓦,你没在看。什么让你分心了?啊,我明白了。我们的客人到了。欢迎,mes amis(我的朋友们)!请坐下,让自己舒服点。弗朗索瓦,跑到酒窖去,把我们早些时候品尝的 1997 年纳帕谷梅洛拿回来。你们会喜欢这款酒的,mes amis(我的朋友们)——深红色,带有浓郁的黑莓和樱桃风味,回味悠长。

他在那里!Mes amis(我的朋友们),请允许我引导你们注意这个显示器。仔细看。正如你们所看到的,弗朗索瓦在酒窖的东翼。我给你们看这个的原因是向你们介绍我们今天的菜单,“带一点视频色彩的安全”。当我们在 Linux 厨房谈论安全时,我们几乎总是指网络安全。在极少数情况下,我们愿意讨论用户安全。但是家庭安全呢?也许你有一个很大的酒窖,你想密切关注它。那不是很贵吗?很复杂吗?你知道吗,你可以建立一个视频监控系统,成本不会比一个廉价的网络摄像头贵多少?在这个配方中,我使用了 Radio Shack 的 Creative Labs CT6840 USB 摄像头、我的 Linux 系统和一些键盘操作。听起来不错?但是等等;正如电视上所说,还有更多。

当与运动检测技术结合使用时,廉价且简单的视频监控尤其有趣。这就是 Lawrence P. Glaister 的 Gspy 背后的想法,这是一个 GNOME 安全摄像头应用程序。你甚至可以使用 Gspy 生成每日 MPEG 电影,以便稍后使用 Berkeley MPEG 工具进行查看(稍后会详细介绍)。该软件以您定义的规则的时间间隔以 JPEG 格式捕获帧。一旦确认没有运动,则写入的帧数较少,尽管所有帧都继续进行日期和时间戳标记。一旦检测到运动,则恢复常规的高帧捕获。这会产生一个延时视频,重点关注感兴趣的区域。图 1 显示了 Gspy 运行中的快照。

Security, with a Sprinkle of Video

图 1. Gspy 的密切注视之下

Gspy 的成功实施将需要 video4linux 扩展(640 × 480 大小)和最有可能的 USB 支持(用于摄像头)。这意味着你可能应该运行一个相当新的 Linux 发行版或内核。要开始使用,请从 gspy.sourceforge.net 获取 Gspy 源代码。

一旦你将源代码安全地放在硬盘上,就到了经典的提取和构建五步法的时候了

tar -xzvf gspy-0.1.4-src.tar.gz
cd gspy
./configure
make
su -c make install

这就是全部。差不多了。我提到了电影的创建,所以让我们看看我们需要做什么。你需要一个名为 mpeg_encode 的程序,它是 Berkeley MPEG 工具的一部分,可在 bmrc.berkeley.edu/frame/research/mpeg/mpeg_encode.html 找到。现在,提取源代码并切换到该目录

tar -xzvf mpeg_encode-1.5b-src.tar.gz
cd mpeg_encode
啊,22 号桌的年轻女士注意到我没有让你们直接跳到经典的提取和构建五步法。干得漂亮,小姐。构建 Berkeley MPEG 工具并不复杂,但确实需要一些预先调整。首先,你需要编辑 Makefile 并注释掉当前的 CFLAGS 定义,并取消注释与 Linux 构建对应的行(只需搜索 LINUX)。然后,你需要注释掉 headers/libpnmrw.h 中的 malloc 定义。以下是该部分的样子
/* #include <malloc.h>
#if !defined(sco) && !defined(sgi) && !defined(IRIX)
extern char* malloc();
#endif */
请注意第一行开头的注释开始符 (/*) 和最后一行结尾的注释结束符 (*/)。我还需要在 libpnmrw.c 中注释掉 extern char* sys_errlist[]; 定义,然后才能构建该软件包。完成所有这些操作后,你可以执行 make,然后执行 su -c make install。你可能会问,有没有更简单的方法?答案是肯定的。如果你在 www.rpmfind.net 上快速搜索 mpeg_encode,你会找到预构建的 RPM。

所以,mes amis(我的朋友们),现在我们拥有了所需的一切。通过键入 gspy & 启动程序。Gspy 使用 /dev/video0 作为默认输入设备,但你可以使用“首选项”菜单更改它。查看图 2,了解配置对话框的快照。我指定了一个名为“spy”的文件夹在我的主目录中。在该文件夹中,应用程序将创建另一个文件夹,其名称是拍摄照片的日期;例如,2002 年 7 月 19 日的文件夹名为 20020719。单个图像存储在文件中,图像的数量取决于几个因素。

再次查看“常规”配置选项卡,我在其中定义了 1 秒的图片间隔。我还告诉程序每 20 秒存储一个图像。这意味着即使未注册运动,仍将每 20 秒保存一帧(包含数据和时间戳)。

Security, with a Sprinkle of Video

图 2. Gspy 的配置选项

其他选项卡允许你指定 video4linux 设备(默认情况下为 /dev/video0)、各种警报阈值和一个复选框,如果你觉得需要在每次注意到运动时让系统发出蜂鸣声。

显而易见的缺点是,你可能会在这个任务上占用相当大的磁盘空间,所以请注意这一点。当你收集到足够的信息后,你可以单击“应用程序”菜单上的“文件”,然后选择将所有帧编译成 MPEG 电影,该电影将被称为 video.mpg。电影创建完成后(记住,帧越多意味着时间越长,所以请耐心等待),你可以启动你最喜欢的 MPEG 查看器并观看动作。除了 GNOME 或 KDE 附带的一些漂亮的图形播放器外,你可能还预装了简单的 plaympeg 程序,作为 smpeg 软件包的一部分。

Motion,顾名思义,是另一个采用 video4linux 支持和运动检测的视频程序。然而,方法略有不同。首先,该程序是基于命令行的,并通过全局配置文件(默认情况下为 /usr/local/etc/motion.conf)提供了大量的配置选项。该程序可以在后台以守护进程方式运行,仅在检测到运动时存储图像。与 Gspy 类似,Motion 还可以获取所有捕获的帧并将它们(使用 Berkeley MPEG 工具)组装成电影,以便稍后观看。Motion 还可以输出到其他程序,在检测前后运行程序,并将数据存储到 SQL 数据库。该网站还提供了与 Motion 一起开发的外部程序的链接。

要开始使用,请访问 Motion 网站 motion.technolust.cx。当我访问时,我获取了该程序的 3.0.4 版本。这是另一个简单的构建,遵循熟悉的提取和构建五步法

tar -xzvf motion-3.0.4.tar.gz
cd motion-3.0.4
./configure
make
su -c make install

这就是全部。要运行该程序,你可以直接键入 motion 并接受 /usr/local/etc/motion.conf 配置文件中存在的所有默认值。或者你可以传递这样的命令行参数

motion -B -w -g 30 -t /home/mgagne/motion
在解释这些参数之前,我应该告诉你,配置文件中的默认值导致程序失败,并出现 VIDIOCGCHAN 错误。那是因为我没有使用视频环回选项(这需要单独的驱动程序),但配置文件仍然设置了它。如果你遇到同样的问题,请注释掉文件顶部附近的 input 2 行。该段落看起来像这样
# The input to be used
# Default: 8
input 2
最后一行是我用井号注释掉的。现在我已经告诉你我的试验和磨难,让我告诉你那些命令行开关。-B 选项告诉 Motion 在注册事件后创建 MPEG 电影。-w 激活光开关过滤器,它告诉 motion 忽略(或多或少)光照水平的变化作为事件,而 -g 选项定义事件之间的时间间隔(秒)。最后,你需要有一个地方来存储这些图像,这就是 -t 选项的用途。

你可能遇到的另一个问题与你如何获得 MPEG 工具有关。如果你从源代码构建,mpeg_encode 程序将在 /usr/local/bin 目录中。如果你使用 RPM 软件包,则二进制文件将在 /usr/bin 下。Motion 在 /usr/local/bin 中查找 mpeg_encode,因此你需要修改配置文件才能使其正常工作。在 /usr/local/etc/motion.conf 中查找以下行,并确保取消注释

mpeg_encode yes

如果你使用 RPM 软件包,请在上面一行下方添加以下行

mpeg_encode_bin /usr/bin/mpeg_encode
当 Motion 运行并捕获时,它会将图像存储在你指定的目录中,但具有以下结构:将有一个年份子目录,然后是月份子目录,然后是小时,最后是分钟。使用 -B 选项生成的电影将出现在日期文件夹中。例如,当我撰写本专栏时,Motion 捕获的电影位于 /home/mgagne/motion/2002/07/19 中。

配置文件包含许多参数,可以在其中设置,而不是在命令行中设置。该文件相当容易理解,你应该花时间仔细阅读它。我发现一个特别有用的设置是这个

jpg_cleanup yes

如果你在每个事件后创建电影,那么删除已保存的 JPEG 图像可能是有意义的。这个小设置将为你自动完成它。还要考虑设置“quiet yes”,除非你希望 motion 在每次检测到运动时都发出蜂鸣声。那样会让人发疯的。

随着结束时间的临近,mes amis(我的朋友们),我必须承认我感到一种被监视的强烈感觉。由于这往往让我有点紧张,我必须与你们分享我最喜欢的平静这些感觉的方法。弗朗索瓦,请最后一次为我们的客人斟满酒杯。无论你做什么,都要确保将摄像头对准酒窖。直到下个月。A votre santé(祝您健康)!Bon appétit(祝您好胃口)!

资源

Marcel Gagné 居住在安大略省密西沙加市。他是 Addison-Wesley 出版的《Linux 系统管理:用户指南》(ISBN 0-201-71934-7)的作者(目前正在撰写他的下一本书)。可以通过电子邮件 mggagne@salmar.com 与他联系。

加载 Disqus 评论