首页 > 其他分享 >YOLOv8姿态估计(跟踪+检测+姿态估计+代码)

YOLOv8姿态估计(跟踪+检测+姿态估计+代码)

时间:2024-11-27 19:59:22浏览次数:13  
标签:YOLOv7 image YOLOv8 估计 pip frame 姿态

概述

YOLOv7姿态估计:一种快速准确的人体姿态估计模型

img

添加图片注释,不超过 140 字(可选)

人体姿态估计是计算机视觉中的一项重要任务,具有各种应用,例如动作识别、人机交互和监控。近年来,基于深度学习的方法在人体姿态估计方面取得了显著的性能。其中最流行的深度学习方法之一是YOLOv7姿态估计模型。

算法

YOLOv7姿态估计模型是YOLOv7目标检测模型的扩展,使用单个神经网络同时预测图像中多个物体的边界框和类别概率。在YOLOv7姿态估计模型中,网络预测每个人的关键点位置,从而可以用于估计人的姿态。

网络

YOLOv7姿态估计模型基于深度卷积神经网络架构,由多个卷积层、最大池化和全连接层组成。网络接受输入图像并产生特征图,然后用于预测每个人的关键点位置。

img

添加图片注释,不超过 140 字(可选)

数据集

YOLOv7姿态估计模型使用大型数据集进行训练,例如COCO(通用对象上下文)和MPII(马克斯·普朗克计算机科学研究所),这些数据集包含成千上万的人在各种姿势和环境中的注释图像。该模型使用监督学习和数据增强技术进行训练,例如随机缩放、旋转和平移输入图像。

img

添加图片注释,不超过 140 字(可选)

优势

YOLOv7姿态估计模型的一个关键优势是其速度和准确性。该模型能够实时估计多个人的姿态,使其适用于人机交互和监控等应用。此外,该模型在COCO和MPII等基准数据集上实现了最先进的性能,展示了其准确性和鲁棒性。

img

添加图片注释,不超过 140 字(可选)

结论

总之,YOLOv7姿态估计模型是一种快速准确的基于深度学习的人体姿态估计模型。其能够实时估计多个人的姿态,使其适用于各种应用,而其在基准数据集上的最先进性能证明了其有效性。随着深度学习的不断发展,我们可以预期在人体姿态估计方面会有进一步的改进,而YOLOv7姿态估计模型很可能在这些发展中发挥重要作用。

img

添加图片注释,不超过 140 字(可选)

代码:

#全部代码可私信或者
def run(poseweights="yolov7-w6-pose.pt",source="football1.mp4",device='cpu',view_img=False,
        save_conf=False,line_thickness = 3,hide_labels=False, hide_conf=True):

    frame_count = 0  #count no of frames
    total_fps = 0  #count total fps
    time_list = []   #list to store time
    fps_list = []    #list to store fps
    
    device = select_device(opt.device) #select device
    half = device.type != 'cpu'

    model = attempt_load(poseweights, map_location=device)  #Load model
    _ = model.eval()
    names = model.module.names if hasattr(model, 'module') else model.names  # get class names
   
    if source.isnumeric() :    
        cap = cv2.VideoCapture(int(source))    #pass video to videocapture object
    else :
        cap = cv2.VideoCapture(source)    #pass video to videocapture object
   
    if (cap.isOpened() == False):   #check if videocapture not opened
        print('Error while trying to read video. Please check path again')
        raise SystemExit()

    else:
        frame_width = int(cap.get(3))  #get video frame width
        frame_height = int(cap.get(4)) #get video frame height

        
        vid_write_image = letterbox(cap.read()[1], (frame_width), stride=64, auto=True)[0] #init videowriter
        resize_height, resize_width = vid_write_image.shape[:2]
        out_video_name = f"{source.split('/')[-1].split('.')[0]}"
        out = cv2.VideoWriter(f"{source}_keypoint.mp4",
                            cv2.VideoWriter_fourcc(*'mp4v'), 30,
                            (resize_width, resize_height))

        while(cap.isOpened): #loop until cap opened or video not complete
        
            print("Frame {} Processing".format(frame_count+1))

            ret, frame = cap.read()  #get frame and success from video capture
            
            if ret: #if success is true, means frame exist
                orig_image = frame #store frame
                image = cv2.cvtColor(orig_image, cv2.COLOR_BGR2RGB) #convert frame to RGB
                image = letterbox(image, (frame_width), stride=64, auto=True)[0]
                image_ = image.copy()
                image = transforms.ToTensor()(image)
                image = torch.tensor(np.array([image.numpy()]))
            
                image = image.to(device)  #convert image data to device
                image = image.float() #convert image to float precision (cpu)
                start_time = time.time() #start time for fps calculation
            
                with torch.no_grad():  #get predictions
                    output_data, _ = model(image)

                output_data = non_max_suppression_kpt(output_data,   #Apply non max suppression
                                            0.25,   # Conf. Threshold.
                                            0.65, # IoU Threshold.
                                            nc=model.yaml['nc'], # Number of classes.
                                            nkpt=model.yaml['nkpt'], # Number of keypoints.
                                            kpt_label=True)
            
                output = output_to_keypoint(output_data)

                im0 = image[0].permute(1, 2, 0) * 255 # Change format [b, c, h, w] to [h, w, c] for displaying the image.
                im0 = im0.cpu().numpy().astype(np.uint8)
                
                im0 = cv2.cvtColor(im0, cv2.COLOR_RGB2BGR) #reshape image format to (BGR)
                gn = torch.tensor(im0.shape)[[1, 0, 1, 0]]  # normalization gain whwh

                for i, pose in enumerate(output_data):  # detections per image
                
                    if len(output_data):  #check if no pose
                        for c in pose[:, 5].unique(): # Print results
                            n = (pose[:, 5] == c).sum()  # detections per class
                            print("No of Objects in Current Frame : {}".format(n))
                        
                        for det_index, (*xyxy, conf, cls) in enumerate(reversed(pose[:,:6])): #loop over poses for drawing on frame
                            c = int(cls)  # integer class
                            kpts = pose[det_index, 6:]
                            label = None if opt.hide_labels else (names[c] if opt.hide_conf else f'{names[c]} {conf:.2f}')
                            plot_one_box_kpt(xyxy, im0, label=label, color=colors(c, True), 
                                        line_thickness=opt.line_thickness,kpt_label=True, kpts=kpts, steps=3, 
                                        orig_shape=im0.shape[:2])

# 环境安装教程

#1.克隆项目并进入

#联系我:然后git clone 

2.linux创建虚拟环境

python3 -m venv psestenv
source psestenv/bin/activate

3.如果windows用户请用这个:

 python3 -m venv psestenv cd psestenv 
cd Scripts activate 
cd .. 
cd .. U
pgrade pip with mentioned command below.
 pip install --upgrade pip

\4. pip install

pip install -r requirements.txt

结果展示

img

e pip with mentioned command below.
pip install --upgrade pip


\4. pip install

pip install -r requirements.txt


## 结果展示

[外链图片转存中...(img-iA1qCSbJ-1732443059855)]





添加图片注释,不超过 140 字(可选)

标签:YOLOv7,image,YOLOv8,估计,pip,frame,姿态
From: https://blog.csdn.net/qq1309399183/article/details/144010940

相关文章

  • 如何使用Yolov8训练使用——无人机航拍输电线路悬垂线夹数据集,无人机航拍输电线耐张线
    输电线路悬垂线夹,耐张线夹检测无人机航拍图像数据集,总共1900左右图片,悬垂线夹识别,标注为voc格式如何使用YOLOv8模型训练输电线路悬垂线夹和耐张线夹检测的无人机航拍图像数据集。我们将从数据集的准备、模型的加载、训练配置和训练过程等方面进行详细说明。由于你的数据集......
  • 如何使用yolov8深度学习目标检测模型训练——芯片缺陷数据集/芯片表面缺陷数据集 1600
    如何使用YOLOv8模型训练芯片表面缺陷识别检测数据集。我们将从数据集的准备、模型的加载、训练配置和训练过程等方面进行详细说明。1.数据集准备数据集概述数据集名称:芯片表面缺陷识别检测数据集数据集来源:自制数据集内容:包含1600张图像,每张图像都有对应的标签......
  • 如何使用YOLOv8训练PCB板缺陷目标检测数据集 具有更高的精度和更快的推理速度 PCB板缺
    PCB板缺陷目标检测数据集(7-8000)8000张7类检测目标:Shortcircuit-短路Damaged-受损/损坏Lackofpart-缺失元件/部件缺失Misswelding-焊接缺失/焊接遗漏Redundant-冗余(在PCB中可能指冗余设计或多余的电路)Slug-冲头/金属废料(在PCB工艺中指切割过......
  • YOLOv8改进:CSWinTransformer交叉形窗口网络在目标检测中的应用与优化【YOLOv8】
    本专栏专为AI视觉领域的爱好者和从业者打造。涵盖分类、检测、分割、追踪等多项技术,带你从入门到精通!后续更有实战项目,助你轻松应对面试挑战!立即订阅,开启你的YOLOv8之旅!专栏订阅地址:https://blog.csdn.net/mrdeam/category_12804295.html文章目录YOLOv8改进:CSWinTransf......
  • 如何在本地Linux系统安装YOLOv8使用
    大部分YOLO初学者可能想在自己的Windows系统上,搭建个环境用来检测学习一下,这里给大家一点建议:对于笔者初学时,总是配置环境遇到问题,导致整个环境乱七八糟不能用,所以,选择用虚拟机搭建一个Ubuntu的环境。虚拟机对笔者来的优点:(1)快照功能:可以备份还原,如果搞错了直接还原快照,重新......
  • <项目代码>YOLOv8 航拍人车识别<目标检测>
     YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如FasterR-CNN),YOLOv8具有更高的检测速度和实时性。1.数据集介绍数据集详情可以参考博主写的博客<数据集>航拍人车识别......
  • yolov8+多算法多目标追踪+实例分割+目标检测+姿态估计(代码+教程)
    #多目标追踪+实例分割+目标检测YOLO(YouOnlyLookOnce)是一个流行的目标检测算法,它能够在图像中准确地定位和识别多个物体。在这里插入图片描述本项目是基于YOLO算法的目标跟踪系统,它将YOLO的目标检测功能与目标跟踪技术相结合,实现了实时的多目标跟踪。在目标......
  • 解决:YOLOv8训练数据集时P、R、mAP等值均为0的问题
    文章目录问题解决1.匹配pytorch与cuda的版本2.使用Adam优化器3.加大训练轮数epoch4.删除data/labels下的train.cache和val.cache问题使用YOLOv8训练自己的数据集时,出现P、R、mAP等值均为0的问题Modelsummary(fused):186layers,2,685,733parameters,0g......
  • 用糊弄学打开yolov8源码之yolov8.yaml
    yolov8源码下载:https://github.com/ultralytics/ultralyticsgithub.com/ultralytics/ultralytics打开源码完全不知道该从哪个文件开始看(……查看一些资料后……)决定先理解一下 yolov8.yaml 所在位置:ultralytics\cfg\models\v8\yolov8.yamlcfg\models文件夹下是各个模型......
  • 面对配分函数 - 噪扰对比估计(NCE)篇
    序言配分函数(也叫归一化因子)在概率分布和统计模型的计算中扮演着至关重要的角色。然而,在许多实际应用中,特别是自然语言处理和图像处理领域,配分函数的计算往往异常复杂且难以直接实现。为了解决这一难题,噪音对比估计(Noise Contras......