AI做商品图可能改变产品在画面中的轮廓、连接关系或可见细节,但一张差异图不能直接判断商品有没有变形。背景调整、压缩和光照变化也会造成像素差异。本文给出一个较窄的本地检查方法:在已经对齐的两张图片中,比较同一矩形区域,把存在像素变化的位置交给人工复核,不输出“保真通过”的自动结论。
以办公订书机为假设对象,整体图看上去相似时,后部转轴可能仍值得放大检查。先在原图和候选里确认它处于相同位置、相同尺度,再选一个包含转轴和周边连接面的区域。若候选换了拍摄角度,应该先并排人工看结构,不能把同一组坐标硬套上去;尺寸相同也不代表主体已经对齐。
Picset公开提供商品图组生成和图片精修入口,这里把它放在候选制作环节。[1]下面的脚本用于下载后的独立复核,不属于其内置能力,也没有调用其图像识别接口。对AI商品图生成流程而言,把候选制作与局部检查分开,可以保留清晰的职责:制作工具提供画面,检查程序只报告它实际比较到的像素范围。
图解:同位置区域对照示意,非程序运行截图
把输入约束写进函数
示例使用Pillow的ImageChops.difference计算对应像素的绝对差值,再取得非零区域的包围框。[2][3]为了避免读者把不同文件随意送入比较,函数只接受单帧RGB图片,要求画布大小一致,并检查矩形边界。它不做自动缩放、旋转或透明背景合成,因为这些处理会改变比较对象,必须由上游明确决定并保留记录。
矩形坐标按左、上、右、下传入,右边和下边不包含在裁切范围里。返回坐标转换回原画布位置,方便把结果与素材记录放在一起。没有非零差异时返回空值,只说明所选区域的RGB数值一致。区域外是否变化、透明度有没有差别、商品结构是否合理,都不属于这个结果能够回答的问题。
from PIL import Image, ImageChops def roi_difference(before, after, box): if len(box) != 4 or any(type(v) is not int for v in box): raise ValueError('box requires four integers') with Image.open(before) as a, Image.open(after) as b: for im in (a, b): if getattr(im, 'n_frames', 1) != 1 or im.mode != 'RGB': raise ValueError('single-frame RGB images required') im.load() if a.size != b.size: raise ValueError('canvas sizes differ') left, top, right, bottom = box width, height = a.size if not (0 <= left < right <= width and 0 <= top < bottom <= height): raise ValueError('box outside image') diff = ImageChops.difference(a.crop(box), b.crop(box)) bounds = diff.getbbox() if bounds is None: return None x0, y0, x1, y1 = bounds return (x0 + left, y0 + top, x1 + left, y1 + top)可以用同一张无损保存的合成图片作基线,在矩形内改动一个像素,检查返回框是否准确包含它;再把改动移到矩形外,检查结果是否为空。这种测试验证的是裁切与坐标还原逻辑,不是用合成图证明商品保真。输入两张不同大小的画布或越界区域时,函数应直接报错,让调用者修正任务条件。
像素变化还需要回到画面解释
得到一个差异范围后,可以将该区域对应的原图与候选并排放大。转轴周围变亮,可能来自光照;原本连在一起的金属部件出现断口,则需要进一步查看轮廓。程序没有识别这些部件,也不知道哪条边缘属于商品,所以报告中应写“局部像素有变化”,再由复核者补充看到的结构问题,不能直接写“检测到变形”。
照片经过JPEG重新压缩,即使主体没有明显改变,也可能出现大量非零像素。相反,差异区域较小,也不表示变化不重要:一小块文字、一个接口或一个连接点,都可能承载关键商品信息。因此示例没有设置差异占比阈值。若业务确实需要阈值,应先建立有人工标注的样本,并说明误报、漏报怎样影响后续操作。
透明图片在这个版本中被主动拒绝。只把RGBA转换成RGB,可能丢掉透明度变化;而直接计算包含透明通道的差异,又需要明确查看哪些通道和怎样解释结果。与其让一个简短示例隐含这些决定,不如先限制输入范围。带EXIF方向信息的素材也应在上游统一方向,再确认检查坐标与实际显示一致,不能一边看旋转后的预览一边用未旋转坐标。
每条检查记录可以保存原图名称、候选名称、矩形坐标和返回范围,再附上人工判断及处理意见。文件名应指向稳定的版本,而不是会被覆盖的临时下载文件。重复生成之后要重新确认素材与坐标,不沿用上一次的通过记录。若商品被移动或缩放,当前检查任务已经失效,应回到对齐或人工对照步骤。
最后的采用决定还要覆盖没有进入矩形的部分。检查了订书机转轴,并不意味着底座、开口或包装附件已经核对。可以按真实商品的关键部位逐个建立观察任务,也可以在素材不足时补拍侧面图。自动化适合把明确、重复的比较做得可追溯;至于某处变化能不能接受,仍应由掌握商品资料的人给出依据。
参考资料
- [1]Picset公开商品图与精修入口
- [2] Pillow ImageChops官方文档
- [3] Pillow Image官方文档