一键清除文本图片手写体

620 阅读5分钟

背景

有小盆友的家长经常会遇到小朋友作业忘带的情况,这时候麻烦其他家长发过来的作业拍照,但是这个作业可能已经有了书写痕迹和答案。这个时候我们就需要有款软件能方便的擦除作业的手写体。

市面上也有类似的工具比如 全能扫描王之类的,还有作业帮啥的,不过这玩意有些需要收费,有些交互做的很繁琐。于是我调研了一圈准备自己撸一个小程序来实现。

初步方案

一开始实现的思路也很简单,主要分四部步

  1. 用户选择图片
  2. 上传图片到服务端
  3. 服务端调用OCR接口返回手写体的区域
  4. 客户端擦除相关手写体

于是就开始在各大云平台找相关OCR的API,主要是阿里云,腾讯云以及百度云。 在调研试用了主流的三大云平台记录一下各个平台在OCR服务方面的一些个人体验

腾讯云

腾讯云使用体验上表现较好,

Scene选值: only_hw 表示只输出手写体识别结果过滤印刷体 ---有了这个参数我们就可以知道哪些是手写体,哪些是印刷体

在实际调用的时候发现有些差强人意: 在腾讯云的OCR手写体的接口里识别的区域不够准确,具体见下面的截图标黄的区域为根据腾讯云OCR识别后绘制,可以明显的看出有些误差的。不过在可接受范围内。

  • 免费额度:OCR属于同一个共享资源包的接口共同享受1,000次/月的免费调用额度。

阿里云

阿里云识别手写体在这方面表现的比较逊色:

但是--他没有参数区分是否只输出手写体--- 阿里云惨败

免费额度:手写体识别享用200次/月的免费额度。

百度云

百度云的OCR识别表现一般

  • 百度云的OCR识别API文档cloud.baidu.com/doc/OCR/s/h…
  • 百度云在识别手写体方面表现比较普通,同样的他的手写体识别里也没有区分是否只标识手写体,印刷体和手写体识别没法区分。

没有参数区分是否只输出手写体--- 百度云惨败

  • 免费额度:手写文字识别 :500次/月赠送;通用文字识别(标准版):1000次/月赠送 这块百度是区分开的,比较大方

此方案的结论:

只识别手写体然后前端手动擦除有点麻烦,没有想象中那么简单。作为备选方案。

新的方案

--直接调用去除手写体的API

翻百度云的API的时候发现了:

  • 文档去手写API 使用了一下欣喜若狂,效果很好,官方的示例一目了然
  • 腾讯云与阿里云都没有类似的API。 唯一可惜的是这个API的免费额度是每个月50次。
  • 免费额度:50次/月 --百度云这波好感倍增。

有道智云

继续搜刮其他云平台有没有相关的API,找到了

  • 有道智云有一个试卷擦除手写体

  • 有道智云的文档写的比较简单,官方有个demo,试用了一下,比百度云的略微逊色,但是也基本满足需要。

  • 有道智云缺点:返回的接口里也会返回原图的base64编码,没有参数选择只返回处理后图片的base64,这样就比较浪费接口流量。

  • 免费额度:有道云会赠送100元的充值券,这个API调用一次是0.1元。有点贵(⊙o⊙)…。。。

特别提醒

需要注意的是这些OCR平台的识别结果都是通过返回处理后的base64字符串,所以在处理文本图片的时候优先选择转为灰度或者黑白,这样base64的文件会小很多。

此方案的结论:

--基本可行

服务端接口封装,优先调用百度云的API,50次额度用完后再调用有道云的API

正式的方案

因为首先微信小程序作为前端开发,故直接使用了微信小程序的云服务器方案(免费90天) golang作为服务端。顺便薅了腾讯云的COS存储的羊毛。 微信云在web接口层面有个两个限制:

  1. post 数据不能超过10K --对于一个base64的图片来说这个size基本上不可能。
  2. 接口响应超时时间为10S

所有一通调研下来实际的落地方案如下:

最终的实际效果

4679165b-728a-47ca-9340-b825813990aa.gif

扫码体验

大家可以扫码体验,或者微信搜索小程序 ”番茄小能手

一些感想:

做这个小工具功能比较简单,实际的开发中大量的时间消耗在调研各大应用平台的接口以及前后端联调上。整体体验因为是纯调用接口,最好的方案应该是把这些处理都放在前端来,OCR模型识别啥的也下放到前端,不过暂时没找到合适的开源库,大家有了解的可以评论区告诉我。