python进阶——人工智能实时目标跟踪
创始人
2024-05-22 18:23:15
0

  大家好,我是csdn的博主:lqj_本人

这是我的个人博客主页:lqj_本人的博客_CSDN博客-微信小程序,前端,vue领域博主lqj_本人擅长微信小程序,前端,vue,等方面的知识https://blog.csdn.net/lbcyllqj?spm=1000.2115.3001.5343

哔哩哔哩欢迎关注:小淼前端

小淼前端的个人空间_哔哩哔哩_bilibili

本篇文章主要讲述python的人工智能目标跟踪,本篇文章已经成功收录到我们python专栏中:https://blog.csdn.net/lbcyllqj/category_12089557.htmlhttps://blog.csdn.net/lbcyllqj/category_12089557.html

目录

前言

项目介绍

区域性锁定目标实时动态跟踪(适用 警方追捕,无人机锁定拍摄等)

首先先介绍几种AI视觉算法

详细代码讲解

完整代码及注释:

结果演示

区域性全部实时动态目标跟踪(适用夜视跟踪,范围性观察等)

思路构建

详细代码讲解

完整代码及注释:

结果显示


前言

本程序主要实现了python的opencv人工智能视觉模块的目标跟踪功能。

若不知道怎么安装opencv或者使用的请看我的这篇文章(曾上过csdn综合热榜的top1):

python进阶——人工智能视觉识别_lqj_本人的博客-CSDN博客

项目介绍

区域性锁定目标实时动态跟踪(适用 警方追捕,无人机锁定拍摄等)

 首先先介绍几种AI视觉算法

特性:

1.BOOSTING:算法原理类似于Harr cascdes(AdaBoost),是一种很老的算法。这个算法速度慢并且不准。

2.MIL:比BOOSTING准一点

3.KCF:速度比BOOSTING和MIL更快,与BOOSTING和MIL一样不能很好的处理遮挡问题。

4.CSRT:比KCF更准一些,但是速度比KCF慢

5.MedianFlow:对于快速移动的目标和外形比那花迅速的目标效果不好

6.TLD:会产生朵的false-posittives

7.MOSSE:算法速度非常快,但是准确率比不上KCF和CSRT,在一些追求算法的速度场合很适用

8.GOTURN:OpenCV中自带的唯一一个基于深度学习的算法,运行短发需要提前下载好模型文件

分别对应的伴生的函数:

kcf:cv2.legacy.TrackerKCF_create
csrt:cv2.legacy.TrackerCSRT_create
boosting:cv2.legacy.TrackerBoosting_create
mil:cv2.legacy.TrackerMIL_create
tld:cv2.legacy.TrackerTLD_create
medianflow:cv2.legacy.TrackerMedianFlow_create
mosse:cv2.legacy.TrackerMOSSE_create

详细代码讲解

导入cv模块

import cv2

使用csrt算法,引用伴生函数,并赋值给tracker

tracker = cv2.legacy.TrackerCSRT_create()

读取视频流

cap = cv2.VideoCapture('11.mp4')

先读取到第一帧

ret,frame = cap.read()

使用selectROI(前景),画框将目标框起,并赋值给bbox

bbox = cv2.selectROI('A',frame,fromCenter=False,showCrosshair=True)

初始化tracker,将上面的两个值传入

tracker.init(frame,bbox)

读取每一帧

ret,frame = cap.read()

根据每一帧来更新tracker

ok,box = tracker.update(frame)

若读取成功,就定位画框,并跟随

    if ok :(x,y,w,h) = [int(v) for v in box]cv2.rectangle(frame,pt1=(int(x),int(y)),pt2=(int(x)+int(w),int(y)+int(h)),color=(0,255,0),thickness=2)

显示视频流

cv2.imshow('A', frame)

等待50毫秒或按空格键退出

    if cv2.waitKey(50) == ord(' '):break

 释放视频流和释放窗口

cap.release()
cv2.destroyAllWindows()

完整代码及注释:

import cv2
tracker = cv2.legacy.TrackerCSRT_create()#使用csrt算法,引用伴生函数,并赋值给trackercap = cv2.VideoCapture('11.mp4')#读取视频流ret,frame = cap.read()#先读取第一帧bbox = cv2.selectROI('A',frame,fromCenter=False,showCrosshair=True)#使用selectROI(前景),画框将目标框起,并赋值给bboxtracker.init(frame,bbox)#初始化tracker,将上面的两个值传入while True:ret,frame = cap.read()#读取每一帧ok,box = tracker.update(frame)#根据每一帧来跟新tracker# 若读取成功,我们就定位画框,并跟随if ok :(x,y,w,h) = [int(v) for v in box]cv2.rectangle(frame,pt1=(int(x),int(y)),pt2=(int(x)+int(w),int(y)+int(h)),color=(0,255,0),thickness=2)cv2.imshow('A', frame)#显示视频流if cv2.waitKey(50) == ord(' '):#等待50毫秒或键盘按空格键退出break# 释放视频流,释放窗口
cap.release()
cv2.destroyAllWindows()

结果演示

区域性全部实时动态目标跟踪(适用夜视跟踪,范围性观察等)

思路构建

1.先将实时摄像流或录制视频流,灰度转化并高斯模糊

2.用二值化算法将流中的物体轮廓扩充

3.分别先读到第一帧和第二帧,让其对比

4.寻找对比后,流的轮廓位置,并开启简易模式

5.过滤物体的矩阵轮廓将其定位绘出

详细代码讲解

导入cv模块

import cv2

将视频流转换并让其高斯模糊

    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)blur = cv2.GaussianBlur(gray,(5,5),0)

二值化扩充

    _,thresh = cv2.threshold(blur,20,255,cv2.THRESH_BINARY)dilated = cv2.dilate(thresh,None,iterations=3)return dilated

读取视频流或实时摄像流

cap = cv2.VideoCapture('11.mp4')

读取第一帧

ret,frame1 = cap.read()

读取第二帧

ret,frame2 = cap.read()

判断cap是否为打开状态

while cap.isOpened():

若为打开,则第一帧与第二帧比较

diff = cv2.absdiff(frame1,frame2)
mask = filter_img(diff)

寻找比较后的物体轮廓,并开启简易模式

contours,_ = cv2.findContours(mask,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

使用方框将视频流中的物体框出,得到矩阵的宽高

(x,y,w,h) = cv2.boundingRect(contour)

若矩阵的面积小于10(根据视频流中物体的大小来定义),直接无视

if cv2.contourArea(contour) < 10:

将过滤的物体的矩阵轮廓绘出(一定要用int整形)

cv2.rectangle(frame1,pt1=(int(x),int(y)),pt2=(int(x)+int(w),int(y)+int(h)),color=(0,255,0),thickness=1)

将第一帧显示

cv2.imshow('A',frame1)

将上面赋值的mask显示

cv2.imshow('B',mask)

实现前后帧对比,并定位物体运动轨迹

1.将第二帧赋值给第一帧

frame1 = frame2

2.再将cap读到的赋值给第二帧()

ret,frame2 = cap.read()

等待50毫秒或者按空格结束

    if cv2.waitKey(50) == ord(' '):break

释放视频流及释放窗口

cap.release()
cv2.destroyAllWindows()

 完整代码及注释:

import cv2
def filter_img(frame):#将视频流转换灰度并让其高斯模糊gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)blur = cv2.GaussianBlur(gray,(5,5),0)#二值化将其扩充_,thresh = cv2.threshold(blur,20,255,cv2.THRESH_BINARY)dilated = cv2.dilate(thresh,None,iterations=3)return dilated
# 读取视频流
cap = cv2.VideoCapture('11.mp4')ret,frame1 = cap.read()#读到第一帧
ret,frame2 = cap.read()#读到第二帧while cap.isOpened():#判断cap是否打开diff = cv2.absdiff(frame1,frame2)#若打开,则第一帧和第二帧作比较mask = filter_img(diff)contours,_ = cv2.findContours(mask,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)#寻找视频流的轮廓,简单模式#用方框将视频流中的物体用矩形框出for contour in contours:(x,y,w,h) = cv2.boundingRect(contour)#得到矩阵的宽高if cv2.contourArea(contour) < 10:#若矩阵的面积小于200,就无视(太小了)continuecv2.rectangle(frame1,pt1=(int(x),int(y)),pt2=(int(x)+int(w),int(y)+int(h)),color=(0,255,0),thickness=1)#将过滤的物体的矩阵轮廓绘出# cv2.drawContours(frame1,contours,-1,(0,255,0),2)#将视频流中的物体轮廓画出cv2.imshow('A',frame1)#将第一帧显示cv2.imshow('B',mask)#将mask也显示frame1 = frame2#将第二帧赋值给第一帧ret,frame2 = cap.read()#再将cap读到的赋值给第二帧if cv2.waitKey(50) == ord(' '):#等待五十毫秒或者按空格结束break
#销毁cap流
cap.release()
#释放窗口
cv2.destroyAllWindows()

结果显示

相关内容

热门资讯

课题研究计划 课题研究计划  研究计划步骤  RP写作的第一步,就是Topic的确定。也就是你的所要研究的详细内容...
社团会长工作计划共41篇 社团会长工作计划 第一篇西北工业大学明德学院社团联合会,在学院领导的.关怀下,在院学生工作部和院团委...
呼吸内科实习总结 呼吸内科实习总结(精选7篇)  紧张又充实的实习生活又告一段落了,想必你的视野也得到了开拓,这个时候...
运动造型工作计划(通用18篇... 运动造型工作计划 第一篇一、赛事背景:为切实落实_中央_提出的学校教育树立“健康第一”的指导思想和贯...
综合素质测评自我总结 综合素质测评自我总结(精选6篇)  自我总结是个人在一个阶段对自己的学习或工作生活的自我总结,写自我...
检验士年终总结   2017检验士年终总结怎么写呢?那么下面是小编为大家搜集提供到的关于2017检验士年终总结范文,...
幼儿园小班个人工作计划 幼儿园小班个人工作计划(通用15篇)  时间一晃而过,我们又将迎来新的喜悦、新的收获,是时候开始写工...
小学电教工作总结 小学电教工作总结(精选4篇)  时间是箭,去来迅疾,一段时间的工作已经告一段落,回顾过去的工作,倍感...
四年一班假期班级工作总结 四年一班假期班级工作总结 愉快的寒假生活在欢声笑语中结束了,我们又迎来了紧张忙碌的新学年。孩子们经...
团工作总结范文优选43篇 团工作总结范文 第一篇英语儿童歌曲,因其充满童趣,富有动感,词句简单,内容生动,形式活泼等特点,深受...
vbse实训财务会计总结 vbse实训财务会计总结  总结是事后对某一阶段的学习、工作或其完成情况加以回顾和分析的一种书面材料...
幼儿园教师工作总结 【精华】幼儿园教师工作总结模板汇编8篇  总结就是把一个时段的学习、工作或其完成情况进行一次全面系统...
数控技师工作总结(6篇) 数控技师工作总结 第一篇本人于是20xx年在校就读数控专业,经过三年的学习已打下结实的基础,于20x...
团员民主评议总结 团员民主评议总结2篇  总结是事后对某一阶段的学习或工作情况作加以回顾检查并分析评价的书面材料,它可...
高二数学的知识点总结 高二数学的知识点总结  数学是我们学习中非常重要的一门课程,数学与我们的生活密切相关, 所以我们一定...
挖掘机销售人员的个人工作总结 挖掘机销售人员的个人工作总结  时间乘着年轮循序往前,一段时间的工作已经结束了,回顾过去的工作,倍感...
依法行政工作总结 依法行政工作总结(通用5篇)  时间总在不经意间匆匆溜走,我们的工作又告一段落了,回顾这段时间的工作...
教育技能实训总结范文通用14... 教育技能实训总结范文 第一篇通过这次的实训使我们学到了很多,同时也让我们意识到我们要学的更多。从程序...
双创工作总结共40篇 双创工作总结 第一篇省里要来检查“双创”工作,我们单位的领导也开会通知我们要打扫好自我科室的卫生,唉...
换届选举工作总结范文 换届选举工作总结范文  工作总结的定义  工作总结(Job Summary/Work Summary...