朋友发来一批日文护肤品标签图,说要快速“汉化”成中文版挂到跨境店铺里。刚听到需求时我以为就是翻译一下,结果打开图片才发现,瓶身上印着密密麻麻的日文卖点、成分表和用法说明,要改的不是一句标题,而是整张图片里的视觉文字——这就是跨境电商圈里常说的视觉本地化。运营同学的原始方案是让设计用PS逐张抠字重贴,处理到第20张就崩溃了,因为这个工作量根本不是人力能扛的。
视觉本地化的核心问题并不在“翻译”,而在于:图片里的文字是像素,不是文本。要让一张日文标签图变成中文版,而且看起来像原厂就是用中文印的,必须做三件事:先识别出图片里的文字区域和内容(OCR),再把原来的文字从图像里“擦掉”并补出干净背景(Inpainting),最后把翻译后的中文按原设计的字体、位置、角度合回去。今天这篇就是围绕这条流水线,讲讲为什么商品图“汉化”这么难,OCR和Inpainting在真实场景里到底是怎么配合的,以及我在实际批量处理中踩过的坑。
1. 为什么商品图“汉化”本质上是个图像编辑难题
1.1 先拆解任务:识读、擦除、重排
我们拿一张典型的跨境商品主图举例:背景是渐变色,瓶身居中,瓶身上用艺术字印着英文或日文卖点,底部还有一行小字成分说明。要把这图改成中文版,流程是这样的:
- 识读:定位出图片中每一处文字的位置,并识别出文字内容。这一步不仅要知道“这里有字”,还要知道是“哪几个字”。
- 擦除:把文字像素从原图中去掉,同时把文字遮住的背景“补”回来。文字不可能只占一个矩形框,它往往压在瓶身纹理、渐变、反光上,擦除后的区域必须和周围浑然一体。
- 重排:翻译后的中文按原文字的位置、尺寸、倾斜角度放回去,颜色和光影还要和原图匹配。
三步中任何一步出问题,成品就会“一眼假”。所以视觉本地化看似是翻译问题的延伸,本质却是一个完整的图像编辑工程。理解了任务结构,才能理解后面每个技术选型的逻辑。
1.2 图片类型决定难度:从纯色底到复杂场景
不是所有商品图都值得走全自动流水线的。我一般先把图片按背景复杂度分成几个等级,再决定用自动处理还是直接人工重做。
| 难度等级 | 图片类型 | 主要风险 | 自动化建议 |
|---|---|---|---|
| 低 | 纯色底、简单色块上的文字 | 字体阴影残留、边缘锯齿 | 全自动,效果好 |
| 中 | 渐变背景、规则纹理 | 修复区出现断层带、纹理错位 | 全自动加局部抽检 |
| 高 | 实物场景、复杂纹理、艺术字叠加 | 背景“脑补”失真、结构断裂 | 自动初稿加人工精修 |
| 极高 | 文字面积占比过大或压在关键图案上 | 修复区域过宽,模型变成“凭空作画” | 建议重新设计素材,别硬修 |
我的经验是:文字区域占整图比例超过15%~20%,且背景是人物、植物、杂乱场景时,直接放弃自动修复。因为Inpainting在缺失信息过多时,只能靠猜测补图,猜出来的背景细节大概率与原图对不上。做之前先按这个维度预筛一遍,能省下大量返工时间。
1.3 为什么“字体形状”让汉化比英化更难
同样一句话,英文可能8个字符就够,中文偏偏要缩成4个汉字;反过来,日文假名写出来占的宽度又和中文完全不同。翻译后的文字宽度变化,直接导致排版溢出。就算宽度正好,中文笔画密集,在字号缩小后很容易粘连发虚,观感远不如英文清晰。
更现实的问题是:很多跨境商品图的原文字是日文、韩文、泰文,这些语种的字符识别本身就比英文复杂。日文里有大量汉字和假名混排,韩文是字母组合成方块字,泰文有复杂的上标下标,这些都会让OCR的置信度大幅波动。所以在翻译环节,我通常会加一条硬规则:翻译结果不得使用强制直译,必须允许根据原文字区域的宽度压缩文案。宁可少写两个字,也不能让中文溢出原文字框。
2. OCR在前线的真正考验:艺术字、弯曲文字和低对比度
2.1 常规OCR流程在商品图上的局限
OCR的标准流程是“文本检测+文本识别”,有的还会加一步方向分类。文档扫描场景里,OCR已经做得非常成熟:白底黑字、横平竖直、字体规整,识别率接近100%。但商品图是设计过的图像,文字往往自带艺术效果:渐变填充、立体阴影、透视倾斜、反光遮挡,甚至整个文本行沿着瓶身弧度弯曲。
这种情况下,常规OCR引擎的识别效果会断崖式下跌。老牌开源方案Tesseract就是典型例子,它依赖二值化预处理,抗干扰能力较弱,遇到复杂背景时经常把笔画和纹理混在一起,输出一堆胡言乱语。我早期拿Tesseract做过一版Demo,处理简单的白底黑字还行,一上真实商品图基本没法用。
2.2 检测算法怎么选:EAST、CRAFT与DB的取舍
文本检测是整个流程的地基,它的坐标框决定了后面Inpainting要擦哪些区域。不同的检测算法对艺术字的适应能力差异很大,我按实际项目里用下来的感受列个表:
| 检测方案 | 原理要点 | 优势 | 短板 | 适用场景 |
|---|---|---|---|---|
| EAST | 直接回归文本行的四边形坐标 | 速度快、实现简单 | 对弯曲文本和任意排列支持弱 | 横平竖直的标签、说明书 |
| CRAFT | 字符级检测后聚类成文本行 | 能处理弯曲、旋转、粘连、竖排 | 耗时相对高、后处理复杂 | 瓶身弧度文字、日文竖排 |
| DBNet | 分割图加可微分二值化 | 精度和速度平衡好,工业常用 | 极弯曲文本略弱 | 中大规模批量图片 |
| PP-OCR系列 | 工程化打包的检测+识别方案 | 中文和多语言模型开箱即用 | 对特别艺术化的字体仍需微调 | 跨境商品图多语言场景 |
如果你是从零起步,我建议直接用PP-OCR这类自带多语言模型的工程方案,而不是自己从头训练。不要低估多语言预训练模型的价值,日文、韩文、中文混排的商品图,用现成模型的效果远超自己攒的数据集。只有当你的图片风格很统一、错误率集中在某个特定场景时,才值得用几百张标注图微调检测模型。
2.3 识别环节的坑:OCR一错、翻译全错
文本识别最让人头疼的问题不是“识别不出来”,而是“识别得信誓旦旦却错了”。OCR的结果会直接喂给翻译服务,一旦关键词被认错,翻译出来的意思就可能完全跑偏。比如“成分”被识别成“成为”,“不含防腐剂”被识别成“不含防腐刑”,这类错误在中文信息里还能人眼看出来,但在日文、韩文里,非母语人士很难察觉。
我的处理办法是给OCR结果加置信度过滤:低于0.7的文本块不进入翻译链路,直接标记为“低置信度待人工确认”。宁可让运营同学人工瞄一眼,也不能让错误内容直接生成到商品图上。跨境商品的文字信息涉及成分、规格、警示语,一旦出错,轻则差评,重则被平台下架,这个兜底绝对省不得。
还有一个小细节容易被忽略:阅读顺序。一张图上分布着多个文本块,翻译后的排版顺序必须和原图一致。你不能直接按检测结果的顺序来,而要先按行聚类,再在行内按从左到右或从上到下的坐标排序。否则翻译后的语序可能就是乱的,中文用户读起来会觉得莫名其妙。
2.4 OCR输出到Inpainting的接口细节
OCR不止是为翻译服务的,它输出的坐标信息直接决定Inpainting要擦哪里。这里有个关键坑:很多检测算法默认输出轴对齐矩形框,但艺术字的边缘往往是倾斜的、弯曲的,矩形框会框进大量背景,也会漏掉文字笔画的边角。
我的做法是让检测模块优先输出多边形坐标,如果算法只能给矩形框,就在生成mask前做一次切分:把矩形框按文字的实际像素密度收缩,再对边缘做平滑处理。拿到多边形后,转成二值mask,然后做两步关键操作:
- 膨胀:按字体大小向外扩1.0~1.5倍,确保文字残边被完全覆盖;
- 羽化:在mask边缘做3~5像素的渐变过渡,防止修复区出现硬边。
这一步做不好,Inpainting再强也白搭。mask太小,修复完会残留文字边角;mask太大,会波及不该动的背景细节。它就像做手术时的切口范围,开大了伤好组织,开小了病灶切不干净。
3. Inpainting的进化:从OpenCV修补到LaMa与扩散修复
3.1 传统inpaint为什么只适合“填空”
Inpainting就是把图像中被遮住的区域补出来。早期最常用的是OpenCV内置的两种算法:Telea和Criminisi。Telea基于快速行进,从mask边缘向内部一层层填充颜色,适合修小污点、划痕;Criminisi基于纹理合成,擅长处理砖墙、草地这类重复纹理。
但商品图去文字的问题在于:文字区域往往不小,而且背景可能是渐变、反光、复杂印纹。传统方法面对这些情况就是一团糊。Telea会把渐变填成一块色斑,Criminisi在非重复纹理上会生成错误的排列。所以我的经验是:只有文字压在纯色或极平滑背景上时才用OpenCV,其余情况直接用深度学习模型。
3.2 为什么LaMa这种深度学习模型适合商品图去字
深度学习修复模型这几年进步非常快,其中最让我印象深刻的是LaMa。它的核心思路是用大感受野骨干网络加傅里叶卷积来捕捉图像全局结构,专门解决大面积修复问题。这个能力恰好对应商品图去字的痛点:文字区域通常不小,而且需要模型“脑补”出被文字遮住的背景图案。
实测下来,LaMa在中等面积文字擦除上效果非常可靠。印刷文字被擦掉后,它能合理还原底下的包装纹理、渐变过渡,有时甚至能补出被遮了一半的小图标。而且LaMa的推理速度够快,一张1024×1024的图在GPU上跑一次修复只要一两秒,适合批量处理。需要注意的一点是:LaMa对mask质量的依赖比传统方法更强,mask越贴合文字区域,修复结果越自然。
3.3 扩散模型修复:效果天花板高,工程化成本也高
如果你追求极致的效果,可以用扩散模型做修复,给它一个类似“remove the text, keep the original background”的提示词,它会根据整个图片的上下文重新生成填充区域。效果自然度确实是最高的,复杂背景下的表现也明显优于传统深度学习模型。
但这个方案有几个工程化难题:单张耗时从秒级变成几十秒;多次采样结果不稳定,背景细节可能被模型“改写”;GPU成本显著上升;商用授权得仔细确认。所以我的建议是分级使用:常规图片用LaMa批量处理,LaMa结果明显穿帮的少量图片再走扩散模型兜底,而不是全量上扩散。
3.4 修复质量的评估几乎不可能“自动打分”
Inpainting有一个绕不开的问题:修复区域没有标准答案,PSNR、SSIM这些指标在这里基本没有意义——因为你压根没有原始无字图做对比。所以线上流程里,修复质量只能靠人工抽检。
抽检时我主要看两点:一是修复区与周边纹理的“频率”是否一致,原图如果有噪点颗粒感,修复区却是光滑的,一眼就能看出来;二是结构线是否连续,比如瓶身上的分割线、色带的边界,断掉了说明修复失败。这里有个小技巧:如果修复区明显偏光滑,可以在该区域加一点轻微高斯噪声来匹配原图颗粒感,观感会立刻提升不少。
4. 一条可落地的“叠字擦字重排”流水线拆解
4.1 每个模块的输入输出与失败兜底
我搭的自动化流水线大致是这样的:输入原始商品图,经过预处理、OCR、翻译、mask生成、Inpainting、文字合成、后处理,最后输出本地化图片。每个模块的职责和兜底策略如下表所示:
| 模块 | 输入 | 输出 | 失败兜底 |
|---|---|---|---|
| 预处理 | 原始图片 | 统一尺寸、方向修正 | 尺寸过大直接缩放,避免爆显存 |
| OCR | 预处理图 | 文本内容、坐标框、置信度 | 低置信度文本不进翻译,标记人工 |
| 翻译 | OCR文本 | 目标语言文本 | 超长文本压缩或拆行,不允许溢出 |
| Mask生成 | 坐标框 | 膨胀羽化后的二值图 | 矩形框先转多边形,防漏擦 |
| Inpainting | 原图+Mask | 去字后的干净背景 | 结果颜色异常则重跑一次并用扩散兜底 |
| 文字合成 | 翻译文本+原图坐标 | 带新文字的合成图 | 溢出时缩字号、换行或居中对齐 |
| 后处理 | 合成图 | 最终本地化图 | 与原图叠加抽检,看边缘和颜色 |
这里我特别说明一下预处理。很多商品图为了页面展示会被裁成不同比例,直接送入OCR和Inpainting会导致检测框尺度漂移。我的做法是把最长边统一缩放到1024,等比缩放,尺寸归一化后再走后面的流程,既稳定模型效果,也能控制计算成本。
4.2 三处让效果质变的关键调整
流水线跑通容易,跑出能直接用的效果难。我在这套流程里反复调整过很多次,最后沉淀出三个影响最大的细节:
第一,mask生成时“先多边形化,再膨胀,再羽化”。直接对轴对齐矩形框做mask,会把大量无关背景圈进来,Inpainting会花很大力气去重建那些本来没被文字遮住的区域,结果反而容易崩。多边形化精确很多,尤其对斜排艺术字效果明显。
第二,Inpainting之后用OCR再扫一遍修复区域。这是我自己加的一道校验:修复完成后,对修复区域重新跑一次OCR,如果还能检出文字,说明擦除不彻底,直接走重修复或人工队列。这个校验虽然简单,但比肉眼一张张看高效得多。
第三,贴新字时不要直接居中,要按原文字的“锚点”放置。很多检测框给的是中心点,但原文字在设计时往往是按某个对齐方式排布的,比如右对齐、上对齐。翻译后的文字如果长度不同,直接按中心点贴会导致视觉偏移。我一般会先分析原检测框的相对锚点,再按相同锚点放置新文字,这样整体的版面节奏才不乱。
4.3 文字合成:字体、字号、换行与视觉匹配
新文字要合得自然,得注意几个实操参数:
- 字体:中文优先用思源黑体这类开源商用字体,日文和韩文切换对应的语言字体。千万不要一张图里中文字体和日文字体混用,观感会很怪。
- 字号:翻译后的文本宽度不宜超过原文字区域宽度的1.2倍,超出就做等比缩放或拆行。中文比英文“占地方”,收缩到0.9倍是很常见的操作。
- 换行:原文一行翻译后两行时,保持居中对齐,行间距设为字号1.2倍左右。
- 角度:把原文字框的旋转角度带过来,新文字用仿射变换贴合。但透视变形不用像原图那样强,稍微保留即可,过度透视会让中文笔画发虚。
- 颜色:取原文字区域周边像素的平均色作为文字颜色,必要时加1~2像素的半透明描边压背景。这个细节处理好了,新文字就像原图自带的一样。
5. 批量生产时的工程教训:速度、成本和质量守恒
5.1 全自动率不高没关系,关键是兜底设计
我接手过的一个批量任务,处理了大概1000张多语言商品图。全自动跑完且不需要干预的约六成;两成要人工局部修一下,比如某个检测框歪了、某处修复有轻微伪影;还有两成基本没法自动处理,要么文字面积太大,要么背景太复杂,只能重新做图或换素材。
这个分布其实是常态。所以一套成熟的流水线,追求的不该是百分之百自动化,而是让每一张图都有明确的可信度状态:哪些可以直接上架,哪些要加工,哪些要废弃。系统自动标注低置信度样本进入人工队列,运营只需处理少量图片,整体效率比纯人力高了几个数量级。
5.2 性能优化的实战方式
批量处理时性能优化有几个方向:
- 模板缓存:同一个产品往往有多种SKU图,背景模板相同,只是文字区域内容差异。先把去字后的干净背景图缓存起来,后续只跑翻译和新文字合成,速度可以快好几倍。
- 批量并行:OCR和Inpainting都支持batch输入,一次喂多张图能显著提高GPU利用率。注意显存峰值控制,批量大小要逐步试。
- 分级处理:简单的纯色背景图用轻量模型处理,复杂纹理图再上高精度模型,不要一刀切。
- 抽检比例:按5%的比例随机抽检,把修复图和原图叠起来对比边缘、颜色、字体,比全量人工检查省力且有效。
成本方面,一张1024×1024的图,在GPU上走完OCR、翻译、Inpainting、合成的全流程大约2到4秒,机器成本很低。真正消耗时间的是人工抽检和残次品处理,所以流程设计一定要把人工工作量压到最小。
5.3 字库版权与平台合规:最容易翻车的地方
视觉本地化还有两个特别容易被忽略的问题,一个是字体授权,一个是信息准确性。
商用商品图使用字体必须确认授权。很多免费字体只允许个人使用,一旦挂在跨境店铺里用于商业推广,就可能面临授权风险。别问我怎么知道的,这个坑踩一次够记一辈子。另一点是跨境平台的图片审核规则,商品图上标注的成分、规格、警示语需要与实际商品保持一致,不能为了美观随意篡改。自动化流程跑得再快,也要让运营同学在接入前把合规规则确认清楚。
做了这么多轮视觉本地化之后,我最大的体会是:真正难的不是模型精度,而是流程设计。什么时候该全自动,什么时候必须人工兜底,什么时候干脆放弃自动处理重做素材,这些决策比单一模型选型更重要。往后这个技术方向还能延伸到视频字幕擦除、3D包装预览、AIGC辅助设计等领域,只要你把“识读—擦除—重排”这条思路想明白了,换什么载体都只是换一组模型的问题。如果你也在折腾跨境商品图的批量本地化,建议先从20张典型图片跑通全流程,再慢慢优化细节,效果会比一上来就贪大求全靠谱得多。