简介:本文深入解析利用人眼与OCR感知差异实现“对抗识别”的核心原理:通过“大字藏小字”“小字藏大字”两类双层文字隐写结构,配合字号比例、行间距、填充顺序等参数调优,使OCR只捕获干扰层文本而遗漏真实信息层。文章同时给出实现要点、效果验证方法、局限性分析与合规风险提示,帮助读者系统性理解OCR系统的边界与加固方向。
通用 OCR 技术的处理流程通常高度工程化,可以粗略拆分为两个阶段:文本检测(定位图中所有可能的文字区域)与文本识别(对每个区域逐行输出字符结果)。以百度智能云文字识别为代表的云端识别服务,以及各类本地识别引擎,基本都遵循这一“检测+识别”的两段式范式。
流程的固定性带来了两个可被利用的特点:
而人眼的感知方式与此完全不同:人类视觉擅长低频、整体性的形状感知(即格式塔效应),可以在一定距离外把成千上万个细小笔画聚合成一个完整的大字形。这种机器与人在感知尺度上的差异,正是图像文字隐写对抗 OCR 的立足点。
直觉上的对抗手段是“堵”:加噪点、打马赛克、加模糊,让 OCR 什么都识别不出来。但这类方法有明显缺陷——预处理(如去噪、超分、自适应二值化)是 OCR 工程链路中的常见环节,简单的破坏性处理很容易被通用增强手段还原或绕过;而且过度破坏画质的图片,人眼阅读体验也会同步受损。
更有效的思路是“疏”:主动让 OCR 识别出文字,但识别出来的是我们安排好的干扰文本。当干扰文本铺满整个画面区域后,OCR 的检测模块会认为“该位置已经检测并识别完毕”,从而放弃更深粒度的二次扫描。真实信息则存在于另一个感知尺度上,只对人眼可见,对机器“隐形”。
这套机制的本质是构造一个双层结构:
两个层次在物理上重叠于同一张图,但在感知上被彻底分离。
根据目标 OCR 系统“擅长看大字”还是“擅长看小字”,可以选择不同的层次安排方式:
将真实信息渲染为超大字形(例如 300~400 像素级别的字号),再以极小字号(例如 12 像素)的干扰文本填满大字形的笔画内部,行间距与字间距压缩至 0~1 像素,使小字在视觉上融为笔画的一部分。
这种方式适合应对全局检测能力较强的 OCR:因为画面被小字完全覆盖,检测模块在任何区域都能“找到字”,自然不会怀疑大字形的轮廓本身也是一个待识别对象。
真实信息的大字形不直接绘制,而是由大量正常排布的小字文本块“拼”出来——每个小字相当于大字形上的一个“像素点”,远看时小字块在空间上聚合出大字轮廓。
这种方式适合应对对小字检测非常精确的 OCR:既然它一定会把小字读出来,那就让小字成为完整的诱饵,而大字形因缺乏直接的笔画连通性,反而不会被当作文字区域。
两种路径的取舍可以概括为一句话:观察目标 OCR 在哪个尺度上最强,就把哪个尺度做成诱饵层。一般来说,各家的处理流程是固定且可复测的,因此只需少量试错,就能确定总有一种方式能让识别结果落在干扰层上,见招拆招即可。
实际构造时,以下参数决定了成败:
一段示意性的核心流程如下(仅为原理说明,非可直接运行的完整实现):
输入: 真实文本 real_text, 干扰文本 decoy_text, 参数(大字号, 小字号, 间距)1. 将 real_text 以大字号栅格化,生成字形蒙版 mask2. 以小字号对 decoy_text 做紧排布局,布局区域约束在 mask 内(按"逐字填充"顺序,行间距/字间距取 0~1 像素)3. 将布局后的小字逐个绘制到画布4. 输出图像,并用目标 OCR 做回归验证:- 期望输出 = 干扰层文本- 若输出为空或混合结果,则调整字号比例与间距后重试
验证标准非常明确:人眼读到的应当是呈现层,OCR 输出的应当是干扰层。测试时建议区分两种结构分别构造样张,确认识别结果落在预期的那一层上,而不是笼统地看“识别没识别出来”。
一个容易被忽视的细节是图像压缩:12 像素级别的小字对有损压缩和缩放非常敏感,经过压缩后小字可能糊成噪点,导致 OCR 连干扰层都读不出来,测试结果失真。因此在评估时应尽量使用原始分辨率的图片,移动端测试结果与桌面端可能存在系统性差异,竖版大图相对更容易保留细节。
这套方法并非无懈可击,其有效性建立在几个前提之上:
从防御视角看,OCR 系统的加固方向也很清晰:引入多尺度二次扫描、对画面中字号分布异常(例如同时存在极端大字与极端小字)的图像触发告警、在检测后对高密度小字区域做跨尺度复核等。
必须强调:此类技术的滥用场景——规避内容审核、传播违规信息——在多数司法辖区都可能触碰法律红线,平台规则对此类行为也有明确约束。曾有开发者在公开分享此类方案后,出于被用于不当用途的顾虑而主动删除了可运行的代码,只保留原理讨论,这个谨慎态度值得借鉴。
对安全研究者而言,理解这类对抗手法的价值在于揭示通用 OCR 系统的边界条件,推动识别服务在多尺度检测、异常排版感知等方向持续加固;对普通开发者而言,了解这些原理则有助于在设计内容安全方案时不把“OCR 能读出来”当作唯一防线。技术的攻防从来是成对出现的,看清矛,才能造好盾。