用python写yolov5 拍球计数

import numpy as np
import torch
import cv2
from PIL import Image, ImageDraw, ImageFont

def cv2_add_chinese_text(img, text, position, text_color=(0, 255, 0), text_size=30):
    img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    draw = ImageDraw.Draw(img)
    font_style = ImageFont.truetype("./fonts/songti.ttc", text_size, encoding="utf-8")
    # 绘制文本
    text_color = (text_color[2], text_color[1], text_color[0])
    draw.text(position, text, text_color, font=font_style)
    # 转换回OpenCV格式
    return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)

class FireDetection:
    def __init__(self):
        self.detector = torch.hub.load('G:\\yolov\\yolov5-5.0', 'custom', 'G:\\yolov\\yolov5-5.0\\weights\\yolov5s.pt', source='local')
        self.detector.conf = 0.1

    def detect(self):
        cap = cv2.VideoCapture('./basketball.mp4')

        ballY = 0
        ballY_Old = 0
        down = False
        up = False
        count = 0


        while True:
            ret, frame = cap.read()
            if not ret or frame is None:
                break

            # 转为RGB
            img_cvt = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            results = self.detector(img_cvt)
            pd = results.pandas().xyxy[0]

            # 绘制检测框
            for obj in pd.to_numpy():
                box_l, box_t = int(obj[0]), int(obj[1])
                box_r, box_b = int(obj[2]), int(obj[3])
                confidence  = obj[4]
                name = obj[5]
                obj_name = obj[6]

                if obj_name == 'sports ball':
                    box_color = (0, 255, 0)
                    box_txt = '检测球'
                    ballY = box_b
                else:
                    continue

                # if confidence < 0.6:
                #     continue

                if (ballY > ballY_Old):
                    down = True
                elif (ballY < ballY_Old) and down:
                    up = True

                ballY_Old = ballY

                if True == down and True == up:
                    count = count + 1
                    down = False
                    up = False

                frame = cv2_add_chinese_text(frame, "个数:" + str(count) +  " 置信度:" + str(confidence), (5, 50), box_color, 35)
                frame = cv2.rectangle(frame, (box_l, box_t), (box_r, box_b), box_color, 2)
                frame = cv2_add_chinese_text(frame, box_txt, (box_l, box_t-40), box_color, 25)

            cv2.imshow('basketball detection', frame)

            if cv2.waitKey(5) & 0xFF == ord('q'):
                break

if __name__ == '__main__':
    fire_detection = FireDetection()
    fire_detection.detect()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
智慧交通基于YOLOv8的行人车辆检测计数系统源码(部署教程+训练好的模型+各项评估指标曲线).zip 平均准确率:0.91 类别:person、truck、car、bus、traffic light 【资源介绍】 1、ultralytics-main ultralytics-main为YOLOv8源代码,里面涵盖基于yolov8分类、目标检测额、姿态估计、图像分割四部分代码,我们使用的是detect部分,也就是目标检测代码 2、搭建环境 安装anaconda 和 pycharm windows系统、mac系统、Linux系统都适配 在anaconda中新建一个新的envs虚拟空间(可以参考博客来),命令窗口执行:conda create -n YOLOv8 python==3.8 创建完YOLOv8-GUI虚拟空间后,命令窗口执行:source activate YOLOv8 激活虚拟空间 然后就在YOLOv8虚拟空间内安装requirements.txt中的所有安装包,命令窗口执行:pip install -r requirements.txt 使用清华源安装更快 3、训练模型过程 进入到\ultralytics-main\ultralytics\yolo\v8\detect\文件夹下,datasets即为我们需要准备好的数据集,训练其他模型同理。 data文件夹下的bicycle.yaml文件为数据集配置文件,该文件为本人训练自行车检测模型时创建,训练其他模型,可自行创建。博文有介绍https://blog.csdn.net/DeepLearning_?spm=1011.2415.3001.5343 train.py中238行,修改为data = cfg.data or './bicycle.yaml' # or yolo.ClassificationDataset("mnist") 237行修改自己使用的预训练模型 若自己有显卡,修改239行,如我有四张显卡,即改成args = dict(model=model, data=data, device=”0,1,2,3“) 以上配置完成后运行train.py开始训练模型,训练完毕后会在runs/detect/文件夹下生成train*文件夹,里面包含模型和评估指标等 4、推理测试 训练好模型,打开predict.py,修改87行,model = cfg.model or 'yolov8n.pt',把yolov8n.pt换成我们刚才训练完生成的模型路径(在\ultralytics-main\ultralytics\yolo\v8\detect\runs\detect文件夹下),待测试的图片或者视频存放于ultralytics\ultralytics\assets文件夹, 运行predict.py即可,检测结果会在runs/detect/train文件夹下生成。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值