AI项目二十四:yolov10竹签模型,自动数竹签

news2024/9/21 12:31:39

若该文为原创文章,转载请注明原文出处。

原本是为部署RK3568而先熟悉yolov10流程的,采用自己的数据集,网上很多,检测竹签,并计数。

1、环境搭建

1.1 官方下载源码

官网地址:YOLOv10 gitbub官网源码
利用魔法进入GitHub官网之后点击下载源码压缩包(这里针对小白使用download,当然也可以使用git clone命令)

1.2 配置环境

使用的是AutoDL平台

创建虚拟环境

# 创建虚拟环境
conda create -n yolov10 python=3.9
# 初始化
source activate
# 激活
conda activate yolov10

安装前需要修改requirements.txt文件,把文件里的onnxruntime-gpu==1.18.0改成onnxruntime-gpu==1.16.0

开始安装

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple


2、测试

测试直接使用官方模型测试

模型下载命令

wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10{n/s/m/b/l/x}.pt

这里使用的是 yolov10s.pt。

测试指令

yolo predict model=yolov10s.pt source=ultralytics/assets/bus.jpg

或是使用代码测试

from ultralytics import YOLOv10

# Load a pretrained YOLOv10n model
model = YOLOv10("./weights/zhuqian.pt")

# Perform object detection on an image
results = model.predict("./test.jpg")

# Display the results
results[0].show()
results[0].save()

3、训练

3.1下载数据集

训练的是自己的数据集,想实现的是数竹签,需要数据集自行下载。

链接:https://pan.baidu.com/s/1paB9rDH8PUBNinw8DzLPiQ?pwd=1234 
提取码:1234 复制这段内容后打开百度网盘手机App,操作更方便哦

直接把数据集解压到yolov10工程目录下。

文件结构如下

3.2 yaml文件

进入yolov10\ultralytics\cfg\datasets目录,拷贝coco128.yaml文件一份为mycoco128.yaml。

修改mycoco128.yaml, 修改后的文件,修改数据集路径和修改标签。

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/detect/coco/
# Example usage: yolo train data=coco128.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco128  ← downloads here (7 MB)
 
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: G:/资料/嵌入式/【正点原子】RK3568开发板资料(A盘)-基础资料/01、AI例程/Ai_Code/40_yolov10/yolov10/dataset # dataset root dir
train: images/train # train images (relative to 'path') 128 images
val: images/val # val images (relative to 'path') 128 images
test: # test images (optional)
 
# Classes
names:
    0: skewer
 
# Download script/URL (optional)
#download: https://ultralytics.com/assets/coco128.zip

3.3 训练

使用下面命令训练。

yolo detect train data=/root/yolov10/ultralytics/cfg/datasets/mycoco128.yaml model=yolov10s.pt epochs=100 batch=16 imgsz=640

或代码训练

#coding:utf-8
from ultralytics import YOLOv10
# 模型配置文件
model_yaml_path = "ultralytics/cfg/models/v10/yolov10s.yaml"
#数据集配置文件
data_yaml_path = '/root/yolov10/ultralytics/cfg/datasets/coco128_zhuqian.yaml '
#预训练模型
pre_model_name = 'yolov10s.pt'

if __name__ == '__main__':
    #加载预训练模型
    model = YOLOv10(model_yaml_path).load(pre_model_name)
    #训练模型
    results = model.train(data=data_yaml_path,
                          epochs=150,
                          batch=16,
                          name='train_v10')

这里有个疑问,训练时好像不是使用yolov10s.pt模型,而是会下载yolov8n.pt模型。

4 结果测试

命令测试

yolo predict model=weights/zhuqian_no.pt source=test.py

命令测试比较方便,但如果想自己写,还是要使用API。

主要还是要学习怎么使用API

import cv2
from  ultralytics import YOLOv10
import os

model = YOLOv10(model="./weigths/best_zq.pt")

def predict(chosen_model, img, classes=[], conf=0.5):
    if classes:
        results = chosen_model.predict(img, classes=classes, conf=conf)
    else:
        results = chosen_model.predict(img, conf=conf)

    return results

def predict_and_detect(chosen_model, img, classes=[], conf=0.5, rectangle_thickness=2, text_thickness=1):
    results = predict(chosen_model, img, classes, conf=conf)
    count = 0
    for result in results:
        for box in result.boxes:
            cv2.rectangle(img, (int(box.xyxy[0][0]), int(box.xyxy[0][1])),
                          (int(box.xyxy[0][2]), int(box.xyxy[0][3])), (255, 0, 0), rectangle_thickness)
                          
            #cv2.putText(img, f"{result.names[int(box.cls[0])]}",
            #            (int(box.xyxy[0][0]), int(box.xyxy[0][1]) - 10),
            #           cv2.FONT_HERSHEY_PLAIN, 1, (255, 0, 0), text_thickness)
            count += 1
            
    # 在图像上显示计数
    font = cv2.FONT_HERSHEY_SIMPLEX
    text = f"Count: {count}"
    cv2.putText(img, text, (10, 160), font, 5, (00, 00, 255), 4, cv2.LINE_AA)

    return img, results

image_folder = './dataset/images/train/'  # 图片文件夹路径
for image_name in os.listdir(image_folder):
    if image_name.endswith('.jpg') or image_name.endswith('.png'):
        image_path = os.path.join(image_folder, image_name)
        # read the image
        image = cv2.imread(image_path)
        result_img, _ = predict_and_detect(model, image, classes=[], conf=0.4)

        cv2.namedWindow("Image", cv2.WINDOW_NORMAL)
        cv2.moveWindow("Image", 400, 100)

        cv2.imshow("Image", result_img)
        #cv2.imwrite("result.jpg", result_img)
        cv2.waitKey(240)  # 每张图片显示500毫秒
        
cv2.waitKey(0)  

"""
output_filename = "YourFilename"
writer = create_video_writer(cap, output_filename)

video_path = r"YourVideoPath"
cap = cv2.VideoCapture(video_path)
while True:
    success, img = cap.read()
    if not success:
        break
    result_img, _ = predict_and_detect(model, img, classes=[], conf=0.5)
    writer.write(result_img)
    cv2.imshow("Image", result_img)
    
    cv2.waitKey(1)
writer.release()
"""

代码比较简单,基本和yolo其他版本差不多。

测试结果

如有侵权,或需要完整代码,请及时联系博主。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

各类函数调用

目录 getpwuid函数 查看uid的name​编辑 symlink函数软链接(创建快捷方式) remove函数 rename函数 link硬链接 truncate函数控制文件大小 perror报错函数 strerror报错函数序列表 error报错函数:详细报错 Makefile编译函数、工程管…

考试题型宏观分析之公共营养师三级

背景 第一遍知识学习之后,打印《2023.10.14公共营养师三级真题》进行第一次摸底,首要目标在于通过摸底,对于考试题型进行宏观分析和了解,其次,对于后续的学习进行有的放矢 直至2024-08-18,对于上述资料的一…

ubuntu配pip的源

临时使用源 pip install [包名] -i [pip源URL]# 示例 pip install pytest -i https://pypi.tuna.tsinghua.edu.cn/simple更换配置pip镜像源 step1:创建一个配置文件 mkdir ~/.pip/ cd .pip sudo vim pip.conf step2:填写源信息,保存并退出【:wq】 [g…

Android 架构模式之 MVC

目录 架构设计的目的对 MVC 的理解Android 中 MVC 的问题试吃个小李子ViewModelController 大家好! 作为 Android 程序猿,MVC 应该是我们第一个接触的架构吧,从开始接触 Android 那一刻起,我们就开始接触它,可还记得我…

【秋招笔试】8.18科大讯飞秋招-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

【接口测试】Postman + newman超详细图文安装教程

一、Postman安装 下载网址:Postman API Platform 打开网址,选择自己系统对应的版本进行下载。 双击Postman安装包,全自动安装,不需要任何人为干预。安装完成后,页面如下图,点击手动打开注册页面。 自行…

超详细!!!electron-vite-vue开发桌面应用之引入UI组件库element-plus(四)

云风网 云风笔记 云风知识库 一、安装element-plus以及图标库依赖 npm install element-plus --save npm install element-plus/icons-vue npm i -D unplugin-icons二、vite按需引入插件 npm install -D unplugin-vue-components unplugin-auto-importunplugin-vue-componen…

Linux-DNS域名解析服务

系列文章目录 提示:仅用于个人学习,进行查漏补缺使用。 1.Linux网络设置 2.LinuxDHCP服务 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言提示:以下是本篇文章…

扫描切除-实体轮廓:方程式驱动曲线路径vs螺旋线路径

最近,在使用solidworks2018的过程中,接触到扫描切除-实体轮廓命令,如图1-2所示。此命令可以使用一个实体来切除另一个实体,用来切除的实体可以按一定的轨迹运动。测试过程中发现,这个命令频繁出错,切除失败,体验实在是太差了。下面对比了在该命令下使用方程式驱动曲线和…

后端学习笔记(八)--HTML

1.HTML ​ *编写网页的一门语言 ​ *HTML(HyperText Markup Language):超文本标记语言 ​ *超文本:超越了文本的限制,比普通文本更强大。除了文字信息,还可以定义图片、音频、视频等内容 ​ *标记语言:由标签构成的…

代码随想录DAY18 - 二叉树 - 08/17

目录 二叉搜索树的最小绝对差 题干 思路和代码 方法一:求中序序列 方法二:递归法双指针法 方法三:迭代法双指针法 二叉搜索树中的众数 题干 思路和代码 方法一:求中序序列 方法二:递归法双指针中序遍历 ​编…

基于 Konva 实现Web PPT 编辑器(一)

前言 目前Web PPT编辑比较好的库有PPTist(PPTist体验地址),是基于DOM 的渲染方案,相比 Canvas 渲染的方案,在复杂场景下性能会存在一定的差距。不过确实已经很不错了,本应用在一些实现思路、难点攻克上也参考了pptist的思想&#…

1:html的介绍与基础1

目录 1.1html的介绍 1.2html的基础1 1.2.1标题,头部与基本的格式怎么写 1.2.1.1标题与基本格式 1.2.1.2头部 1.2.2段落 1.2.3链接 1.2.3.1基本的网页链接 1.2.3.2图像链接 1.2.4注释 1.1html的介绍 HTML是一种标记语言,用于创建,设…

EmguCV学习笔记 VB.Net和C# 下的OpenCv开发

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 笔者的博客网址:https://blog.csdn.net/uruseibest 本教程将分为VB.Net和C#两个版本分别进行发布。 教程VB.net版本请…

高效同步与处理:ADTF流服务在自动驾驶数采中的应用

目录 一、ADTF 流服务 1、流服务源(Streaming Source) 2、流服务汇(Streaming Sink) 二、数据链路 1、数据管道(Data Pipe) 2、子流(Substreams) 3、触发管道(Tri…

遥感之常用各种指数总结大全

目前在遥感领域基本各种研究领域都会用到各种各样的指数,如水体指数,植被指数,农业长势指数,盐分指数,云指数,阴影指数,建筑物指数,水质指数,干旱指数等等众多。 本文对上…

Qt第十五章 动画和状态机

文章目录 动画框架动画架构动画框架类QPropertyAnimation串行动画组QSequentialAnimationGroup并行动画组QPararallelAnimationGroupQPauseAnimationQTimeLine窗口动画下坠效果抖动效果透明效果 状态机QStateQStateMachine 动画框架 动画架构 动画框架类 类名描述QAbstractAn…

字符串金额转换,字符串手机号屏蔽,身份证信息查看,敏感词替换

2135 在发票上面该写成零佰零拾零万贰仟壹佰叁拾伍元 我们用逆推法可以写成零零零贰壹叁伍->贰壹叁伍->2135 1.遍历获取到每一个数字,然后把大写放到数组里面,将数字当作索引,在数组里面查找大写 package stringdemo;import java.uti…

传输层安全性 ——TLS(Transport Layer Security)简介

TLS(Transport Layer Security)是一种广泛使用的安全协议,旨在确保互联网通信的隐私性和数据完整性。它是SSL(Secure Sockets Layer)的继任者,最初版本于1999年发布,最新版本是TLS 1.3。 TLS 握手为每个通信会话建立一个密码套件密码套件是一组算法,其中指定了一些细节…

如何轻松获取麒麟操作系统架构信息?

如何轻松获取麒麟操作系统架构信息? 一、使用uname -a命令二、用arch命令三、示例输出 💖The Begin💖点点关注,收藏不迷路💖 在使用麒麟操作系统(Kylin OS)时,了解系统的架构信息对于…