前言

有时候离开电脑忘记锁屏,就会担心电脑屏幕被家长、同事偷看。如何利用20元制作笔记本电脑防偷窥神器,我打算从硬件+软件来实现,这里需要你懂亿点点单片机的知识。如果光从软件上实现并不太现实,因为需要一直打开笔记本的摄像头。

硬件
硬件 价格
Arduino pro mini 10
热释电传感器 7

Arduino pro mini是的价格在10-13元左右,人体红外传感器的价格在7-8元,硬件成本在20元。

软件
  • Arduino IDE
  • Pycharm
  • python3
原理

当人靠近电脑时,红外传感器检测到热体靠近,发送高电平到MCU,MCU与主机电脑利用串口通信,再利用主机摄像头对热体进行人脸识别,识别为人脸,则主机关闭屏幕,达到防窥视的目的。

安装库
pip install opencv-python
pip install pyserial
pip install itchat
pip install apscheduler
pip install baidu-aip
Arduino程序

红外传感器的使用即程序,可以参考我之前的博文Arduino使用人体红外传感器,我们直接把程序烧录进Arduino上,不要忘了打开串口检测一下程序是否正常运行。

/**richowe */int sensor_pin = 2;
int c = 0;void setup() {Serial.begin(9600);pinMode(sensor_pin,INPUT);Serial.flush();
}void loop() {int val = digitalRead(sensor_pin);if (val == 1){delay(50);if (val == 1){c = 1;                            //反转c值Serial.println("have people");    delay(5000);delay(5000);                        //延时10s}}else if (c==1 && val==0){c = 0;Serial.println("people left");      //当人离开的时候打印}
}
与主机的串行通信

串行通信利用的pyserial,实现方法可以参考我之前的博客Linux串口通信Arduino#2。

ctypes实现待机

利用python内置函数ctypes实现锁屏,现在给出demo程序,运行程序,成功锁屏。

from ctypes import *
def closewindows():user32 = windll.LoadLibrary('user32.dll')user32.LockWorkStation()
if __name__ == "__main__":closewindows()
opencv

利用opencv打开笔记本的摄像头,实现拍照,再进行一个人脸识别或人体识别,判断热体是否为人体。如何使用opencv打开笔记本摄像头可参考我之前的博客Python opencv图像处理。

itchat

要实现远程控制,我这里想到的是之前有学习使用的网页版的itchat,使用itchat我们可以离开电脑之后实现远程监测我们的电脑前的环境。itchat的基础操作可以参考Python微信操控itchat定时发送消息。

百度AI平台

百度AI平台提供了很多接口,在这个项目上,我们可以利用到百度提供的人脸识别、人体识别的SDK。调用百度的接口可参考Python利用百度AI平台实现人脸识别。

实现方法
  • 方法一
    当有人靠近时,电脑屏幕直接锁定。大家要先给Arduino开发板烧录好程序,我们直接读取串口数据再利用python内置函数ctypes实现锁屏。
    我们先来接收一下串口数,看一下格式是怎样的。
import serialport = "COM4"   #Arduino串口地址
rates = 9600    #设置波特率
ser = serial.Serial(port, rates, timeout=1)   #设置串口
ser.flushInput()    #清空缓存器while True:line = ser.readline()print(line)

接收到的数据格式是b’ \r\n’ ,例如:b’have people\r\n’

接下来,就直接编写锁定程序,方法一

import serial
from ctypes import *port = "COM4"   #Arduino串口地址
rates = 9600    #设置波特率
ser = serial.Serial(port, rates, timeout=1)   #设置串口
ser.flushInput()    #清空缓存器def closewindows():while True:line = ser.readline()if (line == b'have people\r\n'):user32 = windll.LoadLibrary('user32.dll')user32.LockWorkStation()if __name__ == "__main__":closewindows()

运行程序,红外传感器检测到热源,电脑屏幕自动锁定,当然,记住设置密码,这样别人就不会轻易偷窥到你的电脑屏幕啦。

  • 方法二
    如果热源不是人的时候,是家里的小宠物的时候,那我们就可以利用opencv对热源进行拍照,再通过百度AI平台进行人脸识别,确定是热源是人的时候再将电脑屏幕关闭。
    首先,我们先要调用opencv进行拍照,接着再将照片保留成jpg格式。
import cv2def get_photo():cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)  # 打开摄像头ret, img = cap.read()  # ret为返回值,img为当前帧img1 = cv2.flip(img, 1)  # 图像反转,1为左右对换time.sleep(2)            #  延迟2scv2.imwrite("img.jpg", img1)  # 保存停止帧图cap.release()          #释放摄像头

接着,我们调用人脸识别接口,对图片是否为人像进行判断,判断为人像,屏幕锁定。当检测到不是人脸的时候,百度接口会返回这样的信息error_msg:pic not has face,当检测到正常人脸的时候,有几条信息都是可以代表是人脸,但face_token是百度唯一的人脸标识,并且为一串字符。

直接po程序

import cv2,time,serial,base64
from ctypes import *
from aip import AipFace# 串口参数设置
port = "COM4"  # Arduino串口地址
rates = 9600  # 设置波特率
ser = serial.Serial(port, rates, timeout=1)  # 设置串口
ser.flushInput()  # 清空缓存器# 百度接口
APP_ID = '19492922'
API_KEY = 'nlyImVonYtURm1IcYpqvYRZn'
SECRET_KEY = 'jiMf0auF7DW2iptPElirp5n4L5esFYeC'
client = AipFace(APP_ID, API_KEY, SECRET_KEY)def closewindows():while True:line = ser.readline()if (line == b'have people\r\n'):get_photo()face_check()def face_check():with open("img.jpg", "rb") as f:img_data = f.read()data = base64.b64encode(img_data)image = data.decode()imageType = "BASE64"client.detect(image, imageType)options = {}options["max_face_num"] = 10res = client.detect(image, imageType, options)#print(res)if (res['error_msg'] == 'pic not has face'):print("not has people")elif (res['result']['face_list'][0]['face_token'] != 'NONE'):user32 = windll.LoadLibrary('user32.dll')user32.LockWorkStation()def get_photo():cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)  # 打开摄像头ret, img = cap.read()  # ret为返回值,img为当前帧img1 = cv2.flip(img, 1)  # 图像反转,1为左右对换time.sleep(2)cv2.imwrite("img.jpg", img1)  # 保存停止帧图cap.release()if __name__ == "__main__":closewindows()
  • 方法三
    利用itchat进行微信监控,当检测到热体的时候,拍照并将照片发到微信,我们可以判断是否锁屏。
    直接给出程序
import itchat
import serial
import cv2
import time
from ctypes import *
from itchat.content import PICTURE, RECORDING, ATTACHMENT, VIDEO, TEXT, MAP
from apscheduler.schedulers.background import BackgroundSchedulerport = "COM4"   #Arduino串口地址
rates = 9600    #设置波特率ser = serial.Serial(port, rates, timeout=1)   #设置串口
ser.flushInput()    #清空缓存器def job_function():val = 1while True:line = ser.readline()if (val == 1 and line == b'have people\r\n'):itchat.send("有人靠近,正在获取图像...",toUserName="filehelper")get_photo()itchat.send_image("img.jpg", toUserName="filehelper")val-=1time.sleep(10)elif (line == b'people left\r\n'):itchat.send("已经离开...",toUserName="filehelper")val+=1break@itchat.msg_register([TEXT,PICTURE])
def send_photo(msg):if (msg.text == "拍照"):get_photo()itchat.send("正在拍照...",toUserName="filehelper")itchat.send_image("img.jpg", toUserName="filehelper")elif (msg.text == "锁屏"):user32 = windll.LoadLibrary('user32.dll')user32.LockWorkStation()itchat.send("执行锁屏!", toUserName="filehelper")def get_photo():cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)  # 打开摄像头ret, img = cap.read()  # ret为返回值,img为当前帧img1 = cv2.flip(img, 1)  # 图像反转,1为左右对换time.sleep(2)cv2.imwrite("img.jpg", img1)  # 保存停止帧图cap.release()scheduler = BackgroundScheduler()scheduler.add_job(job_function, 'interval', minutes=1)if __name__ == '__main__':itchat.login()scheduler.start()itchat.run()

防拔下!!!剩下的完整程序写完后上传

20元制作笔记本电脑防偷窥神器相关推荐

  1. 机器人x展架制作_门型展架80*180易拉宝x展架海报架广告架立牌展示架地推海报2元优惠券券后价20元...

    ★门型展架80*180易拉宝x展架海报架广告架立牌展示架地推海报,2元拼多多优惠券★券后价20元★★★门型展架80*180易拉宝x展架海报架广告架立牌展示架地推海报¥20元¥22元已拼5299件点击抢 ...

  2. python名片制作代码_教你做一张能运行 Python 的名片,成本只要20元!

    原标题:教你做一张能运行 Python 的名片,成本只要20元! 作为一名普普通通的开发者,改变世界估计是办不到了,但可以让世界更 Geek 一些. 极客名片的诞生 如标题所说,表面上看这是一个名片, ...

  3. SEO优化论坛让我懂了没团队经验,看如何制作短视频赚钱一天20元

    SEO优化论坛让我懂了没团队经验,看如何制作短视频赚钱一天20元 都知道短视频博主特赚钱. 可是咱们自己一没经验. 二没团队. 连做什么内容都没人告诉我. 也想过找人知道,但是肯定得花钱,花钱倒是不怕 ...

  4. 我的名片能运行Linux和Python,还能玩2048小游戏,成本只要20元

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 猜猜它是什么?印着姓名.职位和邮箱,看起来是个名片.可是右下角有芯片,看起来又像是个PCB电路板. 其实它是一台超迷你的ARM计算机,不仅 ...

  5. 上海公布公交卡成本 押金拟从30元调至20元

    人民网上海6月20日专电(记者 沈文敏)曾因押金过高而备受质疑的上海公共交通卡,其押金式普通卡成本和押金使用情况的审计结论近日正式公布.根据审计情况,上海在今年底前拟对交通卡的押金由目前的30元调低至 ...

  6. FL Studio 20音乐制作教程

    FL Studio 20音乐制作教程 FL Studio 20 中的音乐制作 – 制作 3 首完整曲目 – 只需一天即可管理 FL Studio,音乐.混音和母带制作 课程英文名:FL Studio ...

  7. 在天猫开店,成本20元,卖60也亏本,这是为什么?

    导读:有的人做了3.4年电商,还弄不明白"成本"里包含哪几项.就像央视打星巴克咖啡,以为出厂价20元拿到手的产品,只要卖上40元,自己就赚了一倍.事实上,在今天,如果你在" ...

  8. 借贷宝详细注册步骤:邀请朋友送20元,朋友再邀请朋友还送你10元【3天已赚6千】(附我的邀请记录和提现到账截图)...

          九鼎8月8日开始正式推广"借贷宝",推广费用为20亿.按照熟人带熟人的模式推广:A带B.B带C.C带D --依次类推,呈病毒式传播.无论谁只要通过扫描上一级人员的二维码 ...

  9. 线上每课时20元 北京上海义务教育阶段学科类校外培训指导价公布

    1月2日消息,近日,北京.上海相继公布了义务教育阶段学科类校外培训政府指导价. 北京市市发改委会同市教委.市市场监管局发布<北京市义务教育阶段学科类校外培训收费管理办法(试行)>,并同步出 ...

  10. ofo在北京上线有桩模式,违规最高罚20元

    据悉,ofo在北京正式上线有桩新模式,有桩点位数量达20000个. ofo官方APP显示,"北京五环内还车新规:请根据手机端到停车点完成还车,否则需缴纳20元车辆管理费." 据of ...

最新文章

  1. C#苹果应用开发——第一讲初始Xamarin
  2. 深入浅出之Smarty模板引擎工作机制(一)
  3. Python报错:IndentationError: expected an indented block
  4. Python基础知识-优雅的with as语句
  5. Java 可重入锁内存可见性分析
  6. IEnumerable.EachTSource(FuncTSource, TSource predicate) 逐个更改列表成员的值
  7. mysql 主键 最佳实践_设计套路:Mysql主键的选取
  8. red6.4 mysql_rhel6.4 yum本地yum源配置
  9. (计算机组成原理)第五章中央处理器-第四节4:微程序控制单元设计
  10. JeecgBoot 2.4.3版本发布,企业级低代码平台
  11. 【李宏毅2020 ML/DL】P24 Semi-supervised
  12. 01 Nginx的高并发处理
  13. 【渝粤教育】国家开放大学2019年春季 3818-22T燃气工程施工 参考试题
  14. 模拟经营游戏框架构思
  15. win10 jFrameDesigner安装
  16. JAVA之父----詹姆斯.高斯林
  17. python三维建模和cad比较_对比Revit和CAD三维建模的不同
  18. matlab绘制心形函数
  19. quartus ii怎么生成pof和下载pof文件
  20. 风向值与风向描述定义

热门文章

  1. animation之补间动画
  2. 头像怎么画,日系头像绘画教程
  3. Android 拨号盘按键音修改为钢琴音效果实现
  4. centos格式化优盘命令_centos 格式化分区
  5. 1.DingoApi安装和配置
  6. AppCompatActivity设置透明背景
  7. 中年危机也许只是个幻觉
  8. 16S rDNA测序和宏基因组测序区别
  9. python采用强制缩进的方式使得代码具有极佳的可读性_计算机专业高级语言程序设计课程改革探索...
  10. Linux第7章Gdk及Cairo基础,Linux第7章Gdk及Cairo基础.ppt