所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开

Mind+掌控版 AI验证安全通讯器

爱吃馒头不吃辣 爱吃馒头不吃辣 2020-01-09 10:05:24
3
1
简单

       有幸进入第二轮,在策划的项目的时候又犯了难,第二轮的确是不小的挑战,有很多大神老师在这一轮可以好好发挥,而我只是个渣渣。

       结合题目要求需要用到百度智能云的“图像技术”,“语音技术”完成一个软硬件结合,功能完整的AI应用系统作品。

       多谢百度智能云提供高效好用的图像技术和语音技术,在早期用过百度飞桨(PaddlePaddle)在工作中做过一个“菜品识别”功能,当时就被圈粉,现在出了更好用的图像技术和语音技术,简直是如虎添翼。

       先上视频先睹为快,无外壳版使用视频。

成品效果图

projectImage

项目思路

       AI技术在安全领域有着不可替代的作用,手机中的人脸解锁,微信的声音锁,将AI技术发挥的淋漓尽致,同时安全在通信领域表现得尤为重要,从早期的“摩尔斯电码”到现在的“量子通讯”(遇事不决,量子力学)。

       以此为思路制作《Mind+掌控版 AI验证安全通讯器》项目,项目组成有【身份验证端】和【信息发送/接收端】。

项目功能

       【身份验证端】使用Minde+开发,信息发送端开机发送验证请求,身份验证端开始进行账户语音识别和用户人脸识别,并将识别结果返回指定信息发送端。同时负责五笔输入转换成汉字,如:MDFJ=》岸。

       【信息发送/接收端】使用以掌控板为硬件为主体,配合其他硬件共同组成。输入方式,通过掌控板上的A/B键,摩尔斯电码输入字母  按A键输入嘀(·)  按B输入哒(-)  以此来组成五笔字母,发送到身份验证端并接收汉字显示再屏幕上。发送方式使用MQTT发动到订阅同样频到得设备上,接收的消息在第2行显示,输入得消息在第3行显示。不同的频道相应的聊天记录列表只记录接收到达消息。支持无线充电并且可以在指定wifi下独立使用。

       身份验证端

        在之前的基础上进行重构优化,结构更合理,更健壮,容错率高。身份验证端又分为【身份验证功能】和【用户管理功能】。

                身份验证功能

                主要功能是验证使用设备的用户“用户名”和“人脸信息”是否匹配。

                建立锁定设备ID数组,防止设备在60秒锁定期间重复请求身份验证。

                也就是说: 一个用户有权限使用不同的设备,但是需要保证“用户名”和“人脸信息”匹配。如图所示流程图。

projectImage

                身份验证代码分析

               1、点击【开始】触发【初始化】广播,开始执行初始化,连接EastIoT,接受硬件的验证请求。切换至百度独立账户,关闭摄像头,设置设置TinyWebDB服务器参数。获取用户列表字符串使用自定义函数将其转为数组方便后续使用,用户列表数组名为“userList”。设置【serviceState】变量为true表示当前身份验证端可用。初始化的目的将所有需要连接和获取的内容提前准备好方便后续执行。

projectImage

                2、当硬件发送验证请求,触发接收到MQTT时间,保存硬件传递的消息,为当前硬件的ID,判断当前身份验证端是否忙碌和当前设备ID是否在锁定列表,若忙碌并且设备ID在锁定列表即发送消息给硬件,让其稍后再试,内容为:硬件ID,busy。若不忙碌设置已验证次数为1,触发【用户名验证】广播,进行用户名验证。

projectImage

                3、进行持续5秒的语音输入,然后判断语音识别是否有结果,若无结果提示用户并重新验证。若识别结果包含在用户列表数组中,进行人脸识别。若识别结果不包含在用户列表中,提示此用户不存在,进行重新验证。多重判断提高容错率。

projectImage

                4、首先判断当前人脸验证重试次数,若小于三次可继续进行人脸识别,从数据库中获取此用户名对应的图片名称(如图1所示)并从本地获取指定人脸图片,将其与摄像头截取的画面人性对比,若相似度大于95就认领人脸验证成功,发送身份验证成功消息到硬件,硬件可进行后续通讯操作,消息内容为:硬件ID,pass。若重试次数>3次发送认证失败信息到硬件,锁定硬件60秒(将次设备ID加入锁定设备列表,60秒后移除,详情请看下方【其他功能】内容介绍),消息内容为:硬件ID,nopass。

                至此身份验证功能完成。

projectImage
projectImage
              用户管理功能

             点击【开始】程序初始化后,按下【空格键】进入用户管理功能,对可验证用户列表进行新增用户和删除用户操作,维护用户列表。如图所示流程图。

projectImage
              用户管理代码分析

              1、按下【空格键】进入用户管理功能,询问要进行的操作并输入,输入add,del和quit有效输入执行相应操作,若输入其他无效内容,提示输入有误并重新输入。

              add-新增用户    del-删除用户     quit-返回到初始化

projectImage

             【新增用户】

             2、输入add触发新增,询问用户名并输入,判断用户列表数组中是否有此用户名,若存在提示已存在重新输入,若不存在进行人脸采集。开启保存视频截图到指定位置,手动复制人脸图片名称并输入询问输入框,数据库中新增用户名和图片名称记录,同时更新用户列表字符串到用户标签(如图1所示)。

             至此新增用户功能完成。

projectImage
projectImage

              【删除用户】

               3、输入del触发删除,询问要删除的用户名并输入,判断用户列表数组中是否有此用户名,若不存在则提示不存在重新输入,若存在从用户列表数组中删除,并将其转为字符串,执行数据库删除操作,删除标签为输入的用户名的那条记录,同时更新用户标签最新的用户列表。触发输入时间,返回用户管理界面(如图1所示)。

               至此删除用户功能完成。

projectImage
projectImage

       其他功能

        1、按【q】中止程序返回初始化状态。

        2、锁定设备列表

              2.1、点击【开始】触发【初始化】同时循环执行验证锁定列表检查符合60秒的删除硬件ID功能。

              2.2、此列表保存被锁定的设备ID,在锁定阶段再次请求验证也无效。

projectImage

       信息发送/接收端

              开机状态

               拨动开关接通电源,通过电池给掌控板扩展版供电,开关断开状态下可通过无线充电模块进行充电。如图一所示电路结构。

                在准备做这个项目的时候,第一个问题就是供电问题,计划是独立运行不依靠USB线,于是查阅产品资料,有这样一句话点醒了我,如图二所示【电源正输入:连接USB时,掌控板内部稳压输出3.3V,未连接USB可以通过输入(2.7-3.6)V电压为掌控板供电】那就是说从这两端输入电压就可以为掌控板供电,说干就干,果然一次点亮,再加一个掌控板,于是就把电源正负极插在其中一组正负极上,即为掌控板供点又为扩展版供电,完美!

projectImage
projectImage

             初始化状态

              发送身份验证请求给身份验证端,发送信息为当前设备ID(长度为4),身份验证端验证后返回验证结果,并对结果进行执行功能,若识别失败锁定设备60秒,在此期间无法验证,只有等待60秒过后,设备重启才可重新验证。如图一所示验证失败显示提示信息,如图二所示将验证失败设备ID加入锁定列表,ID在数组下标的+1位是等待时间。

projectImage
projectImage

              使用状态

               身份验证通过即可使用设备,显示如图一所示的状态信息,分别是wifi连接状态,当前频道下未读消息数和当前所在频道1~20。

               屏幕显示功能将其包装成一个函数,方便后续变量变换展示使用,如图二所示。

projectImage
projectImage

              输入功能

               如图一和二所示,通过A/B键输入摩斯电码,输入完成后按【绿色】按钮将摩斯电码转换为字母,输入文字正确的五笔字母组合,字母长度达到四位自动发送转换请求或长度为三位时按【绿色】按钮发送转换请求。

              发送MQTT到身份验证端进行验证转换成汉字并发送回设备(初期想法将转换工作交给掌控板,奈何汉字太多,大约有十几万,掌控版存储有限,就将转换的功能交给电脑端的身份校验端,如图三所示,汉字所处下标+1是其对应的五笔),设备接收到后显示在屏幕上。显示代码如图四所示。

                因为MQTT从身份验证端返回的消息会发送到所有订阅的设备,所以要进行设备号判断,身份验证端返回的信息格式为【1995,岸】 ,以逗号进行分割,第一位是设备ID,第二位是识别的汉字。

                如图五所示,一次识别一个文字,多次输入识别组合成一句话。最多可输入9个汉字。

                 如果输入摩斯电码转换的是数字,将直接添加到正文中,即第三行中进行显示。

projectImage
projectImage
projectImage
projectImage
projectImage

              发送接收信息功能

               在有可发送内容情况下,按【黄色】按钮通过MQTT发送当前内容,相应当前频道相同的设备会实时接收并显示内容,若其他设备不再当前频道,同样信息会保存在聊天列表中,当这个设备调整到指定频道,会显示保存的信息历史记录,同时未读消息数+1。

                用户接收到消息后可继续输入,在第三行显示输入的内容并发送,发送后清空输入内容。

               因为编码问题于是在发送信息事先将其转为base64如图二所示。发送的消息格式为【1995,13,你好】,以逗号分割第一位是发送者ID,第二位是发送的频道,第三位是消息内容。‘

               如图三所示,接收消息,将消息添加到频道对应的列表数组种。

projectImage
projectImage
projectImage

             删除输入内容

              按【红色】按钮就可以删除转换的汉字,摩斯电码和字母,删除顺序为  摩斯电码=》字母=》汉字,逐层删除。

projectImage
projectImage

              翻页功能

                按【蓝色】按钮,切换当前频道历史信息,在第二行显示切换的上一条记录。按【白色】按钮直接返回当前最新记录信息。

            切换频道功能

              转动电位器,读取引脚P2模拟值并映射到1~20,对应1~20频道。

              切换不同的频道显示不同频道的聊天信息内容。

projectImage

       无线充电端/设备外壳

        主要功能提供设备关机状态下锂电池充电功能。

        如图一所示成功接通无线充电电路,加了一个电源提示灯。

        如图二所示无线充电外壳。

        如图三所示通讯设备外壳。

projectImage
projectImage
projectImage
Makelog作者原创文章,未经授权禁止转载。
3
1
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
|
[[c.comment_content]]