是谁动了我的电脑
2022-05-05陈霖凯
陈霖凯
最近朋友A向我诉苦:“总有人趁我不在的时候偷用我的电脑,不是打乱桌面的图标顺序,就是删除我的文件。你能帮我想个办法,找到偷用我电脑的‘真凶’吗?”
要抓到“真凶”,就得找到其偷用电脑的证据,最好的证据就是留下相关的影像!最初,我建议A用电脑自带的摄像头充当监控器。但研讨后我们发现,电脑自带的摄像头录制的视频时间过长,不便于快速查找“真凶”,所以这个方案被否定了。
于是我便思考,能否让笔记本电脑上自带的摄像头在有人靠近电脑时自动拍照,记录“真凶”的影像证据,以便找出“真凶”?
我提出的第一版方案是使用python对摄像头返回的每一帧进行处理,识别出人脸并拍照。这个方案主要通过opencv库及其内置的人脸检测分类器工作,技术较成熟,进行相关的开发也十分便捷。
编写程序后,我发现这个方案存在如下两个问题。
1.该方案在识别人脸时,易受外部环境的干扰而导致识别失败。例如,用一张纸遮住人脸的下半部分后,程序便无法确认摄像头传回的画面中有无人脸。如果“真凶”稍加伪装,遮住人脸的某些特征部位,程序便无法识别。
2.该方案对电脑资源占用过大,性能不佳的电脑运行程序时易导致系统崩溃(朋友A的电脑就因为性能不佳而出现了這样的情况)。
为解决上述问题,我又开始思索:既然基于人脸的识别方式不够精准,能否对人体的其他特征进行监测?
人体会向外辐射红外光,红外光很难被屏蔽。所以,我想使用Arduino这一开源创客神器与人体红外感应模块来找出“真凶”。只要“真凶”进入感应模块的感应区域,红外感应模块就会通过高低电平的变化向Arduino控制板发出信号,Arduino通过USB线与电脑进行串口通信,电脑中运行的上位机程序收到串口传来的信号后,通过接口调用摄像头自动抓拍。
图2为根据上述方案做的装置半成品,但缺少了3D打印的外壳。该装置的主控是一块Arduino Uno,传感器部分使用了人体红外感应模块HC-SR501,用一根数据线与电脑连接,通过串口与电脑端的python脚本通信,操控电脑摄像头拍照。Arduino的具体接线如图3。
人体红外感应模块HC-SR501价格低,按照上图连接性能也可以满足该项目的需求。这个传感器有可重复和不可重复两种触发模式。我选择的是默认不可重复触发模式,即感应输出高电平后,延时时间一结束,输出将自动从高电平变为低电平。模块上有两个可用螺丝刀调节的旋钮,可根据自身情况,调整探测距离等参数。
接下来是编写Arduino与python脚本的具体程序。将Arduino程序输入开发板中,运行python脚本(注意,应将python脚本中的端口号改为自己的电脑对应的端口号,可以通过Arduino IDE查看),先等待传感器初始化(初始化的过程大概耗时一分钟),将装置摆在合适的位置,传感器探头指向需要探测的方向,例如与电脑屏幕对准同一方向,即“真凶”可能出现的方向,然后就可以开启Arduino并正常工作了。
当有人靠近传感器时,电脑会自动拍照。测试时,我模仿“真凶”靠近传感器,该装置立即自动拍照。测试成功!
我已经将这个小装置及脚本的资料发给了A,希望他能早日找到“真凶”!