用摄像头检测零件尺寸是否合格的Python代码

Python+OpenCV实现零件尺寸实时检测

以下是一个基于OpenCV的实时零件尺寸检测Python实例代码,结合摄像头捕捉和图像处理技术实现尺寸检测。代码中包含详细的注释说明和实际应用要点。

import cv2 
import numpy as np 
 
# 初始化摄像头 
cap = cv2.VideoCapture(0)
# 设置参考物实际尺寸(示例为A4纸的短边21cm)
ref_width_cm = 21.0  
min_width = 19.5  # 最小合格尺寸 
max_width = 21.5  # 最大合格尺寸 
 
def get_pixel_ratio(frame):
    """通过参考物计算像素/厘米比例"""
    gray = cv2.cvtColor(frame,  cv2.COLOR_BGR2GRAY)
    blurred = cv2.GaussianBlur(gray, (5, 5), 0)
    edged = cv2.Canny(blurred, 50, 200)
    
    # 寻找最大轮廓 
    contours, _ = cv2.findContours(edged,  cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    if len(contours) > 0:
        max_contour = max(contours, key=cv2.contourArea) 
        x, y, w, h = cv2.boundingRect(max_contour) 
        return w / ref_width_cm  # 像素/厘米 
    return None 
 
while True:
    ret, frame = cap.read() 
    if not ret:
        break 
    
    # 获取当前像素比例 
    pixel_ratio = get_pixel_ratio(frame)
    
    if pixel_ratio is not None:
        # 预处理 
        gray = cv2.cvtColor(frame,  cv2.COLOR_BGR2GRAY)
        blurred = cv2.GaussianBlur(gray, (5, 5), 0)
        edged = cv2.Canny(blurred, 50, 200)
        
        # 检测零件轮廓 
        contours, _ = cv2.findContours(edged,  cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        for cnt in contours:
            area = cv2.contourArea(cnt) 
            if area > 1000:  # 过滤小噪点 
                # 获取旋转矩形 
                rect = cv2.minAreaRect(cnt) 
                (x, y), (w, h), angle = rect 
                
                # 计算实际尺寸 
                width_cm = max(w, h) / pixel_ratio 
                height_cm = min(w, h) / pixel_ratio 
                
                # 判断是否合格 
                color = (0, 255, 0) if (min_width <= width_cm <= max_width) else (0, 0, 255)
                
                # 绘制检测结果 
                box = cv2.boxPoints(rect) 
                box = np.int0(box) 
                cv2.drawContours(frame,  [box], 0, color, 2)
                cv2.putText(frame,  f"W:{width_cm:.1f}cm", (int(x)-50, int(y)-20),
                           cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,0,0), 2)
 
    cv2.imshow('Detection',  frame)
    if cv2.waitKey(1)  == 27:  # ESC退出 
        break 
 
cap.release() 
cv2.destroyAllWindows() 

关键实现要点说明:
参考物校准:通过A4纸等已知尺寸物体建立像素与实际尺寸的换算关系,这是实现精确测量的基础

图像预处理流程:

高斯模糊消除噪声(GaussianBlur)
Canny边缘检测获取零件轮廓(Canny)
形态学操作优化边缘质量(示例中未展示,可添加膨胀/腐蚀操作)
轮廓分析技术:

使用findContours获取候选轮廓
minAreaRect获取最小外接旋转矩形
面积过滤排除噪声干扰
实时检测优化:

保持30fps以上的处理速度
使用绿色/红色边框直观显示检测结果
显示实时尺寸数值
扩展改进建议:
增加稳定性措施:

# 在获取像素比例处添加移动平均滤波 
ratio_buffer = []
def get_pixel_ratio(frame):
    ... # 原有代码 
    if len(ratio_buffer) > 10:
        ratio_buffer.pop(0) 
    ratio_buffer.append(current_ratio) 
    return np.mean(ratio_buffer) 

光照补偿处理:

clahe = cv2.createCLAHE(clipLimit=3.0,  tileGridSize=(8,8))
gray = clahe.apply(gray) 

数据库集成(需配合SQLite等数据库):

数据库集成(需配合SQLite等数据库):
import sqlite3 
def save_result(measurement):
    conn = sqlite3.connect('quality.db') 
    c = conn.cursor() 
    c.execute('''INSERT  INTO records VALUES (?, ?, datetime('now'))''', 
             (measurement['width'], measurement['status']))
    conn.commit()

注意事项:
摄像头应垂直正对检测平面,推荐使用固定支架
参考物与零件需处于相同焦平面
建议使用环形光源消除阴影干扰
定期用标准量具校准系统精度
该方案结合了机器视觉的常见检测方法,通过实时视频流处理实现自动化检测,可扩展应用于工业质检场景。实际部署时需根据具体零件特征调整预处理参数和判定阈值。

### 工业自动化零件检测系统设计方案及实现方法 设计一个高效的工业自动化零件检测系统需要综合考虑硬件选型、软件架构以及具体的应用场景。以下是关于该系统的设计方案及其核心要素: #### 1. 系统总体框架 工业自动化零件检测系统通常由以下几个部分组成: - **传感器模块**:负责采集物理信号,如尺寸、颜色、形状等特性[^1]。 - **控制器模块**:采用可编程逻辑控制器(PLC),用于执行控制逻辑并协调各子系统的工作流程。 - **数据分析模块**:利用机器学习或其他高级算法来识别和分类缺陷项[^3]。 - **人机交互界面(HMI)**:提供操作员监控和调整参数的功能接口。 #### 2. 设计原则 为了确保系统的高效性和可靠性,在设计过程中应遵循以下基本原则: - **实时性**:保证数据采集与分析能够在毫秒级完成,满足高速生产环境的需求[^2]。 - **准确性**:选用高精度测量设备,并通过校准减少误差影响。 - **灵活性**:支持多种规格产品的切换配置,适应不同批次加工需求。 - **经济性**:平衡成本投入与收益产出关系,追求长期运营效益最大化。 #### 3. 实现技术细节 ##### (a) 数据获取阶段 使用视觉摄像头或者激光扫描仪作为主要的数据源工具之一;对于某些特殊材质可能还需要红外线成像装置辅助判断内部结构是否存在裂纹等问题点位。 ##### (b) 控制策略制定 编写相应的梯形图程序或功能块图表(FBD),定义好输入条件触发后的动作序列,比如当某个特定指标超出预设范围时,则启动报警机制或将不合格品移除流水线上方位置处停止进一步工序处理直至人工确认恢复正常状态为止。 ##### (c) 软件平台搭建 引入现代计算机科学技术成果——即运用深度神经网络模型训练样本集从而提高预测精确度水平的同时降低误报率现象发生概率;另外也可以借助开源框架TensorFlow/Keras快速构建原型验证效果后再逐步完善整个解决方案体系结构层次分明易于维护扩展性强等特点明显优于传统统计学方法论思路局限之处所在。 ```python import tensorflow as tf from tensorflow.keras import layers, models def create_model(): model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Flatten()) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(1)) model.compile(optimizer='adam', loss=tf.keras.losses.BinaryCrossentropy(from_logits=True), metrics=['accuracy']) return model ``` 此代码片段展示了如何创建一个简单的卷积神经网络(CNN)来进行图像分类任务,这可以被用来区分合格与否的产品外观特征差异情况下的初步筛选工作环节当中去加以实践应用尝试看看能否达到预期目标设定标准之上再做后续改进措施安排计划实施步骤行动指南手册参考资料链接地址如下所示。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值