python3.5+opencv3.4+yolov3实现的目标检测--------------部分代码!

近期项目要求,要做一个基于python+yolov3+opencv的目标检测,实际上是针对工业上的工业齿轮的检测。
那在这里我对我整个项目的介绍就不多了,主要是分享一波在写项目的过程中,利用opencv3.4针对视频流按帧截取并对图像进行识别的处理。贴个代码,大家了解一下~~~
@app.route(’/detection’, methods=[‘POST’])
def detection():
#结果集合
resultDatas = []
start_time=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(start_time) #设置一个开始时间,便于记录

rtmpAddr = request.json["rtmpAddr"]  #这一步是获取视频流地址
rtmpAddr = cv2.VideoCapture(rtmpAddr)   #cv2的 VideoCapture() 方法
shottime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  #设置一个截取时间
flag = 0
if rtmpAddr.isOpened():
    flag = 1
    open_time=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    print(open_time)
else:
    flag = 0
i = 0
if flag == 1:
    while True:
        ret, frame = rtmpAddr.read()  # 读取视频帧
        read_time=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        print(read_time)
        if ret == True:  # 判断是否读取成功
            if i > 0:
                break
        i += 1
        # 截图时间
        end_time=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        origin_img = "/usr/local/darknet/saveImage/"+shottime+".jpg" # 存储图片的路径
        cv2.imwrite(origin_img, frame)  # 将提取的视频帧存储进imgPath

在这个过程中,我认为对cv2的认识一定要深刻,要对它的方法有很深的了解,因为他确实能在学习python的机器学习中,提供很好、很便利的的途径。cv2很强大,python很强大!!!
那么以上这些就是我个人的一些方法和技巧,欢迎大家交流,批评指正!

构建基于YOLOv5的钢材缺陷检测系统并使用NEU-DET数据集进行训练或评估,涉及多个关键步骤,包括环境搭建、数据准备、模型配置、训练与评估等。以下是详细的实现流程: ### 3.1 环境搭建 首先需要准备好YOLOv5的运行环境,建议使用Python 3.8以上版本,并安装以下依赖库: ```bash pip install torch==1.10.2+cu113 torchvision==0.11.3+cu113 torchaudio==0.10.2 -f https://download.pytorch.org/whl/torch_stable.html pip install opencv-python matplotlib numpy scikit-learn tqdm tensorboard ``` 同时,克隆YOLOv5官方仓库并进入项目目录: ```bash git clone https://github.com/ultralytics/yolov5.git cd yolov5 ``` ### 3.2 数据准备 NEU-DET数据集包含六大类钢材表面缺陷:`crazing`、`inclusion`、`patches`、`pitted_surface`、`rolled-in_scale`、`scratches`[^2]。该数据集通常以VOC格式或YOLO格式提供,每张图像对应一个`.txt`标注文件。 #### 数据集结构示例(YOLO格式): ``` NEU-DET/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── data.yaml ``` 其中,`data.yaml` 文件内容应如下所示: ```yaml train: ../images/train/ val: ../images/val/ nc: 6 names: ['crazing', 'inclusion', 'patches', 'pitted_surface', 'rolled-in_scale', 'scratches'] ``` ### 3.3 模型配置 在 `models/` 目录下选择合适的YOLOv5配置文件,如 `yolov5s.yaml` 或 `yolov5m.yaml`。为了提升精度,可以结合CFPNet、动态卷积ODConv和多检测头等模块改进网络结构[^3]。 例如,在 `yolov5s.yaml` 中修改骨干网络部分以引入 CFPNet 或 ODConv: ```yaml # Example modification for integrating CFPNet or ODConv backbone: # [from, number, module, args] [[-1, 1, Focus, [3, 32, 3]], [-1, 1, Conv, [32, 64, 3, 2]], # P1-C2 [-1, 3, C3, [64, 64]], [-1, 1, Conv, [64, 128, 3, 2]], # P2-C3 [-1, 4, C3, [128, 128]], [-1, 1, Conv, [128, 256, 3, 2]], # P3-C4 [-1, 6, C3, [256, 256]], [-1, 1, Conv, [256, 512, 3, 2]], # P4-C5 [-1, 1, SPPF, [512, 512, 5]] ] ``` ### 3.4 训练模型 使用以下命令开始训练: ```bash python train.py --img 640 --batch 16 --epochs 100 --data data.yaml --cfg models/yolov5s.yaml --weights '' --name neu-det-training ``` 为提高模型性能,可采用以下策略: - **学习率调整**:使用余弦退火学习率调度器。 - **数据增强**:启用 Mosaic 和 MixUp 增强技术。 - **正则化技术**:加入 Label Smoothing 和权重衰减(weight decay)。 - **多尺度训练**:设置 `--multi-scale` 参数以增强泛化能力。 ### 3.5 模型评估 训练完成后,使用 `val.py` 对模型进行验证: ```bash python val.py --data data.yaml --weights runs/train/neu-det-training/weights/best.pt --img 640 --task test ``` 评估结果将包括 mAP、Recall、Precision 等指标,可用于分析模型在 NEU-DET 数据集上的表现。 ### 3.6 可视化与部署 训练过程中会自动生成损失曲线、PR 曲线等可视化结果,保存在 `runs/train/neu-det-training/` 目录中。此外,可以导出 ONNX 模型用于部署: ```bash python export.py --weights runs/train/neu-det-training/weights/best.pt --include onnx ``` 之后可在工业相机或嵌入式设备上部署 ONNX 模型进行实时钢材缺陷检测---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值