XiaoHu日志 6/29~7/30

6/29 今天我准备给XiaoHu添加语音识别功能,这个语音识别我在之前版本的XiaoHu上实现过,当时用的是itchat库获取微信语音消息数据,把数据下载下来后用讯飞的语音识别来转成文字,然后再当做正常的文字处理。下载微信数据需要token,为了获取这种token,我需要调用微信的api。但是微信的api有一个白名单机制。我的服务器在内网,所以ip不是固定的,它必须需要一个固定的ip才能把服务器的ip绑定在白名单里。于是我托毛老师向网管咨询了一下,网管就把我的ip改成固定的了,所以我就能完整地获取到微信的语音数据。有了token的话,还需要下载语音。但是现在我并没有找到对应的下载api,我就在微信的开发者文档里去找。没有api,反而看到了微信自带的语音识别功能,只需要打开开关,它就可以附带一个语音识别在每条消息里。我现在相当于不需要再去下载消息了,直接获取到语音消息,然后取得他的识别结果,就可以当做一个文字消息去处理。

6/30 今天希悦的工程师把过评项的api发给了我,但是这个api是面对前端的,后端用起来就比较复杂,要先打开一个希悦的链接,然后给他一个跳转的网址,输入账号密码后,它就会自动跳转到我的网址里,然后把他的token传到我的网址的URL里。这样我就有了一个获取用户信息的token,然后再用get请求把token和其他参数发给过评api。这个api本来是给前端用的,但是我在后端需要这个功能,就只能在后端通过selenium来模拟打开浏览器访问这个api。经过我的一些尝试,我发现这个跳转的url不能使本机的网页地址,而需要是localhost或者一个网页链接。我先写了一个网页,获取传到自己url上的token信息,然后通过socket.io和服务器建立一个短连接,把token信息发过去,服务器就能获得token信息。Socket.io是我惯用的多端通讯模块,非常熟悉。在本机上测试无误,我就把网页放到了hty的网站服务器上,但是一到服务器它就无法索引到socket.io.js的文件。控制台的报错显示在https连接禁用了我的http地址索引。这个js是socket.io的服务器动态生成的,所以我把服务器的协议改成了https,但是这样XiaoHu的服务器就不能与socket.io服务器连接了。后来hty一语道破天机“他们都在一个服务器上啊”我就直接改成了文件路径索引。本来以为又解决了一个大问题,谁知虽然索引成功了,但是socket.io与服务器的连接也是http的,又无法连接了。我差点卡在这上面,不过晚上我突然想到,既然都是用服务器selenium来打开了,那么为什么还要拿socket来通信呢?他们两个是类似于主进程和子进程的关系。所以我直接删除了所有socket的代码,网页上console.log出token,后端获取log,就轻松达成了目的。我在错误的方法上浪费了几个小时的时间,在准备用一个方法解决问题前,我应该想想有没有更优的方法。

7/15~7/29 期末考试加出游的原因让我一个月没有更新日志。小虎在这个假期要完成三个东西:前端,希悦过评,物联网。我干的第一件事是前端。我之前就看中了刘雨辰的点名系统,我们也早已谈妥达成了合作。于是现在我把他的代码要了过来,他的程序是用js书写,加上一个构造网页桌面程序的库。他的系统使用本地数据来实现点名,和XiaoHu联动后,它可以直接从XiaoHu服务器上获取当前老师当前课的学生数据,不再需要老师手动输入学生姓名。这个前端还是XiaoHu辅助教学系统的载体,我通过这个程序来打开老师本地的教案。这个前端还能搭载一些如小测计时这种实用的小功能,人脸识别签到的结果也会在这上面显示。我先写了自动打开教案的程序,通过“打开分子结构的ppt”的指令,程序会取得“关键词”,关键词集是指令词集与教案库词集的交集。XiaoHu会在老师之前设定的教案文件夹里找到包含关键词最多的文件并打开。但是老师有时候会给出不完全“正确”的指令,比如文件夹里可能并没有同时包含“分子”“结构”的文件,而存在“分子应用”“结构科学”这样的文件。为了解决这种情况,我之前打算为每个文件名的每个词语给定一个相关度权值,并返回权值和最大的文件。但是我不能保证这个方法的正确度和鲁棒性,而且如果打开的文件不是老师想要的,那么反而又会耽误老师的时间。于是我使用一个折中的办法,如果有包含关键词数量最多且数量相同的文件,就弹窗让老师选择。这样虽然有些时候无法实现全自动,但是也比老师在几十个文件丛中寻找一个文件要好得多,XiaoHu已经排除了绝大部分文件,只给出两三个文件供老师选择。而在绝大多数情况下,老师给出正确的描述,XiaoHu就会一次性自动地打开。我写好代码后,交给了刘雨辰来完成前端,他会在八月中完成。

      希悦的过评查询是我一直想要实现的功能,我继续调试了那个前端的api,照着工程师给的参数示例传了参,等到的却是未授权操作。我又问了工程师,他思索了一阵子后发现是api给错了。于是他又给我了一个api,当然这个api还是需要那个token。我拿来之后,发现果然好使了。它能够获取到我最近10天的过评更新信息,这让我喜出望外。因为我之前了解到的过评api一次只能获取一个最近的过评,因此我还需要不断的循环获取每个人的过评来把一个个过评“叠”成一个库,这样的时间复杂度非常大,消耗非常多的系统资源。但是现在我不需要了,一个api就搞定。但是token的获取慢的问题还是存在,因为需要各种跳转和加载网页,一个token需要5秒的时间来获取,还只针对一个人,如果在用户请求后获取token,会耽误用户5秒的时间。所以我计划开一个新的程序,每24小时循环获取一遍所有用户的token,因为token的有效时间是24小时,就不用现去获取了。

XiaoHu还有一个重要的功能,是教室内人脸识别签到。这个功能我在半年前调试得差

不多了。通过网络摄像头获取到教室内的大图片,然后在图片内进行m:n的人脸识别。我为了增加识别的准确度加了一个小优化,我先用一个api获取到大图片里的所有人脸,然后把这些人脸截取出来变成小图片,然后再针对这些小图片进行人脸识别比对。但是最近我在调试时,发现这个api有了一个每秒调用的限制。而且这个QPS如果购买的话时非常贵的。这意味着我不能一秒内多次调用他们的api,我在他们的文档里找到了一个m:n识别的api,也是多人脸环境下的批量识别,测试后该api表现良好。我又想到了一个问题,目前人脸识别的准确度不能保证绝对准,而XiaoHu还要在全校这样大范围的人脸库里做检测,很容易识别错误。所以我计划以班为单位建立各个人脸库,这样能减少程序的选择量,提高准确度。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值