腾讯云是个宝藏,必须一薅到底,免费接口能用则用。
而这次的OCR接口,并非完全免费,而是每月有一定的免费次数,为了避免超额调用而带来的不必要费用,还是有必要通过Key来验证身份。

为此,特意简单地学习了一下网络编程,其实还是蛮简单的,只要import socket就好,bind一下IP以及端口,之后就尽管接收和发送数据就好。
这里提示一点,在云服务器上部署时,bind的IP一定是内网IP,bind的端口一定要在安全组开放,这两点简直是巨坑。

(服务端)

(客户端)
-
服务端
至于数据,储存于云服务器,为了区别于本地,称为服务端。本想启用数据库的,但仔细想想发现根本没必要,一个csv就足够了,主要只有两项,项目以及剩余次数。由于是按月更新的,所以在每月初,按照月份新建csv,初始化所有剩余次数,实现起来还是很简单的。
服务器端主要功能有三个,一是接收客户端的申请,检查申请项是否还有剩余次数,并返回客户端执行权限以及更新后的剩余次数,在此之中,为了保证易用性,我还设置了在鼠标点击相关项目时,返回当前可用剩余次数,注意此时仅仅是查询,服务端不能核减相关次数。二是核验密钥是否真实有效,并与剩余次数信息一同返回,目前的版本并未对密钥做出任何区分,即有效即可,但实际上可以根据密钥设置可用次数,以及可用范围,实现区分。三是日志记录,包括访问时间、访问IP、申请项目、项目详情、密钥等等多种信息,用于出错处理以及日常数据分析。

-
客户端
说完服务端,该说说本地端了,GUI就不再说了,tkinter套用就好。

-
输入数据处理
参照之前的人脸美化软件,基础的数据处理不再赘述,转化为base64格式就好。
-
模式选择
我把目前腾讯云免费次数接口全部接入,共计五大类17小类,所以专门设置了一个函数用于处理不同模式间跳转,根据输入参数的不同,按照不同方式处理数据。
个别模式需要额外的参数,所以需要另外设置窗口确认。

-
返回数据处理
将腾讯云API返回的json格式数据按需裁剪,仅留下我们所需的数据即可。

-
输出数据处理
将处理好的数据,利用tkinter中的ScrolledText,在程序内显示结果。
同时,根据用户选择,在指定位置输出指定格式文件,通常为pdf/txt,个别模式会输出修正后的图片以及表格等文件,需要单独设计函数


(测试用例)
-
后记
客观讲,这个软件的难度并非很大,问题在于工程量大。
一是模式众多,而且并非简单地复制粘贴,各种模式的返回数据都不完全相同,需要区别处理。
二是知识点众多,除了GUI设计和图片处理,还要接触网络编程,doc/xls读入写入,信息显示等等很多小而杂的点。
至于识别质量,基于腾讯这么多年的技术积累,识别准确率还是不错的,可以一试。
但其中有些票据识别过于行业化,在日常生活中应该不会有用武之地的。
-
相关资料
