2021年我只写了两篇博客,一个原因或许是我现在的工作就是给公司写博客。
我在Dynamsoft当技术写作已经快一年了,写了30多篇博客。Dynamsoft最初成立便旨在为开发者提供SDK,目前有文档扫描、条码扫描这两个主要的产品。新开发的产品有文字识别和文档结构分析SDK。之前还有版本控制、移动端文档扫描SDK,已经停止开发。
我给公司写博客,主要目的是让用户快速发现和了解产品,并最终选择我们的产品。
下面我讲下我们公司的主要产品和我就这些产品写的文章。
文档扫描
我之前在出版公司实习时,经常帮助编辑将手稿用手机拍下来,交给美术编辑调整排版。做翻译时,也需要把纸质文件拍下来OCR后再用计算机辅助翻译软件进行操作。我当时觉得一张张拍照太麻烦了,建议公司买台扫描仪。所以我对做扫描软件的Dynamsoft还是挺感兴趣的。
Dynamsoft有两个扫描SDK,一个是.NET TWAIN,一个是Web TWAIN。TWAIN是扫描仪用的一个通讯协议,Windows有提供TWAIN相关的接口。.NET TWAIN是对这一接口的.NET封装,而Web TWAIN提供了通过网页调用扫描仪的接口。Web TWAIN早期使用ActiveX,现在是通过WebSocket和在客户机本地跑的服务通讯来进行扫描。它主要由本地服务和JS库组成。文档的获取、缓存、保存、后处理都通过本地服务操作,交互界面呈现在浏览器里。后来又基于WebAssembly将功能移植到手机上,不用扫描仪,改用摄像头,不需要本地服务,但会受到Web端的制约,比如存储、摄像头分辨率等问题。
Web TWAIN基于Sane和ICA等项目实现了在Linux和macOS上运行。但不同操作系统上的Web API都是相同的。
针对Web TWAIN,我写过下面这些内容。
- 基于摄像头功能开发Web文档扫描应用
- 将扫描的文档保存到剪贴板、网盘或者发送电子邮件
- 用流行的Web框架开发文档扫描应用
- 网络扫描仪的发现与扫描(Sane Network, eSCL、Zeroconf、DWT)
- 在嵌入式Linux设备上部署远程扫描服务
条码扫描
大一时写过一个叫听雨书房的图书漂流安卓应用,可以用ZXing扫描图书的条码,通过豆瓣API查询图书的信息。所以我对条码SDK也有使用经历。
Dynamsoft的条码扫描SDK(Dynamsoft Barcode Reader,简称DBR)是基于传统图像处理实现的,毕竟条码是一种人为制定出来的内容,符合规则,不需要用深度学习来处理。它基于C++开发,并提供了各种语言和平台的封装。
条码识别是难度较大的一个图像处理应用。DBR会运用各种图像处理方法进行识别,并能让用户调整参数。它将参数保存成一个JSON文件,用户可以通过传入JSON文件来修改参数。参数内容涉及二值化、码区预检测、定位方法、图像预处理(平滑、缩放)等等。
条码扫描可写的内容较多。我写了这些内容。
- DBR与某个语言的结合使用,就有DBR+Java、DBR+JavaScript等。
- 对某个码的识别效果的评测或者优化方式,就有高版本二维码的识别、二维码识别基准测试等文章。
- DBR与跨平台开发的结合,有DBR+B4X、DBR+JavaFX、DBR+React Native、DBR+Capacitor、DBR+Cordova。
- 条码扫描和通过摄像头获取图像紧密结合,于是又有了安卓CameraX、公司的DCE摄像头模块、远距离扫码、安卓USB摄像头等文章。
- 为了了解条码扫描原理,知道为什么会误解条码,从头实现了EAN13的定位和解码
- 其它还有动态二维码传文件、SVG画识别的码区、分布式解码、动态检测等文章
OCR
在深度学习规模应用之前,OCR软件几乎都是一家独大,深度学习出来后,基于开源项目做特定领域的OCR对小公司来说似乎也是能做到了。我自己做漫画OCR软件,在这方便也有体会,个人训练的DB文字检测和CRNN文字识别模型在处理日语漫画时已经有了不输商业软件的效果,一个缺点就是优化不足,模型大,推理速度慢。OCR的研发对于一家小公司来说其实存在资源不足的问题,一般基于开源项目起步更容易。
Dynamsoft的OCR产品定位是提供灵活的参数设置,能满足不同场景下文字识别要求的SDK。因为公司还有其它优势产品,公司希望这些产品能互相结合,比如利用条码定位信息确定要识别的文字区域。
这一产品我只写了OCR图像预处理一篇文章。
感受
写了一年博客,能感受到我对内容的组织能力有提升,涉猎的技术领域也宽广了很多。也会有选题困难的时候,但确立一个可行的选题后,有一个写代码、试验和写作的阶段,工作就相对稳定。
和单纯的写文档和翻译相比,似乎更有创造性,也不用花大精力配合开发人员工作。