PanDonglin - 图片矫正
type: channel
link: http://16084a.com/index.php/tag/图片矫正/
items: 【智能案例】图片矫正智能应用 - 金山WPS

【智能案例】图片矫正智能应用 - 金山WPS
type: item
date: 2019-06-15T17:32:00+08:00
description: 什么是文档图片弯曲矫正？用户有时候会有这种需求痛点：看书时特别喜欢其中的某些段落，想摘抄下来，但发现篇幅很长，用手机拍摄的话书本又不能完全铺平。手持一份装订过的合同，着急发给老板，却没有工具拆开装订钉。拍出来的图里页面是弯曲的，里边的文字看起来很费劲...你也不可能随时随地带着扫描仪。那该怎么办呢？市面上大部分 APP 是把视角歪掉的图片矫正为正视图，如下图：在很多场合确实可以帮助到用户。但是它只是解决了透视变化的问题。如果是弯曲的页面，还是不能很好的矫正。WPS 对这个需求很上心，希望可以让用户做到随手一拍就获得完美铺平的电子文档。历经几个月的开发周期，结合了本地 AI 和云端 AI 能力打造了一个功能：文档矫正。这个贴心的功能能让刚才那些棘手的问题轻松被稿定。直接看效果吧。还是刚才那张拍摄的书本照片，经过文档弯曲矫正后。就可以立刻得到铺平的图片，甚至连页面区域都给你自动裁剪好了，背景干扰全无，完美！这个弯曲矫正对于 OCR 识别也有很大的帮助，因为很多 OCR 识别对于文本弯曲的情况下识别会有很多乱码，经过弯曲矫正变成规规整整的文本行后，OCR 识别准确度会大大提高。以上就是我们新推出的这个功能的应用场景和使用效果。那么下面我们就来聊一聊为什么这个功能背后是本地 AI 和云端 AI 的结合。云+端 AI ，共建文档矫正功能目前其他第三方以及我们 WPS 里上一个版本的文档矫正都是通过检测出文档的边缘或者四个角，然后施行透视变化进行矫正的。其中的计算量虽然也会比较大，但现在的移动端计算能力还能够覆盖，实时检测预览起来也还比较流畅。然而弯曲矫正背后的计算量非常大，我们不得不将其部署在计算集群上，通过网络传输压缩和加密的原图以及相应的参数到服务器上进行计算，然后将计算结果传输回用户的手机端再呈现。这个过程原本也可以设计成全部在云端计算，那样我们的工作量就会少很多，但是为了获得更好的用户体验，能够让用户直观的看到实时检测的文档区域，我们将文档检测的部分放在了本地。在用户开启相机进行预览时我们的深度学习模型就在后台进行运行，逐帧去检测文档区域，并将检测结果渲染在屏幕上。为了实现准确稳定的文档区域检测，我们将传统的边缘检测算法升级为深度学习模型，随着模型的不断迭代，虽然识别效果越来越好，但模型体积也越来越大，计算量也越来越大。为了兼顾中低端手机的运算能力，我们在网络模型设计时做了相应的优化，参考 SqueezeNet 的结构设计了一个 7 层的卷积神经网络替代最初采用的更深的开源预训练网络，虽然网络变浅导致准确度上稍微有些损失，但速度有大幅提升，内存占用也减少不少，这使得低端手机也能达到每秒数帧的速度，而高端手机则可以达到每秒 30 帧满帧的速度。同时为了弥补准确度损失带来的检测不准而引起的抖动，我们在网络外边增加了滤波器，让检测结果在视觉上看起来更稳定。整套网络和代码完成后，我们发现其实 SDK 包的体积已经有一些大了，除了对代码和依赖库的精简，我们还需要对推理框架进行精简。我们需要一套速度快而又轻量级的移动端推理框架。我们当时做了很多选择和尝试，最后选择了 Tensorflow Lite。Tensorflow Lite 是 Google 出品的对移动端非常友好的深度学习框架，其架构设计和训练部署思路都和 Tensorflow 非常相像，同时又非常小巧，容易上手。我们直接在 PC 架构的训练机器上训练好模型，经过 Google 提供的工具 TOCO 进行转化，即可获得一个体积很小而且速度很快的手机端模型，而运行的效果和准确度却没有打多少折扣。从模型训练到移动端部署的流程非常通畅，这让我们非常喜欢 Tensorflow Lite 这个框架，毕竟我们可以减少工程部署的时间，而把精力更多放在算法优化和模型优化上。除了获取文档区域，为了实现弯曲矫正，我们还设计了一整套复杂的算法系统，经过评估，我们确定很难在移动端进行那样高强度的计算，于是我们选择了计算能力更强的云服务方案。核心算法部署在计算集群上可以获得更充沛的算力，同时也为该业务算法的优化和升级预留了比较大的空间，毕竟现在只是第一版，以后我们还会对其进行持续升级和优化。目前我们的整体设计框架是将本地相应的 AI 能力封装成一个 SDK 提供给业务方的客户端，客户端通过 API 接口调用 SDK 里相应的能力，数据和参数也是通过 API 接口和 SDK 进行交互，同时 SDK 也接管了访问云服务器的能力，统一的进行管理，在保障了信息安全的同时也有相应的容错和异常处理能力。这套系统的流程图如下所示：云和端的选择以及未来的期许因为需求的特殊性和不同算法的复杂程度以及平台的计算能力评估，我们因地适宜的选择了让一部分计算在本地利用 TensorFlow Lite 进行，一部分计算放在云端计算集群上…