手机拍文档这事,说小不小。合同、发票、笔记——你得拍清楚,还得发得快。以前只能装App,现在打开网页就能搞定。WebAssembly让浏览器能跑正经代码,有时候比下载安装省事多了。
但这事比想象的要麻烦。真实照片全是坑:透视变形、光线不均、反光阴影、背景杂乱。页面还可能出框,背景里全是直线矩形,跟文档混在一起真假难辨。
打开网易新闻 查看精彩图片
我的思路是尽量简单,全部在客户端跑完。没上神经网络,用的传统计算机视觉方法。
核心原则:别信任何单一检测方法。
手机实拍照片太脏,单一路径根本扛不住。我跑了多条处理管线,每条用自己的方式把文档从场景里抠出来。收集看起来像纸片的区域,生成候选,再挑最好的。
实际效果比"主方法"单打独斗强多了。有些方案在干净均匀光线下表现完美,一遇反光就崩;另一些扛得住阴影,却在复杂背景前迷糊。关键不是找到完美方法,而是组合几个失败方式不同的不完美方法。
第一遍抓纸张常见的视觉特征。第二遍通过局部对比度提取边缘。第三遍直接盯准锐利的过渡和线条。每遍之后提取轮廓,这些轮廓成为候选筛选的原材料。
有了轮廓集合,下一个问题是:哪些真像文档?
这里几何开始起作用。
对每个轮廓,我尝试恢复四角形状。有时直接成功,有时需要先简化轮廓,有时轮廓太乱,就退而求其次做个粗略矩形估计。
然后按几条直觉规则筛选:得是凸四边形;边长比例得合理;角度和对角线不能畸变太狠;如果太贴着图像边缘,通常可疑。
不是说文档得完美矩形。手机照片必有透视变形,但即便如此,真纸片和假候选通常还是能区分。
热门跟贴