AI质检分析配置:用Python脚本实现图片缺陷检测
AI质检分析配置的核心是让服务器能自动识别产品图片中的缺陷。
如果缺陷类型是划痕、污点、缺角这类视觉特征明显的表面问题,用Python配合OpenCV做阈值分割就能跑通。
本文从零开始,在Linux服务器上完成环境准备、脚本编写和阈值调整,最后用样本图片验证结果。
环境准备:安装Python和图像处理库
先确认服务器系统版本和Python版本。
以Ubuntu 20.04/22.04为例,执行:
python3 --version
如果版本低于3.8,建议用apt安装新版Python。
接着安装OpenCV和scikit-image,这两个库分别负责图像读取和轮廓分析:
sudo apt update
sudo apt install -y python3-pip python3-opencv
pip3 install scikit-image numpy
安装完成后,用一行命令验证OpenCV是否可用:
python3 -c "import cv2; print(cv2.__version__)"
能输出版本号即表示环境正常。
如果提示ModuleNotFoundError,检查pip3是否指向Python 3,或者用python3 -m pip install重新安装。
编写缺陷检测脚本
在/opt/quality-check/目录下创建detect.py。
脚本逻辑是:读取图片,转灰度,用高斯模糊降噪,再用自适应阈值提取缺陷区域,最后根据轮廓面积判断是否合格。
import cv2
import numpy as np
# 读取图片并转为灰度图
image = cv2.imread('/opt/quality-check/sample.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 高斯模糊降噪
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# 自适应阈值:适合光照不均匀的场景
thresh = cv2.adaptiveThreshold(blurred, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
# 查找轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 面积阈值,单位是像素,需根据图片分辨率调整
min_area = 50
defects = [c for c in contours if cv2.contourArea(c) > min_area]
if defects:
print(f"检测到 {len(defects)} 处缺陷")
for c in defects:
x, y, w, h = cv2.boundingRect(c)
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)
cv2.imwrite('/opt/quality-check/result.jpg', image)
else:
print("未检测到明显缺陷")
保存后运行:
python3 /opt/quality-check/detect.py
脚本会输出缺陷数量,并把标注后的图片保存为result.jpg。
打开图片检查红框位置是否准确,这就是最直接的验证方式。
调整阈值:让检测结果贴合实际产品
min_area和自适应阈值的blockSize、C值是最关键的三个参数。min_area太小会把噪点当缺陷,
太大会漏掉小划痕;blockSize必须是奇数,
代表局部邻域大小;C值越大,
判定为缺陷的条件越严格。
建议用同一批样本图做对照:先固定blockSize=11、C=2,只调min_area,从20、50、100逐步试,观察误报和漏报的变化。
如果图片分辨率是1920x1080,缺陷实际大小约2毫米,min_area可以先从30起步。
避坑提醒:不要用手机拍摄的压缩图片做基准,JPEG压缩会产生块状伪影,干扰阈值分割。
尽量用工业相机或原始BMP/PNG图片。
另外,脚本中读取路径不要写死,可以用sys.argv传入参数,方便批量处理。
批量处理与结果核验
单张图片验证通过后,用for循环遍历目录:
for img in /opt/quality-check/batch/*.jpg; do
python3 /opt/quality-check/detect.py "$img"
done
需要把脚本中的路径改成接收命令行参数。
批量跑完后,抽查10到20张结果图,重点看两类错误:把正常纹理标成缺陷(误报),或者漏掉明显划痕(漏报)。
如果误报多,调大min_area或增大C值;
如果漏报多,调小min_area或减小C值。
常见报错error: (-215:Assertion failed) !通常表示图片路径错误或文件损坏,先用
_src.empty()ls -l确认文件存在且大小正常。
适用边界与后续扩展
基于阈值的缺陷检测适合背景干净、缺陷与背景对比明显的场景,比如白色塑料件上的黑点。
如果产品表面有复杂纹理、反光或缺陷类型多变,就需要引入深度学习模型,比如用YOLO训练缺陷检测数据集。
配置AI质检分析时,先明确缺陷类型和拍摄条件,再决定用轻量脚本还是模型方案,能少走很多弯路。
如果需要在宝塔面板中管理脚本定时执行,
可以创建Shell计划任务,
命令填入python3 /opt/quality-check/detect.py,
执行周期按产线节拍设置,
并在日志中检查每次运行输出。