ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

电脑替代手机扫描App:图像矫正、OCR与批量扫描流水线

电脑替代手机扫描App:图像矫正、OCR与批量扫描流水线

有朋友前两天甩给我一个问题:电脑上有什么类似全能扫描王这类手机扫描 app 的软件。他手上是 47 页报销单据,还有一沓手写会议记录,手机拍完导到电脑上又糊又歪,一页页手动拉直裁边,硬是干到凌晨两点。我听完的第一反应是,这不是软件选得对不对的问题,而是大多数人对“扫描”这件事的工序没拆清楚。手机扫描 app 之所以显得聪明,是因为它把拍摄、找边、拉正、增强、识别、拼装这六道工序压成了一次点击;换到电脑端,这六道工序要么逐道找工具补上,要么用一条流水线串起来跑。这篇就按我自己的实操路径,把电脑端能接替手机扫描 app 的四类方案拆开讲:各自适合谁、核心参数怎么算、批量处理怎么落地,以及那些只有真跑过几十页纸才会遇到的坑。

1. 电脑端的“扫描”到底在扫什么:先拆工序再选工具

1.1 手机扫描 app 的六道工序,搬到电脑上是六件事

手机扫描 app 给人“一键搞定”的错觉,其实是把一条很长的处理链藏在了快门后面。第一步采集,它会在你按下快门的前后连拍多帧,挑最锐利的一张;第二步找边,用一个轻量分割模型把纸张轮廓从桌面背景里抠出来;第三步透视矫正,把四个角点映射成矩形;第四步光照校正,用背景估计把台灯造成的中间亮、两边暗压平;第五步增强或二值化,把灰底文字拉成黑白;第六步打包,合成 PDF 或者导出图片。

这套流程在手机上能跑得飞快,是因为它只处理一张图,而且手机厂商在图像信号处理上砸了大量专用算力。到了电脑上,麻烦立刻变成另一个维度:你要处理的是几十张甚至几百张图,而且每张图的背景、光线、倾斜角度都不一样。这时候单张效果好不好已经不重要了,重要的是参数能不能统一、失败的那几张能不能被快速挑出来重跑。

我一般把电脑端的需求拆成三个问题来问自己:手上有没有实体纸张需要过扫描仪,还是只有手机或相机拍的图?最终交付物是给人看的 PDF,还是需要能被检索、能被复制的文本?每天的量级是十几张还是上千张?这三个答案基本就决定了你该走哪条路,而不是去看哪个软件评分高。

1.2 四类电脑方案的能力边界对照

我把常见做法归成四类,它们的定位差别很大,硬凑在一起比较没有意义。下面这张表是我自己在不同场景下反复横跳之后总结的边界,先看清楚再动手,能省掉一大半试错时间。

方案类型典型能力每分钟处理量上手成本适合场景主要短板
系统内置扫描入口直接驱动扫描仪、双面进纸、生成多页 PDF20 到 60 页(取决于机型)极低,几分钟有实体纸张、批量正式归档不做图像矫正,纸质歪了就是歪了
开源矫正与增强工具自动找边、透视拉正、去阴影、二值化10 到 30 张中等,需要调参数手机随手拍的文档、书页、票据复杂背景容易找错边
带 OCR 的识别套件版面还原、输出可搜索 PDF 或文本5 到 15 页中等合同、报告、需要检索的资料前处理不到位时识别率断崖下跌
脚本流水线全自动批处理、可定制每一步30 到 80 张(不含 OCR)较高,要写代码每天上百张、格式固定的重复劳动出问题要自己 debug

表格里“每分钟处理量”这一列是纯图像处理阶段的数字,OCR 是另一个量级,后面会单独讲。很多人上来就问“哪个软件最好”,其实应该先看自己的输入是什么形态:如果纸张就在手边,扫描仪加系统自带组件永远是最稳的一条路,清晰度、色彩、页码顺序都不用你操心;如果只有一堆手机照片,那就得在矫正工具和脚本之间选。

1.3 选型逻辑:按量级和交付物决定路线

我给自己的判断标准是这样的:每天 20 张以内、只需要看得清的 PDF,直接用系统内置扫描入口,花五分钟就能交付,不值得为它折腾工具链;每天 20 到 200 张、来源是手机拍照,走“开源矫正工具 + 批处理输出”这条路,前期调参两小时,后面每天省一小时;需要文本可检索、可复制,就必须加一道 OCR,而且要接受识别率不可能 100% 这个事实,把校对成本算进去;每天上千张,或者格式高度固定比如全是同一种单据,那就写脚本,把六道工序全自动化,人力只负责抽检。

这个判断里有个容易被忽略的变量:失败率。手机扫描 app 单张失败,你重拍就行;电脑端批量处理 50 张,如果有 8 张找错了边,你事后要一张张翻出来重做,这个隐性成本远高于工具本身的学习成本。所以量越大,越要选“能自动跳过可疑项并单独输出”的方案,而不是追求单张效果最漂亮的那个。

2. 方案一:系统内置扫描入口,零成本起步

2.1 先试系统自带的原因:驱动与色彩管理的隐形优势

只要手边有一台带进纸器的扫描仪或者支持扫描的一体机,我第一推荐永远是操作系统自带的扫描组件,理由不在功能,而在底层。扫描仪是硬件,它的驱动层负责处理色彩空间转换、双面同步、进纸纠偏、去噪这些脏活,系统自带组件调用的是厂商驱动里的原生接口,出来的图是设备能给出的最好状态。第三方软件要么走同样的接口绕不开这一层,要么自己再套一套图像处理,反而多一次有损转换。

还有个实际好处:双面进纸和多页连续扫描在这种方案下是最顺的。你放一沓纸进去,它一页页过,自动生成带页码顺序的多页 PDF,中间不用你干预。这个能力在“把一堆纸质合同电子化”这种任务上是决定性的,因为顺序错了事后重新排序的麻烦远超想象。

注意:扫描仪玻璃面和进纸滚轮上的灰,会在整批图里留下同一条竖线或同一个黑点。扫描前花三十秒擦一遍,比事后一张张修图划算太多。

2.2 实操:从一台扫描仪到一份多页 PDF 的完整走法

整个流程我整理成四步,基本不会出岔子。第一步,在系统的搜索框里输入“扫描”两个字,把扫描组件调出来,第一次用会提示选择设备,选那台带进纸器的,别选错成虚拟打印机。第二步,在设置里把来源改成“进纸器”,纸张尺寸选 A4,分辨率先按 300 走,颜色模式按内容定,这一步后面会细说。第三步,点扫描前先看一下预览,确认第一页的边距和曝光是否正常,预览没问题再批量过纸,避免浪费一沓纸才发现整体偏了两度。第四步,扫描完成后在保存对话框里选 PDF 格式,勾上“所有页面保存到单个文件”,命名时把日期和内容写进文件名,比如“20250312-报销单据-47 页”,日后找起来一目了然。

如果机器没有进纸器,只有平板玻璃,那就一页页放。这时候我建议把分辨率降到 200,因为平板扫描一页要十几秒,300 分辨率下扫 50 页人会崩溃。200 分辨率对纯文字文档完全够用,打印出来也很清晰,只有需要放大看细节的图纸类文件才值得上 300 以上。

2.3 分辨率、色彩模式与体积的参数计算

这三个参数是绑定在一起的,改动一个另外两个的表现就变。我按 A4 纸(210 毫米乘 297 毫米,约 8.27 英寸乘 11.69 英寸)算一遍,你就有直观感受了。

300 DPI 下,A4 的像素尺寸是 8.27 乘 300 约等于 2481 宽,11.69 乘 300 约等于 3508 高,单页 870 万像素左右。如果按 24 位彩色存,原始数据是 2481 乘 3508 乘 3 字节,约 26.1 兆字节;转成灰度 8 位,就是三分之一,约 8.7 兆;转成黑白二值 1 位,只有约 1.09 兆。压缩成 JPEG 质量 85 之后,彩色一页通常在 400 到 800 千字节,灰度 200 到 400 千字节,黑白 80 到 150 千字节。那么 50 页的文件,彩色大概 20 到 40 兆,灰度 10 到 20 兆,黑白 4 到 8 兆。

这个差异在邮件附件和归档系统里非常致命。我的习惯是:纯打字文档一律灰度 300 DPI,带公章、红头、彩色图表的用彩色 300 DPI,超过 200 页的纯文本资料用黑白 400 DPI 换个高清晰度但更小的体积。至于 600 DPI,除非你要做文字识别的前期采集或者要打印翻拍件,否则完全是浪费,体积翻四倍清晰度肉眼根本分辨不出来。

3. 方案二:开源矫正与增强工具,把随手拍变成扫描件

3.1 自动找边与透视矫正的几何原理

手机拍文档最典型的问题是歪和斜。歪是指整张纸在画面里旋转了一个角度,斜是指手机没端平造成的透视变形,纸的远端窄、近端宽。这两种变形在数学上是两回事,旋转用一个二维仿射变换就能解决,透视变形必须用单应性矩阵,也就是把四个任意位置的点映射成一个矩形的变换。

自动找边的本质是找那四个角点。常见的做法是先转灰度、做高斯模糊压掉纹理、用边缘检测把纸和桌面的分界线提出来、做一次形态学闭运算把断掉的边缘连上、再找轮廓、取面积最大的那个、用多边形逼近看它是不是四边形。听着步骤多,实际跑起来单张图的耗时在几十毫秒量级。

难点不在算法,在场景。纸张放在深色木桌上,边缘很清楚;放在白床单上,纸和白床单的灰度差不到 20,边缘检测直接失效;纸张边缘如果有阴影,阴影会被当成纸张的一部分,找出来的框比实际大一圈。所以我一般会加两道保险:一是面积门槛,找出的轮廓面积必须大于整图面积的 15%,否则判定为失败;二是要求多边形逼近的结果恰好是四个顶点,不是四个就交给人工。这两道保险会让失败率上升,但换来的是“不会悄悄输出一张裁歪的图”,这个取舍在批量处理里是必须的。

3.2 实操:批量导入后自动找边、统一输出

具体操作上,我会先把所有待处理图放进一个独立目录,源图和输出图分开,永远不要覆盖原图,这是保底原则。然后统一做一次预缩放,把所有图的长边缩到 800 像素左右再去找边。为什么这么做?一是快,一张 4000 像素的原图做边缘检测要几百毫秒,缩到 800 像素只要几十毫秒;二是抗噪,高分辨率下的纸张纹理和印刷网点会形成大量假边缘,缩放相当于做了一次低通滤波,反而更稳。找到的四点坐标再按同样比例放大回原图,精度损失在千分之一以内,肉眼看不出来。

输出的时候强烈建议统一长边。同一批扫描件长短不一会导致 PDF 阅读器翻页时页面尺寸跳变,看起来非常业余。我一般统一到 A4 的 300 DPI 像素尺寸,也就是长边 3508,短边按原图比例算。如果原始比例和 A4 差得远,比如拍的是窄长的小票,那就保持原比例,只约束长边,别强行拉成 A4,会把字压扁。

3.3 去阴影与二值化:三个关键参数的调法

去阴影是决定成品观感的关键一步。原理说穿了很简单:把图像做一次大半径的形态学闭运算或者大范围高斯模糊,得到一个“背景亮度图”,然后用原图逐像素除以这个背景图,再做一次归一化。台灯照出来的中间亮两边暗,本质就是低频的光照不均,除掉它就平了。半径怎么定?我一般取图像短边的二十分之一左右,比如短边 2481,半径就给 120 上下,太小了会把文字本身的笔画当成背景,太大了去不干净渐变。

二值化就是另一个坑。全局阈值(Otsu)速度快,但只要页面里有一块大面积深色区域,比如一个黑框或者一张照片,阈值就会被拉偏,正文全变白。所以我优先用局部自适应阈值,它按小块计算阈值,对光照不均更鲁棒。参数上,块大小必须是奇数,通常取短边的六十分之一到四十分之一之间,比如短边 2481 就给 41 或 61;偏移常数 C 控制“多容易被判成黑”,C 越大越保守,字越细越容易被丢掉,一般从 10 开始试。

注意:处理带手写体或铅笔字的内容时,不要贪图干净去做二值化。手写的浅色笔画在二值化时会被整片抹掉,而且不可逆。这类内容只做去阴影和轻度对比度拉伸,保留灰度。

4. 方案三:带 OCR 的识别套件,把图片变成可检索文本

4.1 前处理决定识别成败:DPI、灰度与锐化的取舍

OCR 的识别率有很大一部分不在引擎,而在你喂进去的图。同样是 300 DPI,一张去过去阴影、对比度拉正的灰度图,和一张带黄光、有阴影、带噪点的手机照,识别结果能差出二十个百分点。所以我给自己的规矩是:先做几何矫正,再做光照校正,最后才送 OCR,顺序不能反。反过来的话,歪斜的文字会让行切分彻底错乱,后面的纠错都救不回来。

分辨率这块有个经验区间:正文高度在图像里占 30 到 40 像素时识别最稳。换算下来,五号字(约 10.5 磅)在 300 DPI 下大概是 44 像素高,稍微偏高一点但没问题;在 200 DPI 下约 29 像素,属于下限,再低就开始掉字。所以我送 OCR 的图基本固定在 300 DPI 灰度,不上彩色,一是省内存,二是色彩信息对识别没有正向帮助,反而可能引入色偏干扰。

锐化要不要加?轻度加,用非锐化掩模,半径 1 到 2 像素,强度控制在 0.5 左右。加太多会在笔画边缘产生白边,OCR 引擎把白边当成笔画间隙,反而切错。判断标准是放大到 200% 看,笔画边缘如果出现了明显的亮圈,就是过了。

4.2 识别精度自查:三个一分钟内能跑完的验证法

我从来不看软件给出的“识别准确率 99%”这种数字,自己验更靠谱。第一个方法,找一页包含数字、英文、标点混排的内容,识别完直接搜索一个特定的金额或编号,搜得到说明基础文本层没问题。第二个方法,检查换行和段落,横排文档最容易出的错是把两栏内容读成一行,或者把页眉页脚混进正文,翻两页就能看出来。第三个方法,专门测生僻字和易混字,比如形近的数字 0 和字母 O、数字 1 和字母 l、以及中文里那些笔画密集的字,这些位置是错误高发区。

三个方法跑下来还都过关,那这批文档的识别质量基本可用。如果第一关就挂了,别急着换引擎,先回头查前处理:是不是二值化把细笔画吃掉了,是不是分辨率不够,是不是有倾斜没矫正。

4.3 版面还原与输出格式:纯文本、双层 PDF、可编辑文档怎么选

输出格式的选择取决于下游谁用。纯文本最轻,但丢掉所有版面信息,表格会变成一堆错位的词;可编辑文档保留了段落和基础样式,适合需要二次修改的场景,但转换过程会引入额外的格式 bug,尤其是表格和分栏;双层 PDF 是我最常用的,它在原始图像上叠一层不可见的文本层,肉眼看还是原图,但可以搜索、可以选中复制,既保住了原始版面又拿到了可检索性。

双层 PDF 的体积大概是纯图像 PDF 的 1.3 到 1.8 倍,这个代价我认为很值。归档类资料我都走这条路。有个细节要注意:双层 PDF 的文本层质量和图像质量是解耦的,图像糊了但文本层是对的,搜索照样能用;反过来图像很清晰但文本层错字连篇,用户搜不到就等于白做。所以验收的时候要搜,不要只看。

5. 方案四:脚本流水线,一分钟几十张的真相

5.1 之所以快,靠的是流水线不是手速

“一分钟搞定几十张”这句话,如果你理解成靠手速一张张点,那永远做不到。真正快的原因是:这些图被当成一批数据流过同一条处理链,中间没有任何人工决策。找边失败的直接进隔离目录,成功的自动矫正、增强、缩放、编号、拼装,人的角色从操作者变成抽检者。

拆解一下时间都花在哪。一张 4000 像素的手机照,解码加预缩放约 60 毫秒,边缘检测和轮廓查找约 40 毫秒,透视变换约 30 毫秒,去阴影的高斯模糊是大头,半径大的时候能到 150 毫秒,自适应阈值约 40 毫秒,编码存盘约 50 毫秒,合计 0.37 秒左右。40 张就是 15 秒。加上读写磁盘和 Python 的调度开销,实际跑 25 到 40 秒,这就是“一分钟几十张”的真实来源。如果再加 OCR,单页 1 到 3 秒,40 页串行就是一两分钟,这时候才需要多进程。

5.2 最小实现:批量矫正、增强并合成 PDF

下面这段是我自己一直在用的骨架,去掉业务相关的部分,只留通用逻辑。依赖两个库,图像处理库和 Python 图像库,装完就能跑。

import cv2 import numpy as np from pathlib import Path from PIL import Image SRC = Path("./raw") DST = Path("./out") FAIL = Path("./fail") for d in (DST, FAIL): d.mkdir(exist_ok=True) TARGET_LONG = 3508 # A4 长边 @300dpi def order_points(pts): """把四个角点排成 左上、右上、右下、左下""" rect = np.zeros((4, 2), dtype="float32") s = pts.sum(axis=1) d = np.diff(pts, axis=1) rect[0] = pts[np.argmin(s)] rect[2] = pts[np.argmax(s)] rect[1] = pts[np.argmin(d)] rect[3] = pts[np.argmax(d)] return rect def find_page(img, work=800): """在缩放图上找纸张四角,返回原图坐标系下的四点""" h, w = img.shape[:2] scale = work / max(h, w) small = cv2.resize(img, None, fx=scale, fy=scale) if scale < 1 else img.copy() gray = cv2.cvtColor(small, cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gray, (5, 5), 0) edges = cv2.Canny(gray, 60, 180) edges = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, np.ones((5, 5), np.uint8)) cnts, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) if not cnts: return None cnt = max(cnts, key=cv2.contourArea) if cv2.contourArea(cnt) < 0.15 * small.shape[0] * small.shape[1]: return None # 面积太小,判定失败 approx = cv2.approxPolyDP(cnt, 0.02 * cv2.arcLength(cnt, True), True) if len(approx) != 4: return None # 不是四边形,判定失败 return order_points(approx.reshape(4, 2) / scale) def warp(img, pts): tl, tr, br, bl = pts w = int(max(np.linalg.norm(br - bl), np.linalg.norm(tr - tl))) h = int(max(np.linalg.norm(tr - br), np.linalg.norm(tl - bl))) dst = np.array([[0, 0], [w - 1, 0], [w - 1, h - 1], [0, h - 1]], dtype="float32") return cv2.warpPerspective(img, cv2.getPerspectiveTransform(pts, dst), (w, h)) def flatten(img): """去阴影:原图除以背景亮度图""" gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) k = max(15, (min(gray.shape) // 20) | 1) # 保证是奇数 bg = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, np.ones((k, k), np.uint8)) bg = cv2.GaussianBlur(bg, (0, 0), 25) return cv2.divide(gray, bg, scale=255) for f in sorted(SRC.iterdir()): if f.suffix.lower() not in {".jpg", ".jpeg", ".png"}: continue img = cv2.imdecode(np.fromfile(str(f), dtype=np.uint8), cv2.IMREAD_COLOR) pts = find_page(img) if pts is None: (FAIL / f.name).write_bytes(f.read_bytes()) print(f"[skip] {f.name}") continue doc = warp(img, pts) doc = flatten(doc) h, w = doc.shape if max(h, w) > TARGET_LONG: r = TARGET_LONG / max(h, w) doc = cv2.resize(doc, (int(w * r), int(h * r)), interpolation=cv2.INTER_AREA) cv2.imwrite(str(DST / (f.stem + ".jpg")), doc, [cv2.IMWRITE_JPEG_QUALITY, 88]) print(f"[ok] {f.name} -> {doc.shape[1]}x{doc.shape[0]}")

合成 PDF 只需要几行:

pages = sorted(DST.glob("*.jpg")) imgs = [Image.open(p).convert("RGB") for p in pages] if imgs: imgs[0].save("./out/scan.pdf", save_all=True, append_images=imgs[1:], resolution=300.0)

OCR 那一步我会单独跑一个命令行,把引擎换成你实际用的那个,参数按它的文档来:

for f in out/*.jpg; do ocr-engine --input "$f" --lang chi+eng --output "out/$(basename "$f" .jpg)" done

5.3 并发、内存与临时文件管理

量上来之后,第一个瓶颈通常不是 CPU 而是内存。一张 4000 乘 3000 的彩色图解码成数组就是 36 兆,40 张如果一次性读进列表,瞬间 1.4 个 G 就没了。我改成流式处理,读一张、处理一张、写一张、释放一张,峰值内存稳定在百兆以内,这个改动让一台老机器也能跑几百张的批次。

第二个坑是顺序。文件名如果是手机自动命名的,字母序和拍摄顺序经常对不上,拼出来的 PDF 页码是乱的。解决办法有两个:要么在拍照时就按“页数三位补零”的规则重命名,要么读文件的创建时间排序。我倾向后者,因为前者要人工干预,违背了自动化的初衷。

多进程要不要上?图像处理阶段不用,单进程已经够快,多进程反而增加磁盘竞争。OCR 阶段值得,一般按 CPU 核心数减一开进程,四核开三个,实测吞吐能到接近三倍。临时文件别写在系统临时目录里,一是可能被清理,二是跨盘拷贝会拖慢速度,我就统一在工作目录下开一个 tmp 子目录,跑完手动确认再删。

6. 常见问题与排查实录

6.1 边缘检测失败、文字发灰、PDF 体积失控:速查表

这套流程跑多了,出问题的地方其实高度集中。我把最常撞上的几类现象和对应处置整理成表,遇到异常先按这张表过一遍,八成能直接定位。

现象最可能的原因快速验证处置办法
找边完全失败,整批都进隔离目录纸张与背景灰度太接近把图转灰度肉眼看边缘对比换深色背景重拍,或先做一次对比度拉伸再找边
找出来的框明显偏大或偏小纸张边缘有阴影或压了异物画出四点看看落在哪提高 Canny 阈值,面积门槛调到 20%
矫正后文字发灰、像蒙了层雾去阴影的模糊半径太小调大半径看背景是否变平半径取短边的二十分之一,配合轻度对比度拉伸
二值化后部分区域整块变白全局阈值被深色区域带偏切成局部阈值再跑一次用自适应阈值,块大小取短边四十分之一
文本层搜索不到关键词OCR 前图像倾斜或分辨率不足单页跑一遍看结果先矫正到 300 DPI 灰度再送识别
PDF 体积特别大彩色模式下 300 DPI 直接存看单页大小是否超过 1 兆纯文字改灰度或黑白,JPEG 质量降到 85
处理速度越跑越慢图片被一次性读入内存看内存占用曲线改流式处理,逐张读入及时释放
输出 PDF 页码乱序文件名排序与拍摄顺序不符对比首末页内容按文件创建时间排序或重命名补零

6.2 我在实际项目里踩过的五个坑

第一个坑是“先矫正再增强”和“先增强再矫正”的顺序。早期我图省事,拿手机原图直接做自适应二值化,然后再找边,结果因为二值化把纸张边缘和桌面之间的细节吃掉了,找边成功率掉到六成。正确顺序永远是先几何后光度,因为边缘检测依赖的是灰度梯度,任何阈值化操作都会破坏这个梯度。

第二个坑是过度追求黑白。有一批手写签字的文件,我为了体积把所有页都转成二值,结果浅色签字笔的签名全部消失。这属于不可逆损失,原图还在还好办,如果原图被覆盖了就只能重新采集。从那以后我给自己定了条死规矩:带手写、带公章、带照片的内容一律保留灰度,只在纯印刷体上做二值化。

第三个坑是缩放顺序。我一开始习惯先找边、再矫正、最后统一缩放到目标尺寸,这看着合理,实际上多次重采样会把文字边缘磨得发虚。后来改成先在最接近目标尺寸的尺度上做矫正,一次插值到位,锐度明显好一截。这个细节对 OCR 的影响比想象中大,尤其是小字号。

第四个坑是线程数开太满。有次在一台四核机器上开了八个 OCR 进程,看着 CPU 跑满很爽,实际吞吐反而比开三个低了两成,因为内存带宽被抢爆,进程间频繁换页。多进程的甜蜜点通常在核数减一到减二之间,压测一遍比拍脑袋强。

第五个坑是没留失败通道。最初我把找边失败的图直接跳过,日志也不打,跑完以为处理了 50 张,实际只有 41 张,交出去才发现少了九页。现在的做法是失败必进隔离目录,文件名带上原图名,跑完最后打印一行统计“成功 41,失败 9”,看到这个数字不对,立刻回查,绝不带着疑问交付。

我个人在实际操作中的体会是,电脑端这套东西真正的价值不在于某个软件多强,而在于把“采集、矫正、增强、识别、打包”这五步解耦之后,每一步都能单独调、单独重跑。手机扫描 app 帮你把五步合成一步,代价是任何一步出问题你都只能重来;电脑端把五步摊开,前期配置确实要多花两小时,但配置一次之后,每天几十上百张的重复活就变成了跑一条命令的事,而且心里清楚每一步在干什么。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进