news 2026/10/28 10:12:05

商品结构有没有被改:用Pillow定位局部像素差异

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
商品结构有没有被改:用Pillow定位局部像素差异

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官方文档
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 10:10:16

DCF / EDCA 完整流程、参数与时延换算

DCF / EDCA 完整流程、参数与时延换算下面全部基于工业场景主流&#xff1a;5 GHz OFDM&#xff08;Wi‑Fi 5 / Wi‑Fi 6&#xff09; 基础物理层常量\begin{align} SIFS & 16\ \mu s \\ SlotTime & 9\ \mu s \end{align}SIFS&#xff1a;短帧间隔&#xff0c;专门用于…

作者头像 李华
网站建设 2026/10/28 10:09:39

Docker安装详解--基于Ubuntu环境

目录 1. Docker Server版本安装 1.1 Ubuntu 安装&#xff08;以华为云 Ubuntu 20.04 为例&#xff09; 1.2 实战经验 1.2.1 Docker 镜像源修改 1.2.2 Docker 目录修改 望读者阅读本文之后能够掌握如何安装 docker。&#xff08;使用Xshell进行操作&#xff09; 正文开…

作者头像 李华
网站建设 2026/10/28 10:09:00

电商用户画像构建方案:多源数据融合与DeepSeek偏好预测实战

简介&#xff1a;这份213页的PDF方案面向电商数据从业者、算法工程师与推荐系统学习者&#xff0c;围绕多源数据融合下的用户画像构建展开&#xff0c;系统解决消费者行为分析与偏好预测中的工程落地问题。内容从行业痛点与DeepSeek方案定位切入&#xff0c;依次覆盖多源数据采…

作者头像 李华
网站建设 2026/10/28 10:08:08

从算力竞赛到系统效率:AI芯片的真实生产力

1. 这场竞赛的“分水岭”&#xff1a;算力不再是唯一答案1.1 算力竞赛到底在比什么过去十年&#xff0c;AI芯片行业的竞争逻辑其实非常单调&#xff1a;比谁的“峰值算力”数字更吓人。GPU厂商发布产品时&#xff0c;必给一张表格&#xff0c;里面列满FP16、BF16、INT8、稀疏算…

作者头像 李华
网站建设 2026/10/28 10:07:41

context-mode设计解析:从硬编码到动态上下文模式切换

1. 从“context-mode”这个命名说起&#xff1a;它到底指什么第一次看到“context-mode”这个词&#xff0c;很多人会下意识地把它当成某个具体框架的配置项&#xff0c;或者某个库里的枚举值。但如果你在工程一线待过几年&#xff0c;就会发现这个词其实是一个跨领域的设计概念…

作者头像 李华