




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式人工智能技术应用项目四基于人脸检测算法实现家用设备的控制基于人脸检测的门禁控制教学任务三职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三基于人脸检测的门禁控制教学理解通过人脸识别完成门禁控制的实验流程。能够利用人脸识别算法,使用数据库完成用户注册;能够调用算法识别的特征数据与数据库中的数据做比对;能够结合人脸检测算法和门禁控制方法完成实验。职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三基于人脸检测的门禁控制教学
本实验将实现通过调用opencv模块、人脸检测算法库、sqlite3模块、serial模块对采集的图像进行人脸检测,如果是已注册用户,则打开电子锁。任务描述任务要求使用人脸检测算法提取人脸特征并注册到数据库;使用人脸检测算法将新采集的人脸图像与数据库中的数据计算相似度;如果识别成功,则通过串口模块开启门锁。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三基于人脸检测的门禁控制教学任务分析门禁系统构建可能会涉及到哪些步骤?根据自己的了解说说智能电子锁原理?任务分析与计划03任务计划表项目名称基于人脸检测算法实现家用设备的控制任务名称基于人脸检测的门禁控制教学计划方式自主设计计划要求请用5个计划步骤来完整描述出如何完成本次任务序号任务计划1
2
3
4
5
通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三基于人脸检测的门禁控制教学智能门锁204知识储备电子门锁1SQLite-python433SQL语句电子门锁04电子锁是一种通过密码输入来控制电路或是芯片工作(访问控制系统),从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。电子门锁04电子锁对机械锁不构成威胁一是复杂化,因为锁具本身是一种机械卡阻机构,最终还要靠机械动作来完成。而电子锁必须完成机械动作(操作)—电子转换和电子控制—机械执行这一系列过程,显然是复杂一些。二是故障概率相对较高,电子器件一多,一复杂,必然增加故障机率,加上电子器件怕潮湿,怕强磁电,怕强震动,使它对使用环境有一定要求。三是电子锁必须用电,早期的电子锁耗电较多。电子门锁的优势智能门锁204知识储备电子门锁1SQLite-python433SQL语句智能门锁04智能门锁是指区别于传统机械锁的基础上改进的,在用户安全性、识别、管理性方面更加智能化简便化的锁具。智能门锁是门禁系统中锁门的执行部件。智能门锁区别于传统机械锁,是具有安全性,便利性,先进技术的复合型锁具。智能门锁04(1)安全性。安装指纹锁后,应当不影响用防盗门的功用。锁具不存在明显的安全隐患。(2)稳定性。是指纹锁最重要的指标,一般需一年以上的实际使用后才会慢慢稳定下来,定型。(3)通用性。应当适用国内大部分的防盗门(符合2008版防盗门国家标准),改装量少。好的指纹锁安装时间应不高于30分钟。否则用户一般难以自己完成安装与维护。通用性设计得好,也可有效降低经销商库存。(4)智能性。进行增加,删除等操作,应当非常简单,用户不用记忆过多的口令与代码。高性能指纹锁还配有视频显示系统,用户操作比较方便。智能门锁外观特点智能门锁04(1)指纹锁,全称是电子指纹锁,常见功能通为指纹、密码、刷卡、机械钥匙四合一开锁方式。它普通机械锁升级为电子锁的替代品。防盗级别为A级。(2)智能锁,全称电子智能锁,它包含电子指纹锁的基本功能,增加上联网功能,可实现远程操控,是电子指纹锁的升级版,防盗级别为B级。(3)安防指纹锁,包含电子指纹锁的全部功能,是按照国家防盗锁具技术标准设计,是家庭防盗门锁的实用性产品,防盗级别为C级。(4)安防智能锁,包含电子指纹锁,电子智能锁,安防指纹锁的全部功能,是锁具行业技术含金量最高的产品,防盗级别为超C级智能门锁级别分类智能门锁204知识储备电子门锁1SQLite-python433SQL语句SQL语句04SQLSELECT语句SELECT语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。SQLSELECT语法:SELECTcolumn_name,column_nameFROMtable_name;与SELECT*FROMtable_name;SQL语句04SQLORDERBY关键字ORDERBY关键字用于对结果集进行排序。ORDERBY关键字用于对结果集按照一个列或者多个列进行排序。ORDERBY关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用DESC关键字。SQLORDERBY语法:SELECTcolumn_name,column_nameFROMtable_nameORDERBYcolumn_name,column_nameASC|DESC;SQL语句04SQLINSERTINTO语句INSERTINTO语句用于向表中插入新记录。INSERTINTO语句用于向表中插入新记录。INSERTINTO语句可以有两种编写形式。第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:INSERTINTOtable_nameVALUES(value1,value2,value3,...);第二种形式需要指定列名及被插入的值:INSERTINTOtable_name(column1,column2,column3,...)VALUES(value1,value2,value3,...);SQL语句04SQLUPDATE语句UPDATE语句用于更新表中的记录。UPDATE语句用于更新表中已存在的记录。SQLUPDATE语法:UPDATEtable_nameSETcolumn1=value1,column2=value2,...WHEREsome_column=some_value;注意:SQLUPDATE语句中的WHERE子句,WHERE子句规定哪条记录或者哪些记录需要更新。如果您省略了WHERE子句,所有的记录都将被更新!SQL语句04SQLDELETE语句DELETE语句用于删除表中的记录。DELETE语句用于删除表中的行。SQLDELETE语法:DELETEFROMtable_nameWHEREsome_column=some_value;注意:SQLDELETE语句中的WHERE子句,WHERE子句规定哪条记录或者哪些记录需要删除。如果省略了WHERE子句,所有的记录都将被删除!智能门锁204知识储备电子门锁1SQLite-python433SQL语句SQLite-python04SQLite3可使用sqlite3模块与Python进行集成。sqlite3模块是由GerhardHaring编写的。它提供了一个与PEP249描述的DB-API2.0规范兼容的SQL接口。您不需要单独安装该模块,因为Python2.5.x以上版本默认自带了该模块。安装04在这里,您也可以把数据库名称复制为特定的名称:memory:,这样就会在RAM中创建一个数据库。在当前目录中创建我们的数据库test.db。可以根据需要改变路径。保存上面代码到sqlite.py文件中,并按如下所示执行。如果数据库成功创建,那么会显示下面所示的消息:连接数据库实例04上述程序执行时,它会在test.db中创建COMPANY表,并显示下面所示的消息:创建表实例04上述程序执行时,它会在COMPANY表中创建给定记录,并会显示以下两行:数据库打开成功数据插入成功INSERT操作实例04上述程序执行时,它会产生以下结果:SELECT操作实例04上述程序执行时,它会产生以下结果:UPDATE操作实例04上述程序执行时,它会产生以下结果:DELETE操作实例职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三基于人脸检测的门禁控制教学05实验流程图05任务实施提取人脸特征写入数据库2利用opencv采集图片1人脸识别比对3门锁控制4利用opencv采集图片05importcv2dWindow('image',flags=cv2.WINDOW_NORMAL|cv2.WINDOW_KEEPRATIO|cv2.WINDOW_GUI_EXPANDED)cv2.resizeWindow("image",1920,1080)cap=cv2.VideoCapture(0)cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)ret,image=cap.read()print(ret)cv2.imshow('image',image)cv2.waitKey(5000)cap.release()cv2.destroyAllWindows()opencv采集图片的详细内容,参考前面章节项目1:使用OpenCV实现人脸检测中的1_opencv实现图像的读取与保存。cap=cv2.VideoCapture(0)实例化一个对象赋值给capcap.set(cv2.CAP_PROP_FRAME_WIDTH,640),cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)设置采集的分辨率宽高ret,image=cap.read()读取一帧图片,返回图片内容和状态值cv2.imshow('image',image)显示图片cv2.waitKey(100)等待100毫秒cap.release()释放摄像头,以免摄像头占用;cv2.destroyAllWindows()关闭所有窗口。05任务实施提取人脸特征写入数据库2利用opencv采集图片1人脸识别比对34门锁控制3注册用户1提取人脸特征2sqlite3数据库的使用提取人脸特征写入数据库05提取人脸特征写入数据库调用人脸识别的算法,提取特征,写入数据库。提取人脸特征写入数据库051.提取人脸特征人脸识别算法包含了特征提取的接口。将获取到的特征值,转化为python可读的数据数组类型。fromlib.faceDetectimportNLFaceDetect导入人脸识别算法接口类;nlFaceDetect=NLFaceDetect(libNamePath)实例化算法接口对象,执行没有报错,表示实例化成功;nlFaceDetect.NL_FD_ComInit(configPath)加载模型和配置,并初始化,执行没有报错,表示加载成功;nlFaceDetect.NL_FD_InitVarIn(image)加载采集的图片数据,返回0表示加载成功;nlFaceDetect.NL_FD_Process_C()调用人脸检测主函数处理图像,返回人脸个数;nlFaceDetect.NL_FD_Exit()释放模型和内存;face_area=(outObject.x2-outObject.x1)*(outObject.y2-outObject.y1)计算每个人脸框的大小,目的是在注册是的时候,只取站在最前面的人脸;face_area_max=max(face_areas)取最大的人脸框;max_index=face_areas.index(face_area_max)取最大人脸框的的下标,也就是第几个人脸;face_info=nlFaceDetect.djEDVarOut.faceInfos[max_index]获取最大人脸的人脸信息,作为单个人脸对齐的输入值;nlFaceDetect.NL_EA_Process_C_2(face_info)把人脸检测的结果信息,进行人脸对齐处理;faceNum,faceInfos=nlFaceDetect.NL_ER_Process_C()获取人脸特征,人脸特征是长度为512的数组。提取人脸特征写入数据库051.提取人脸特征(1)人脸对齐:人脸对齐任务即根据输入的人脸图像,自动定位出面部关键特征点,如左眼,右眼,鼻子,左嘴角,右嘴角等;(2)人脸特征提取:人脸特征提取,即获取人脸关键点的特征值,该算法,人脸特征是长度为512的数组。提取人脸特征写入数据库052.
sqlite3数据库的使用
SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。SQLite是在世界上最广泛部署的SQL数据库引擎。SQLite源代码不受版权限制。(1)注册函数conn=sqlite3.connect("face.db")创建或连接一个数据库;cursor=conn.cursor()创建一个游标;create_user_table=''是创建用户表的命令,这里字段采用id,用户名,创建时间,特征;insert_user_table=''是插入用户表的命令,给每个字段插入相对应的数据;cursor.execute(create_tb_cmd)执行命令;mit()提交执行结果。importsqlite3#引入sqlite3数据库importtimedefregister_user(user_name,feature):conn=sqlite3.connect("face.db")#连接数据库
cursor=conn.cursor()#创建一个游标cursoncreate_user_table='createtableuser(idintegerprimarykey,user_nameTEXT,ctimeTEXT,featuresTEXT)'user_create_time=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime())#数据创建时间
insert_user_table='insertintouser(user_name,ctime,features)values("{}","{}","{}")'.format(user_name,user_create_time,feature)try:#数据表不存在
cursor.execute(create_user_table)#执行创建数据表sql语句
cursor.execute(insert_user_table)#执行插入数据sql语句
exceptExceptionase:#数据表已存在
cursor.execute(insert_user_table)#执行插入数据sql语句
mit()#提交执行结果
cursor.close()#关闭游标
conn.close()#关闭对数据库的连接提取人脸特征写入数据库052.
sqlite3数据库的使用提取人脸特征写入数据库052.
sqlite3数据库的使用(2)读取函数read_cmd="select*fromuserORDERBYidDESC;"读取所有用户信息,按id值的倒叙排列,也就是最新插入的在最前面。defread_user():read_cmd="select*fromuserORDERBYidDESC;"#查询数据sql语句
res_list=[]#存储查询结果列表
try:conn=sqlite3.connect("face.db")#连接数据库
cursor=conn.cursor()#创建一个游标cursonres=cursor.execute(read_cmd)#执行查询数据sql语句
forrinres:res_list.append(r)#将查询结果存入列表
mit()#提交执行结果
cursor.close()#关闭游标
conn.close()#关闭对数据库的连接
exceptExceptionase:print('sqlerror:'+str(e))returnres_list提取人脸特征写入数据库053.注册用户
判断是否有人脸数据特征,将获取到的特征注册到数据库中,并使用读取函数,验证是否已写入。iffts_list:register_user('张三',fts_list)#注册人脸信息
res=read_user()#读取所有人脸注册数据
print(res[0])#打印第一条人脸注册数据05任务实施提取人脸特征写入数据库2利用opencv采集图片1人脸识别比对34门锁控制1采集新图片2人脸识别比对人脸识别比对05人脸识别比对调用算法,识别一张新的图片,然后和数据库的数据进行比对。人脸识别比对051.采集新图片importcv2dWindow('image_win',flags=cv2.WINDOW_NORMAL|cv2.WINDOW_KEEPRATIO|cv2.WINDOW_GUI_EXPANDED)cv2.setWindowProperty('image_win',cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)#全屏展示time.sleep(2)#2秒后拍照cap=cv2.VideoCapture(0)cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)ret,image=cap.read()print(ret)cv2.imshow('image_win',image)cv2.waitKey(5000)cap.release()cv2.destroyAllWindows()人脸识别比对052.人脸识别比对05任务实施提取人脸特征写入数据库2利用opencv采集图片1人脸识别比对3门锁控制43实现门锁开关1实例化串口对象2控制门锁门锁控制05门锁控制门锁控制05importtimeimportserialser=serial.Serial("/dev/ttyS0",baudrate=9600,timeout=0.5)1.实例化一个串口对象串口通信是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。串口是计算机上一种非常通用的设备通信协议。serial.Serial(name,baudrate,timeout,bytesize,writeTimeout,port)参数说明:name:串口在板上的端口号baudrate:串口波特率timeout:读超时时长bytesize:字节大小writeTimeout:写超时port:读或者写端口05打开门锁ser.flushInput()#清除串口写入缓存ser.flushOutput()#清除串口输出缓存command='01050013FF007DFF'#打开门锁指令cmd=bytes.fromhex(command)ser.write(cmd)#对串口写入指令2.控制灯光门锁的控制,采用的也是RS485串口控制,门锁有经过继电器,和4150数据模块DO口。开发板通过串口控制数字量模块的DO口,来控制继电器的开关,进而控制门锁。RS485采用的通信协议是Modbus。而Modbus协议传输数据使用的是HEX形式的字符。若要获得传感器DI值,就要将command转换成HEX形式,也就是将16进制转换成字符串。关闭门锁ser.flushInput()#清除串口写入缓存ser.flushOutput()#清除串口输出缓存command='0105001300003C0F'#关闭门锁指令cmd=bytes.fromhex(command)ser.write(cmd)#对串口写入指令门锁控制05importcv2importserialdWindow('image',flags=cv2.WINDOW_NORMAL|cv2.WINDOW_KEEPRATIO|cv2.WINDOW_GUI_EXPANDED)cv2.resizeWindow("image",1920,1080)#全屏化开发板窗口cap=cv2.VideoCapture(0)#实例化摄像头cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)#设置采集图片的分辨率宽为640cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)#设置采集图片的分辨率高为480ret,image=cap.read()#采集一帧图片,并将返回的状态赋给变量ret,图片数据赋给变量imageprint(ret)cv2.imshow('image',image)#显示采集的图片cv2.waitKey(5000)#等待500毫秒cap.release()#释放摄像头cv2.destroyAllWindows()#关闭所有窗口3.实现灯光预警步骤1:采集人脸照片。采集一张有注册过的人脸。门锁控制053.实现灯光预警步骤2:人脸对比。利用前面注册的数据,调用人脸识别算法,实现人脸识别比对。门锁控制05importtimeser=serial.Serial("/dev/ttyS0",baudrate=9600,timeout=0.5)#实例化串口对象ifresult_state:#如果人脸匹配成功
ser.flushInput()#清除串口写入缓存
ser.flushOutput()#清除串口输出缓存
command='01050013FF007DFF'#打开门锁指令
cmd=bytes.fromhex(command)ser.write(cmd)#对串口写入指令
time.sleep(2)#休眠2秒防止代码运行过快导致开关锁的操作跟不上
ser.flushInput()#清除串口写入缓存
ser.flushOutput()#清除串口输出缓存
command='0105001300003C0F'#关闭门锁指令
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 衣物捐赠及转让协议
- 纺织品的智能生产调度优化考核试卷
- 购房定金的法律咨询服务协议
- 电影叙事技巧与剧情发展考核试卷
- 中班礼仪:尊敬长辈
- 肿瘤内科常见急症及护理
- 石棉制品生产过程中的节能减排考核试卷
- 服装零售企业危机应对与舆情管理考核试卷
- 电视机制造业的数字化供应链管理考核试卷
- 畜牧业信息技术在养殖中的应用考核试卷
- 《大学生创新创业基础教程》第六章创业资源与融资
- 山水林田湖草生态环境调查技术规范DB41-T 1992-2020
- 大众旅游服务质量控制手册
- GB/T 44421-2024矫形器配置服务规范
- 大型活动策划与管理第八章 大型活动风险管理
- Q∕GDW 12165-2021 高海拔地区运维检修装备配置规范
- JGJ107-2016钢筋机械连接技术规程
- 妇科医生进修汇报课件
- 动态分析与设计实验报告总结
- 2024年江苏省泰州市海陵区中考一模数学试卷
- 从汽车检测看低空飞行器检测发展趋势
评论
0/150
提交评论