很早之前曾经做过一个图片识别的项目,当时有一项功能是整题识别,即传入数学题的截图,可通过ocr技术识别出图片内容,但当时只限于识别文字,并未作更深一步的处理,现在想来实用性并不强,毕竟大家更需要的是解题思路,而不是让AI读出题干(题干的文字,我都认识,连起来我就不知道怎么下手去做了 = = ),最近刚好有时间,于是尝试来为有娃的朋友做一个搜题神器。
鉴于之前整题识别的开发使用有道智云的良好体验,我再次打开其官方文档,果然找到了拍照搜题服务的开放API,轻车熟路地做了一个简单的批量搜题demo, 下面分享一下开发过程。
调用API接口的准备工作
首先,是需要在有道智云的个人页面上创建实例、创建应用、绑定应用和实例,获取到应用的id和密钥。具体个人注册的过程和应用创建过程详见文章
开发过程详细介绍
下面介绍具体的代码开发过程。
API接收的参数较为简单:
签名生成方法如下:
signType=v2;
sign=sha256(++++)。
其中,input的计算方式为:= + + (当q长度大于20)或 =(当q长度小于等于20)。
需要注意的是,API对题目图片有如下要求:
Demo开发:
这个demo使用python3开发,包括maindow.py,QuestionClass.py,OcrQuestion.py 三个文件,分别为demo的界面、界面逻辑处理和ocr搜题方法的封装。
-
界面部分:
UI 部分较简单,主要功能为选择待题目图片、选择批改结果存储路径。其布局代码如下:
其中启动按钮btn_sure的绑定事件search_question_files()来根据题目照片搜题,并在完成后打开结果存储路径:
-
QuestionClass.py
这里主要配合UI的逻辑,调用搜题方法。
首先定义一个类Question:
start_ocr()方法调用connect()方法依次搜题并保存结果。
从OcrQuestion.py的connect方法获取的结果是json格式,save_result_format()方法,解析从接口取得的接口,格式整理,保存结果到html:
-
OcrQuestion.py
OcrQuestion.py 中封装请求ocr搜题API的方法,其中最主要的方法是connect():
API响应结果示例
响应结果是以json形式输出,包含字段如下表所示:
效果展示
demo操作演示
来看看结果吧:
数学题搜索结果展示:
总结
有道智云的整体搜索API文档清晰,题目范围极广而且可以自动判断学科,搜索结果可谓“举一反三”,会返回几个可能的相近题目,很具有参考价值,值得推荐!数学解答题会返回相关图片、公式等,用在web项目中效果灰常不错。