【目标检测】基于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电子书和数学建模资料


相关文章
|
7月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
887 0
|
7月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
340 8
|
7月前
|
机器学习/深度学习 编解码 算法
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
339 8
|
SQL 监控 安全
网络安全与信息安全:漏洞、加密与安全意识
随着互联网的迅猛发展,网络安全和信息安全问题日益受到关注。本文深入探讨了网络安全漏洞、加密技术以及提高个人和组织的安全意识的重要性。通过分析常见的网络攻击手段如缓冲区溢出、SQL注入等,揭示了计算机系统中存在的缺陷及其潜在威胁。同时,详细介绍了对称加密和非对称加密算法的原理及应用场景,强调了数字签名和数字证书在验证信息完整性中的关键作用。此外,还讨论了培养良好上网习惯、定期备份数据等提升安全意识的方法,旨在帮助读者更好地理解和应对复杂的网络安全挑战。
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
455 17
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
345 10
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
340 10
|
监控 安全 网络安全
网络安全与信息安全:漏洞、加密与意识的交织
在数字时代的浪潮中,网络安全与信息安全成为维护数据完整性、保密性和可用性的关键。本文深入探讨了网络安全中的漏洞概念、加密技术的应用以及提升安全意识的重要性。通过实际案例分析,揭示了网络攻击的常见模式和防御策略,强调了教育和技术并重的安全理念。旨在为读者提供一套全面的网络安全知识框架,从而在日益复杂的网络环境中保护个人和组织的资产安全。
|
存储 监控 安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
本文将探讨云计算与网络安全之间的关系,以及它们在云服务、网络安全和信息安全等技术领域中的融合与挑战。我们将分析云计算的优势和风险,以及如何通过网络安全措施来保护数据和应用程序。我们还将讨论如何确保云服务的可用性和可靠性,以及如何处理网络攻击和数据泄露等问题。最后,我们将提供一些关于如何在云计算环境中实现网络安全的建议和最佳实践。

热门文章

最新文章