简介:本文从对抗样本思路出发,介绍一种通过“大字藏小字/小字藏大字”误导OCR检测流程的防护方法,讲解字号、行距、字距的参数组合与试错调优策略,并分析该方案的适用边界与失效条件,帮助开发者在文档截图、内容风控等场景中构建更稳健的图片文字防护能力。
在文档截图分享、内容审核、数据脱敏等场景中,图片中的文字往往会在未授权的情况下被自动OCR(光学字符识别)流水线提取。传统的防护手段集中在两类:一是模糊、马赛克、噪声等像素级破坏,二是水印覆盖。但这两种方式都有明显缺陷——像素级破坏会同时降低人类可读性,水印则容易被裁剪或算法去除。
更关键的问题在于:很多防护策略默认“攻击者”会像人一样先判断再处理,而真实的自动化流水线是无差别执行的。 如果对整张图统一加高斯模糊,正常内容也会一并失效;而对局部做处理,又需要人工先定位“哪里有大字”,这恰恰是自动化流程做不到的。
因此,一个更巧妙的设计思路是:不阻止OCR“看见”文字,而是利用它“看见”的结果去误导它自己。
OCR引擎通常遵循“检测—识别—后处理”的流水线。检测阶段负责定位文字区域(文本框/行/字符),识别阶段再对每个区域做字符分类。多数引擎在检测到某区域后,会将该区域标记为“已处理”,并在后续的二次检测或区域合并中降低重复检测的概率。
这就带来一个可利用的空间:如果我们在图片中布置一组“容易被检测到的大字”,并让这组大字本身携带着小字的视觉信息,OCR会优先把大字区域当作已识别内容,从而放弃对嵌套在其中的小字的二次检测。 而对人眼来说,大字是清晰的干扰项,小字才是真正想传递的内容,人眼可以轻松区分层级。
这就是“隐写对抗”的基本逻辑——不追求让文字不可见,而是让自动化识别流程“误判已完成”。 它分为两个方向:
两种方式的关键都在于字号差异足够大,使检测阶段产生明显的尺度分层,从而触发引擎的“已处理”标记。
原文给出的参数组合具有参考价值,核心是控制大字号、小字号、行间距、字间距四个变量。以下为经过整理的参数示例(示意性配置,实际需按目标引擎试错调整):
组合 A:大字 400px,小字 12px,行间距 1px,字间距 1px组合 B:大字 200px,小字 12px,行间距 1px,字间距 1px组合 C:大字 300px,小字 12px,行间距 1px,字间距 1px组合 D:大字 400px,小字 30px,行间距 0px,字间距 0px
参数选择的经验规则:
一个简化的生成逻辑示意(伪代码):
def render_cover_text(big_char, small_text, big_size=400, small_size=12):canvas = new_image(width=big_size, height=big_size)draw_char(canvas, big_char, size=big_size, color=light_gray)# 将 small_text 逐字填入大字笔画间隙区域for idx, ch in enumerate(small_text):pos = compute_gap_position(big_char, idx)draw_char(canvas, ch, size=small_size, pos=pos, color=dark)return canvas
关键点在于 compute_gap_position:它需要根据大字的笔画分布,把小字放在视觉上不破坏大字轮廓、但又能被检测器“顺带扫到”的位置。这正是“逐字填充”相对于“全局平铺”的优势——填充顺序可控,人眼可读性更好。
这个方案有一个非常清晰的边界:它只针对无差别的自动化OCR流水线,不针对带人工判断的攻击者。
原因在于:人类看图时会自然进行尺度分层——先看到大字轮廓,再注意到笔画间的小字。而OCR引擎的检测阶段是“尺度无关”的:它不会主动判断“这个大字里是否还有更小的字”,只要大字区域被标记为已识别,嵌套的小字区域就可能被跳过。
这也解释了为什么“加高斯模糊”不是等效方案:高斯模糊要生效,前提是有人先看出“这里有大字”,再手动对局部做模糊。而自动化模型不会主动判断“该不该模糊”,如果对整图统一模糊,正常内容也会一起失效——这相当于用牺牲可用性换取安全性,代价过高。
因此,该方法的定位应当明确为:面向批量、自动化OCR采集的“低成本干扰”,而不是面向定向人工攻击的强安全方案。
必须强调一个前提:该方法成立的基础是“目前没有针对这类隐写模式的专用检测模型”。 一旦攻击方针对“大字嵌套小字”的纹理特征训练了检测器,或者采用多尺度滑窗 + 密集区域重检的策略,这种误导就会失效。
工程落地时的建议:
防OCR识别不一定非要让文字“消失”。通过合理的字号分层与排版设计,让检测流程把“诱饵大字”误判为已完成区域,从而跳过真正的小字内容,是一种兼顾人眼可读性与自动化防护的思路。它的价值不在于对抗定向攻击,而在于以极低的实现成本,提升批量OCR采集的门槛。理解其适用边界,并在参数与方向上保持灵活试错,才是工程上稳妥的用法。