简介:想让图片中的文字不被OCR识别,单纯加模糊、加噪往往效果有限,甚至适得其反。本文从OCR通用流程出发,剖析检测与识别环节的固有假设,梳理传统扰动手段的局限,重点讲解“大字藏小字”“小字藏大字”两类文字隐写思路、参数设计与多引擎验证方法,并从防御视角讨论技术局限与合规边界,帮助读者建立“人可读、机难读”的完整方案认知。
一、先明确目标:防机器,不防人
在实际业务与个人场景中,“让图片里的文字不被OCR识别”是一个真实且常见的需求:外发聊天记录、票据、笔记截图时,希望防止图片被自动化工具批量抓取并结构化建库;创作者希望保护原创内容不被低成本爬取转载;普通用户也不希望随手分享的照片中的个人信息被批量提取。这里要先划清一条关键界线:目标是“机器读不出、人照样能读”。如果一种处理方式连人眼都难以辨认,那只是把图片毁了,并没有解决信息保护问题。同时必须强调:这类技术只能用于隐私保护、防自动化采集、版权提示等正当用途,不能用于制作、传播违法违规信息或规避平台内容安全审核,否则存在明确的法律风险。
二、理解OCR流程,才能找到薄弱点
主流OCR系统(包括各大云厂商的智能文字识别服务与常见开源引擎)的处理链路高度一致,大致分为四步:
这条流水线建立在几个隐含假设之上:
防OCR的设计空间,几乎全部来自对这些假设的针对性破坏。
三、传统手段为什么不够用
结论是:传统手段很难同时满足“人可读、机不可读、对传输链路鲁棒”三个约束,需要换一条思路——不去“堵”OCR,而是去“喂”它。
四、文字隐写:用OCR自己认出的文字迷惑它
核心思想是一句话:让OCR“成功地”识别出一段诱饵文本,使其认为该位置已经完成检测,从而放弃对真正内容的二次挖掘。OCR流程是一次性、固定策略的,这种误导对它有效;而人眼具备跨尺度灵活切换的能力,先看整体再看细节,完全不受影响。依据诱饵与真实内容所处的尺度关系,有两种互补的实现方向。
方案A:大字藏小字
方案B:小字藏大字
选择策略并不复杂:不同OCR的预处理与检测流程不同,对小字与大结构的敏感度也不同——对小字检测准的用方案B,对全局大结构检测强的用方案A。由于各家流程固定,试错成本很低,逐一验证即可,通常总有一种能让目标引擎“读不出来”。
示意性伪代码(方案A):
输入: 大字文本 L, 诱饵文本库 D画布 C ← 空白for ch in L: # 逐个大字处理M ← 以大字号(如400px)渲染 ch, 得到字形掩膜S ← 提取 M 的笔画像素区域在 S 内按小字号(如12px)、字距行距0~1px逐行填入 D 中的诱饵文本将填充结果拼接到 C输出: C
五、工程实践要点与验证方法
六、局限、合规边界与防御视角
局限方面要有清醒认识:其一,这类方法有效的前提是当前没有针对该类隐写专门训练的识别模型;一旦防御方把“大字由小字拼成”的样本纳入训练与检测,方案即告失效。其二,图片压缩对方案本身也是威胁,参数需要随链路持续维护。其三,对抗是动态博弈,不存在一劳永逸的方案。
合规方面,技术中立不代表用途无边界。它可以服务于个人隐私保护、防止内容被自动化批量采集、版权来源提示等正当目标;但绝不能用于制作、传播违法违规信息或规避内容安全审核,这不仅涉及平台规则,更可能触及法律红线。不少公开分享过相关实现的人,最终正是出于这种顾虑撤下了可运行代码、只保留思路,这个态度值得借鉴。
从防御视角看,识别侧并非无解:可以引入多尺度检测与超大字号样本增广;对识别结果做覆盖率与乱码率分析,当文本框面积占比、字符置信度分布异常时触发复核;利用“小字拼成的大字在低频上呈现字形结构”这一特点做频域或笔画密度二级检测;对可疑图片保留人工审核通道。对攻防两端理解越深,方案设计才越稳妥。
七、小结
防OCR识别的本质,是利用自动化流程“策略固定、一次通过、尺度敏感”的固有假设,在“机器读到的内容”与“人看到的内容”之间制造尺度差。传统扰动手段难以兼顾人眼可读性;文字隐写通过“投喂诱饵文本”实现了对流程假设的精准打击,配合参数调优与多引擎验证,可以工程化地实现“人可读、机难读”的目标。同时也应始终记住:这只是攻防博弈中的一环,任何方案都有有效期,而合规与责任,是这项技术不可逾越的底座。