8324| 3
|
[M10项目] 【物联网项目】基于行空板的智能视力检测助手 |
本帖最后由 仔爸 于 2022-10-28 21:00 编辑 一、项目背景 随着中小学生年级的不断提高,近视率呈上升趋势,能否准确测量学生(孩子)视力,做到随时追踪、时刻提醒,是一件值得我们重视的事情。 本项目是基于行空板、物联网和人工智能的简易视力检测助手,既可以用于个人家庭检测,又可以增加终端设备用于学校班级检测,并收集检测数据发送到物联网服务器供分析使用,如追踪学生视力情况,计算年段近视率,近视率预警等。项目主要能实现按照视力表随机出示不同朝向的字母E,被测试人员通过语音反馈字母方向,程序通过语音识别判断与出示的字母是否一致,当达到一定的正确率,则继续缩小字母的尺寸,直到看不清楚为止或达到最高视力值。 由于行空板的尺寸大小有限,可通过两种方式实现正常的测量,一种是外接更大的屏幕,另一种是根据字母大小,同测量人员与屏幕之间的距离进行一个换算,这样就可以不采用标准的5米测量距离。本项目采用后面一种方法,直接使用行空板屏幕出示字母进行测量。 二、项目演示 三、材料清单
四、项目实施 (一) 准备百度AI账号用于语音识别 本项目将使用到人工智能中的语音识别技术,这里采用百度智能云中的语音能力引擎,请注意新账号有一定的赠送量,否则需要充值使用。 步骤1:浏览器打开网址https://ai.baidu.com/,注册一个百度账号,在右上角单击“控制台”链接登录。 步骤2:单击左上角导航按钮,在左侧的导航窗格中单击“语音能力引擎”按钮。 步骤3:单击页面中间的“创建应用”下面的“去创建”链接,然后在创建页面,输入应用名称,选择人工智能相关的功能,此处因为创建的是语音能力引擎的应用,所以语音技术内所有的项目都已经默认勾选。 步骤4:应用创建成功后,在应用列表中会显示已经创建的一些应用,可以复制“API Key”和“Secret Key”到记事本备用,特别要注意,复制Secret Key时一定要显示后再复制。 (二) 软硬件准备 考虑到本项目只是一个小小的演示,因此许多硬件并没有准备充分,比如大屏幕,比如usb音箱,比如行空板独立供电等,可在适当的时候采购使用。 因此只要使用一根USB连接线与电脑连接即可。然后在电脑浏览器中输入http://10.1.2.3进入行空板的网页管理界面,打开SIoT服务,因为行空板提供了该项物联网服务,因此我们无须使用其他物联网服务器。 在下面的网络设置中,使行空板通过Wifi与网络连接,如果周围没有无线网络,也可以使用手机热点。 此外也可以进入https://wiki.unihiker.com/随时查阅相关的资料。 (三) 程序编写 根据项目构思,确定本项目的程序主要包括三个部分:字母生成部分、检测判断部分和语音识别与物联网发布部分,如思维导图所示。 1. 字母生成 一开始我打算采用图片的方式来直接呈现字母E,通过图片大小缩放来实现不同视力值的测量。结果发现这样做并不理想,首先考虑不同视力值用不同大小的图片,到底是准备一张还是多张图片?其次,如果准备一张,缩放后会失真,同时也比较难确定字母的大小。思路至此打断…… 经过多日思考、查阅资料,突然想到之前学习计算机基础知识时,有接触过点阵字符的原理,在一个点阵中,通过某些点填充黑色,某些点填充白色,最终呈现字符。因此,我想是否采用点阵的方式来呈现字母E?我在Excel中进行了尝试,发现是可行的。只要将5X5点阵的一些格子填充黑色,就可以实现不同朝向E的呈现。至于大小,通过控制格子的大小来确定。而每个格子就是一个正方形。 因此,可以创建一个包含4个元素的元组,每个元素是一个由0和1组成的长度为25的字符串,程序中根据字符值来创建四个方向的E。 xz=("1111110000111111000011111" #朝右,下,左,上 ,"1111110101101011010110101" ,"1111100001111110000111111" ,"1010110101101011010111111") 另外,每个E的大小是根据上面点阵大小决定的,根据网上资料的查询,考虑到行空板屏幕相对于普通的视力表较小,因此,需要经过距离和大小的换算,得出视力值与大小的对应值(测试距离为1.5米,)。
所以我们继续创建2个元组,将上面两项值存入元组中备用(元组sl1是2分记录值,sl2是五分记录值,选择其中一种即可)。 sl1=(0.1,0.2,0.3,0.4,0.5,0.6,0.8,1.0,1.2,1.5,2.0) sl2=(4,4.3,4.5,4.6,4.7,4.8,4.9,5.0,5.1,5.2,5.3) width1=(47.52,23.76,15.84,11.88,9.504,7.92,5.94,4.752,3.96,3.168,2.376) 另外,为了使产生的E字能始终显示在行空板屏幕的正中间,经过计算,得到正方形边长与屏幕尺寸之间的关系,从而确定最左上角正方形起始位置的坐标(x1,y1)是: x1=120-2.5*width #width是正方形边长 y1=160-2.5*width 通过以上分析和研究,我们可以编写一个函数,根据方向(方向在主程序中将随机生成)和边长,来呈现字母E: 2. 检测和判断部分 根据平时我们上医院或学校里检测视力的流程,通常医生会从上往下(字符从大到小)指向测试字符,然后同一排连续正确,则往下一排继续测试,直到测试到最下一排(最高视力值)或中间某一排看不清为止(上一排即为视力值)。因此在我们的程序中,规定同一排在5个字符内有3个指向正确,则缩小字符的大小,最后确定视力值。 在此我们写一个函数,模拟手工视力测试的方式,并结合语音识别进行判断。 反馈正确则显示一个对勾,错误则显示错叉,也是采用点阵显示方法。编写一个函数实现。 3. 语音识别和物联网发布部分 判断部分相对简单,但需要用到人工智能中的语音识别技术,最终将某个学生的测试视力值上传到物联网平台供存储和分析。此处我们撰写两个函数,一个是实现语音识别并返回识别后的文字,另一个是发送消息到物联网平台。
这里使用了百度AI中的短语音识别python库,
4. 调用模块和主函数 本程序需要调用一些第三方模块,如unihiker模块,pinpong模块,百度语音识别模块等,在程序的开头调用。而主函数放在最后,根据用户按下行空板上的A键开始测试,同时会出示一些提示信息,并在每一个完成测试后清屏供下一个同学测试。
五、项目拓展 通过本项目,可以完成简单的视力测试,在此基础上,可以进行一些拓展,如:
|
2.52 KB, 下载次数: 2951
视力测试python源程序
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed