当前位置: 首页 > news >正文

一个人开发扫描王之技术篇之图像切边

对于检测同一张“缺角”的,并处在杂乱背景中的文档。

从左到右分别是3亿人都在用的扫某王的效果,阿里高P带队的夸克的效果,最后是你们不知道的《扫描仙人》的效果

所有扫描类的软件,第一个要解决的问题,就是从照片中,识别出文档的位置。虽然目前物体检测算法已经比较成熟了,但我在开发过程中仍然踩了一些坑,今天一并分享出来。

我是在2024年开发的这个功能,我认为首先需要排除的方法就是“完全基于轮廓检测的图形学方法”,和“完全基于大模型的端到端方法”。

“完全基于轮廓检测的图形学方法”只能用于边缘清晰,背景是纯色的简单情况,像下图这种稍微带点杂物的情况,就不行了。此类方法虽然局限性很大,但仍然有必要了解原理,即便现在都用”基于神经网络“的方式去做物体检测了,但后处理中,仍然需要用到传统的轮廓检测,霍夫变换等步骤。

论效果,“完全基于大模型的端到端方法”肯定是最好的,但弊端是需要的训练,部署和使用成本都高,我一个人肯定是无法承担的,更无法满足有隐私需求的用户,属于杀鸡用了牛刀。

因此,我最先使用的方法,是先基于类似yolo分割模型,大致得到图片中“文档”的位置,然后再基于图形学的方法进行后处理。yolo模型可能是现在最容易“训练”的模型,被董袭莹小姐的博士论文科普后,更是无人不知。为了达到生产效果,我自己一共标注了500张图片,用blender脚本生成了2000张左右。500张自行标注的数据中涵盖了各类书籍,练习册,画册,试卷,医疗单据,小票,海报等,按照形状划分,大致包含

  1. 200张标准的和带有明显透视的,边缘清晰的矩形文档。
  2. 200张书籍,尤其是较厚的书籍带有曲面的页面
  3. 100张精心构造的“疑难杂症”标注,比如复杂背景上的文档,一张照片中多个文档,被遮挡的文档,缺角的文档,和背景色接近的文档等。
  4. 用blender渲染的文档主要都是上述第一类情况,但背景,光照会更为复杂和多样。

我试过,其实有100多张标注,yolo模型就基本可以工作了。但要达到行业一流水平,至少得标注500张以上。区区几百张标注,就可以工作的奥秘是yolo的数据增强,我认为yolo的数据增强比模型要精彩,我也借鉴了其中的方法,用到了后续模型的训练中。

聪明的你应该已经发现了,yolo模型得到的只是分割图,并不包含“文档”的4个顶点坐标。YOLO-OBB模型虽然可以输出顶点,但准确性较差。所以,我采用最开始提到的“完全基于轮廓检测的图形学方法”在分割图上计算文档的顶点。

(yolo官方的分割图边缘非常清晰,但实际上,文档和背景复杂多样,分割的边缘并不会如此完美)

让我很郁闷的是,yolo分割模型得到的结果,很可能无法得到近似的四边形(也就得不到4个顶点坐标),或者文档图像本来就不完整(角落被遮挡,部分位置在照片外等等)。直到我开始开发文档“去扭曲”模型时,我才意识到,其实根本不必纠结于“精确的文档顶点坐标”,得到“精确的文档顶点坐标”不就是为了“反透视”(将透视视角下的文档恢复为平面)变化嘛。而“去扭曲”模型,其实就是AI化的“反透视”变化。因此,在《扫描仙人》中,文档的4个顶点坐标仅用来框选文档的大致位置,并不是精确的。对于文章刚开头,“缺角”文档的例子中,《扫描仙人》推测的顶点是这样的,虽然不准确,但这并不影响“去扭曲”的效果!

既然后面要靠“去扭曲”模型进一步调整,所以第一步到底是用分割模型,还是用检测模型也就无所谓了。

最后,在工程上,文档检测最复杂的部分,应该要属 yolo模型的预处理和后处理,改写成手机的native代码了。我在写这一部分代码时,deepseek还没出现,chatgpt的能力也远不及现在,所以开发android native c++代码还是花费了点时间的。

用这个例子对比了《扫描全能王》和《夸克扫描王》的结果,虽然在这个case上侥幸取胜,但并不代表《扫描仙人》已经超越了头部玩家。我把《扫描仙人》定位成一款便宜好用的,让低频扫描用户不用再承担高额的订阅费。

http://www.jsqmd.com/news/1167142/

相关文章:

  • 空号检测API接口-精准实时版与普通版双版本解读:在网状态精确查询与号码活跃度分层的场景适配
  • 沸石转轮+RTO与沸石转轮+CO-世博环保-深度解析:4个核心维度选对靠谱生产厂家 - GrowUME
  • MateCloud短信登录:验证码服务与第三方集成
  • yuzu Switch模拟器完整指南:在电脑上免费畅玩任天堂游戏
  • 2026无锡爱格可丽芙双授权全屋定制口碑TOP5 - 设计本
  • Flutter 与原生平台动画互通:Platform Channel 的实践总结
  • 30分钟黄金法则:用三个标准,告别伪高效,夺回人生掌控权
  • 企业级部署指南:NVIDIA-Nemotron-Labs-3-Elastic-30B-A3B-NVFP4如何降低AI基础设施成本
  • 2032年剑指20.34亿美元:氨糖软骨素钙片市场CAGR达6.5%及成本结构深度解析
  • 2026年7月最新北京雅典官方售后客户服务电话及线下网点地址 - 亨得利官方服务中心
  • 3分钟高效解决微信QQ消息撤回问题:终极防撤回补丁完整指南
  • 2026 杭州哪里回收积家 / 百达翡丽靠谱?本地测评榜首易奢福顶奢腕表无损估价 - ys韩
  • WaveTools鸣潮工具箱:一键解锁游戏性能与抽卡分析的终极指南
  • Switch游戏文件管理终极指南:如何用NSC_BUILDER轻松整理你的游戏库
  • 从 Windows 调试到 Orin 真机:宇树 G1 导览机器人语音交互开发全记录
  • Llama-3.1-8B-Instruct-FP8-KV-Quark-test:革命性FP8量化大语言模型完全指南
  • Claude Code CLI离线模式实测报告:无网络环境下仍可完成函数重构+单元测试生成(含完整shell脚本模板)
  • 2026 北京哪里有高价回收钻戒,易奢福为 30 年本土老店 - 奢侈品回收实体店
  • 珠海汽车音响老店真实体验分享汽车音响首推珠海繁声 - GrowUME
  • 基于STM32和TC78H651AFNG的高效直流有刷电机驱动方案
  • WaveTools鸣潮工具箱:终极指南 - 如何免费解锁帧率、管理账号和优化游戏体验
  • 2026年7月扬州​市公共卫生许可证检测集中空调通风系统检测水质检测空气质量甲醛检测怎么做?正规CMA机构办理指南 - 创达咨询
  • Cursor Next.js开发避坑清单:17个导致构建失败、热更新失效、Server Actions中断的隐藏配置雷区
  • 2026年劳力士品牌售后维修服务中心门店地址查询指南:全国授权门店分布与到店注意事项 - 劳力士服务维修中心
  • EtherCAT总线IO怎么选?运动控制产线优选推荐
  • 多文件编辑不是“打开多个标签”——Claude Code 4.0全新Context Graph引擎解析(仅限首批内测开发者知晓)
  • 线下门店线上化怎么做?小程序、预约和会员运营工具推荐
  • 面试狗 v6.6.0 实战评测:200+场景题库与GPT-4o模型在技术面试中的3秒响应实测
  • 亨得利中国官方售后服务中心|官方网站权威公告(2026年7月最新) - 亨得利腕表服务中心
  • 批量打印标签软件深度对比:Excel导入 vs 数据库连接,谁更高效? - 斑马爱打印