OpenHarmony开源社区
直播中

筑梦者与梦同行

9年用户 201经验值
擅长:嵌入式技术
私信 关注
[经验]

【触觉智能 Purple Pi OH 开发板体验】三、Ubuntu镜像安装OpenCV边缘检测开发

一、系统固件下载
Purple Pi  OH 开发板资料汇总
http://www.industio.cn/product-item-37.html
Ubuntu固件烧录
图片1.png

二、缺陷检测原理
2.1、缺陷检测介绍
缺陷检测的原理可以基于人工智能或机器视觉进行解释。 在人工智能领域,缺陷检测主要通过采集数据、特征提取、模型训练和测试、模型优化以及模型部署等步骤,利用机器学习技术来检测产品缺陷。对于检测板材表面的缺陷,高速CCD工业相机可以用来实时拍摄板材表面,并将照片数字化处理后送入主机进行图像处理。通过参数计算,可以提取板材图片的特征,从而检测表面缺陷信息,然后进行分类定等级。
在机器视觉领域,缺陷检测则是通过将被检测的目标转换成图像信号,传送给专用的图像处理系统,根据像素分布和亮度、颜色等信息,转变成数字化信号。图像处理系统对这些信号进行各种运算来抽取目标的分类特征,如面积、数量、位置、长度,再根据预设的允许度和其他条件输出结果,包括尺寸、角度、个数、合格/不合格、有/无等,实现自动识别功能。
2.2、缺陷检测实现步骤
缺陷检测可以应用于许多不同的领域,包括制造业、质量控制、网络安全等。以下是一个通用的缺陷检测程序实现的步骤:
1.**确定目标和定义缺陷**:首先,需要明确什么是缺陷。例如,在制造业中,缺陷可能是产品中的裂缝、气泡、或者形状的不规则。在网络安全领域,缺陷可能是软件中的安全漏洞或者配置错误。确定目标并明确什么是需要被检测的缺陷是第一步。
2.**收集数据**:接下来,需要收集有缺陷和没有缺陷的样本数据。这些数据可以来自于历史记录、实验数据、或者是现有的产品或服务。这些数据将用于训练和验证检测程序。
3. **特征提取**:缺陷通常会表现为数据中的某种模式或特征。因此,需要提取出能够表示这些缺陷的特征。这些特征可能包括产品的尺寸、颜色、重量、网络的流量、安全日志等。
4. **选择算法和模型**:基于所提取的特征和目标,选择一个合适的算法或模型来检测缺陷。这可能包括统计模型、机器学习模型或者深度学习模型。
5. **训练模型**:使用有标签的数据(即知道哪些是缺陷,哪些不是)来训练选定的模型。训练过程通常会涉及到调整模型的参数,以便能够最好地拟合训练数据。
6. **验证和测试**:使用没有在训练集中出现过的数据来验证模型的性能。这将提供有关模型在检测新缺陷时的准确性和可靠性的信息。
7. **实施和监控**:一旦模型被验证和测试,并且被认为可以用于实际检测,就可以将其部署到生产环境中。然后,需要持续监控其性能,定期检查其准确性并做必要的调整。
8. **结果分析和优化**:基于检测结果,进行数据分析以评估实际的缺陷率、出现频率等关键指标。这些分析结果可以用于反馈到生产流程或服务中,以改进产品或服务质量,同时优化缺陷检测程序。
三、开发环境
图片2.png
运行开发好的程序,提示报错Cv2错误,OpenCV安装环境问题,接下来安装相关配置。
3.1、安装PIP工具包

sudo apt update
sudo apt install python3-pip
ido@ido:~$ pip --version
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
3.2、安装OpenCV
pip install opencv-python  
pip install opencv-contrib-python
图片3.png
3.2、验证

ido@ido:~$ python3
Python 3.8.10 (default, May 26 2023, 14:05:08)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>>
验证无误安装完成
四、软件开发
# ============步骤0:导入使用的库=================
import cv2
import numpy as np
# ============步骤1:读取原始图像=================
img = cv2.imread('pill3.jpg')
cv2.imshow("original",img)
# ============步骤2:预处理=================
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)   
ret, thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imshow('thresh',thresh)
kernel=cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))#核
opening1 = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, iterations = 1)
cv2.imshow('opening1',opening1)
# ============步骤3:使用函数distanceTransform()确定前景=================
dist_transform = cv2.distanceTransform(opening1,cv2.DIST_L2,3)
ret, fore = cv2.threshold(dist_transform,0.3*dist_transform.max(),255,0)
cv2.imshow('fore',fore)
# ============步骤4:去噪处理=================
kernel = np.ones((3,3),np.uint8)
opening2 = cv2.morphologyEx(fore, cv2.MORPH_OPEN, kernel)
cv2.imshow('opening2',opening2)
# ============步骤5:提取轮廓=================
opening2 = np.array(opening2,np.uint8)
contours, hierarchy = cv2.findContours(opening2,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
# ============步骤6:缺陷检测=================
count=0
font=cv2.FONT_HERSHEY_COMPLEX
for cnt in contours:
    (x,y),radius = cv2.minEnclosingCircle(cnt)
    center = (int(x),int(y))
    radius = int(radius)
    circle_img = cv2.circle(opening2,center,radius,(255,255,255),1)
    area = cv2.contourArea(cnt)
    area_circle=3.14*radius*radius
    if area/area_circle >=0.5:
        img=cv2.putText(img,'OK',center,font,2,(255,255,255),3)
    else:
        img=cv2.putText(img,'BAD',center,font,2,(255,255,255),3)
    count+=1
img=cv2.putText(img,('sum='+str(count)),(20,50),font,2,(255,255,255))
# ============步骤7:显示处理结果=================
cv2.imshow('result',img)
cv2.waitKey()
cv2.destroyAllWindows()

五、演示
5.1、检测图像
图片4.png
5.2、经过处理后的图像
图片5.png
5.3、缺陷检测
图片6.png

更多回帖

发帖
×
20
完善资料,
赚取积分