【目标检测】基于YOLO神经网络实现人体举重时杠铃的路径和速度跟踪附matlab代码

简介: 【目标检测】基于YOLO神经网络实现人体举重时杠铃的路径和速度跟踪附matlab代码

作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

基于计算机视觉的运动跟踪和检测是计算机视觉领域的重要课题。对视频序列中的运动目标进行检测、跟踪,获得目标的位置、速度等运动参数,是进行更高级的运动目标行为分析的基础。快速实时地检测出运动目标,对运动目标进行跟踪,并实现目标的运动数据分析,在体育领域可以得到广泛的应用。例如,对一个田径运动员的训练视频进行处理,提取出其瞬时运动速度、手臂摆动幅度、频率等信息,由于视频序列每秒钟有多幅图像,含有大量的人眼捕捉不到的有价值的信息,可用于分析运动员技术上的不足,提高运动技能。一种基于YOLO和改进模板匹配的杠铃识别与跟踪控制方法,具体包括以下步骤:S1,采集多种杠铃的侧视图作为训练数据,对训练数据制定标签,划分为训练集和测试集;S2,对训练集中的图片进行标准化处理,并使用YOLO算法通过调整超参数的方式训练杠铃识别模型;S3,获取原始杠铃视频,通过杠铃识别模型对杠铃视频的第一帧图像进行检测并定位杠铃的位置;S4,将从第一帧图像中得到的杠铃位置和原始杠铃视频输入到改进的模板匹配算法中,计算得到绘制有杠铃轨迹的杠铃追踪视频.与现有技术相比,本发明具有提升杠铃识别的准确率并能够识别出不同样式的杠铃,提高帧率和准确率等优点.

⛄ 部分代码

classdef liftVid < handle

   %liftVid Read and analyze a weightlifting video frame by frame.

   %   vid = liftVid("file.mp4");

   %

   % This is the main class definition for running BarTrace.

   

   properties

       vObj = 0;               % video object

       frameSize = [0 0]       % frame size

       numFrames = 0;          % number of frames

       radius = 0;             % avg radius of the plate in pixels    

       pos = zeros([],3);      % center of plate and radius in each frame

       model = load("TrainedNNB.mat"); % trained neural net

   end

   

   methods

       function obj = liftVid(fileName)

           %liftVid Construct an instance and open the video file.

           %   obj = liftVid(fileName)

           if nargin == 0

               [fileName, path] = uigetfile("*.mp4","Select video file");

               fileName = string(path) + fileName;

           elseif nargin > 1

               error('Expected 0 or 1 inputs');

           end

           obj.vObj = VideoReader(fileName);

           obj.frameSize = [obj.vObj.Height obj.vObj.Width];

       end

       

       function frame = processNextFrame(obj)

           %processNextFrame

           if isa(obj.vObj,"VideoReader") && hasFrame(obj.vObj)

               

               % read frame

               obj.numFrames = obj.numFrames + 1;

               cdata = readFrame(obj.vObj);

               

               % find plate

               trainedSize = obj.model.detector.TrainingImageSize;

               imSmall = imresize(cdata,trainedSize);

               [bboxes,scores] = detect(obj.model.detector,imSmall);

               if ~isempty(bboxes)

                   [~,idx] = max(scores);

                   box = bboxes(idx,1:4);

                   x = box(1) * obj.frameSize(2)/trainedSize(2);

                   y = box(2) * obj.frameSize(1)/trainedSize(1);

                   w = box(3) * obj.frameSize(2)/trainedSize(2);

                   h = box(4) * obj.frameSize(1)/trainedSize(1);

                   position = [(x+w/2) (y+h/2) ((w+h)/4)]; %[x y r]

                   obj.pos(obj.numFrames,1:3) = position; % store position

                   obj.radius = median(obj.pos(1:obj.numFrames,3)); % median of all past radii

               else

                   % plate wasn't found

                   position = [1 1 10];

                   obj.pos(obj.numFrames,1:3) = position; % store position

               end

               

               % annotate

               frame = insertShape(cdata,'circle',position,'LineWidth',5,'Color',"red");

               trace = zeros(obj.numFrames,4); %add lines and dots to bar trace

               for k = 2:obj.numFrames % concatonate a list of all past centers

                   trace(k-1,1:4) = [obj.pos(k-1,1) obj.pos(k-1,2) obj.pos(k,1) obj.pos(k,2)];

               end

               if ~isempty(trace)

                   frame = insertShape(frame,'Line',trace,'LineWidth',2,'Color',"blue");

                   frame = insertShape(frame,"Circle",[trace(1:size(trace,1),[3 4]) 2*ones(size(trace,1),1)],"LineWidth",1,"Color",{"Yellow"});

               end

           else

               disp("no more frames")

           end

       end

       

       function tracePlate(obj,playit,saveit,saveName)

           % tracePlate Finds the plate in each frame

           %   tracePlate(obj,playit,saveit)

           %   playit = true will play the video

           %   saveit = true will save the video

           if isa(obj.vObj,"VideoReader") && hasFrame(obj.vObj)

               if playit

                   figure;

                   f = gca;

               end

               if saveit

                   v = VideoWriter(saveName);

                   open(v);

               end

           else

               disp("no more frames to process - try reloading")

               playit = false;

               saveit = false;

           end

           while hasFrame(obj.vObj)

               frame = obj.processNextFrame;

               if playit

                   imshow(frame, 'Parent', f);

                   drawnow;

               end

               if saveit

                   writeVideo(v,frame);

               end

           end

           if saveit

               close(v)

           end

       end

   end % end of methods

end % end of classdef

⛄ 运行结果

⛄ 参考文献

[1]李文举, 王子杰. 基于YOLO和改进模板匹配的杠铃识别与跟踪控制方法:, CN114743125A[P]. 2022.

[2]王群. 基于计算机视觉的人体跟踪与运动参数测量[D]. 大连海事大学.

⛄ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
6月前
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
181 0
|
6月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
442 2
|
5月前
|
机器学习/深度学习 数据采集 存储
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
894 0
|
5月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
257 0
|
6月前
|
算法 数据挖掘 区块链
基于遗传算法的多式联运车辆路径网络优优化研究(Matlab代码实现)
基于遗传算法的多式联运车辆路径网络优优化研究(Matlab代码实现)
193 2
|
6月前
|
机器学习/深度学习 缓存 算法
2025年华为杯A题|通用神经网络处理器下的核内调度问题研究生数学建模|思路、代码、论文|持续更新中....
2025年华为杯A题|通用神经网络处理器下的核内调度问题研究生数学建模|思路、代码、论文|持续更新中....
598 1
|
5月前
|
传感器 机器学习/深度学习 数据采集
【航空发动机寿命预测】基于SE-ResNet网络的发动机寿命预测,C-MAPSS航空发动机寿命预测研究(Matlab代码实现)
【航空发动机寿命预测】基于SE-ResNet网络的发动机寿命预测,C-MAPSS航空发动机寿命预测研究(Matlab代码实现)
418 0
|
5月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
552 0
|
5月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
585 0
|
5月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
194 0

热门文章

最新文章