首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

机器视觉企业级实战源码

获课:www.bcwit.top/4267/

获取ZY方打开链接

以下为你提供几个不同复杂度和应用场景的机器视觉企业级实战源码示例,涵盖工业检测、安防监控等方面。

1. 基于 OpenCV 的工业零件尺寸测量

需求背景

在工业生产线上,需要对零件的尺寸进行精确测量,以确保产品质量。

代码实现

python

import cv2 import numpy as np # 读取图像 image = cv2.imread('part_image.jpg') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 边缘检测 edges = cv2.Canny(gray, 50, 150) # 查找轮廓 contours, _ = cv2.findContours(edges.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 假设只关注最大的轮廓 largest_contour = max(contours, key=cv2.contourArea) # 计算轮廓的边界矩形 x, y, w, h = cv2.boundingRect(largest_contour) # 绘制边界矩形 cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2) # 显示测量结果 cv2.putText(image, f'Width: {w} pixels, Height: {h} pixels', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) # 显示图像 cv2.imshow('Measured Part', image) cv2.waitKey(0) cv2.destroyAllWindows()

代码解释

读取工业零件的图像并转换为灰度图。

使用 Canny 边缘检测算法找到零件的边缘。

查找图像中的所有轮廓,并选择面积最大的轮廓作为目标零件的轮廓。

计算该轮廓的边界矩形,从而得到零件的宽度和高度。

在原始图像上绘制边界矩形,并显示测量结果。

2. 基于 YOLOv8 的安防监控目标检测

需求背景

在安防监控场景中,需要实时检测画面中的人物、车辆等目标。

代码实现

python

from ultralytics import YOLO import cv2 # 加载预训练的YOLOv8模型 model = YOLO('yolov8n.pt') # 打开摄像头 cap = cv2.VideoCapture(0) while cap.isOpened(): # 读取一帧图像 ret, frame = cap.read() if ret: # 进行目标检测 results = model(frame) # 可视化检测结果 annotated_frame = results[0].plot() # 显示带检测结果的图像 cv2.imshow('YOLOv8 Inference', annotated_frame) # 按 'q' 键退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break else: break # 释放摄像头并关闭所有窗口 cap.release() cv2.destroyAllWindows()

代码解释

使用ultralytics库加载预训练的 YOLOv8 模型。

打开计算机的摄像头,循环读取每一帧图像。

对每一帧图像进行目标检测,并将检测结果可视化。

显示带有检测结果的图像,按 'q' 键退出监控程序。

3. 基于深度学习的表面缺陷检测(使用 PyTorch)

需求背景

在制造业中,需要对产品表面进行缺陷检测,以保证产品质量。

代码实现

python

import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader # 定义简单的卷积神经网络 class DefectDetector(nn.Module): def __init__(self): super(DefectDetector, self).__init__() self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1) self.relu1 = nn.ReLU() self.pool1 = nn.MaxPool2d(2) self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1) self.relu2 = nn.ReLU() self.pool2 = nn.MaxPool2d(2) self.fc1 = nn.Linear(32 * 56 * 56, 128) self.relu3 = nn.ReLU() self.fc2 = nn.Linear(128, 2) def forward(self, x): x = self.pool1(self.relu1(self.conv1(x))) x = self.pool2(self.relu2(self.conv2(x))) x = x.view(-1, 32 * 56 * 56) x = self.relu3(self.fc1(x)) x = self.fc2(x) return x # 数据预处理 transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 加载数据集 train_dataset = datasets.ImageFolder(root='train_data', transform=transform) train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True) # 初始化模型、损失函数和优化器 model = DefectDetector() criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 训练模型 num_epochs = 10 for epoch in range(num_epochs): running_loss = 0.0 for i, (images, labels) in enumerate(train_loader): optimizer.zero_grad() outputs = model(images) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() print(f'Epoch {epoch + 1}, Loss: {running_loss / len(train_loader)}')

代码解释

定义了一个简单的卷积神经网络DefectDetector,用于表面缺陷检测。

对图像数据进行预处理,包括调整大小、转换为张量和归一化。

加载训练数据集,并使用DataLoader进行批量处理。

初始化模型、损失函数(交叉熵损失)和优化器(Adam 优化器)。

进行多个轮次的训练,每一轮次计算损失并更新模型参数。

注意事项

上述代码中的图像文件路径(如part_image.jpg、train_data)需要根据实际情况进行修改。

运行代码前,要确保已经安装了相应的库,如 OpenCV、ultralytics、PyTorch 等。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O7eEbKt_u-7nNAi7d5joHCOQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券