前言:
眼前你们对“ct跟踪算法程序”可能比较注重,看官们都需要分析一些“ct跟踪算法程序”的相关文章。那么小编在网络上收集了一些关于“ct跟踪算法程序””的相关内容,希望小伙伴们能喜欢,兄弟们一起来学习一下吧!在上一文中使用dlib实现视频流中的多目标跟踪,详情可以参看:65.人工智能——如何实现视频流中的多目标跟踪。这里感谢网友提出专业意见:如何实现换镜头也能实现目标追踪?
这里可以考虑使用PaddlePaddle的PP-Tracking来实现,PP-Tracking支持单镜头跟踪(MOT)和跨镜头跟踪(MTMCT)两种模式。详细可以参看官网。
本文主要使用目标检测来解决目标跟踪中的问题,最主要的问题就是跟踪目标丢失问题和置信度过低问题。如果是跨镜头的话,跟踪的目标肯定会出现丢失现象,这里如果发现目标丢失,就重新检测目标,直到跟踪目标出现,重新跟踪。
如果跟踪的目标置信度太低,我们也可以认为是目标跟踪丢失,这里也需要重新重新检测目标,直到跟踪目标出现,重新跟踪。
本文跟踪的目标是一个3D打印花瓶。为测试演示,做了一个测试视频。视频中间故意截断,人为制造切换镜头的效果。
视频加载中...
目标检测算法:
为了能实现快速目标检测,这里选择PP-PicoDet轻量级目标检测模型,具体可以参看:23.基于PP-PicoDet轻量级目标检测模型——实现目标检测项目。
实现的完整代码
import paddlex as pdximport osimport cv2import dlib#配置GPUos.environ["CUDA_VISIBLE_DEVICES"] = "0,1"#创建推理器predictor=pdx.deploy.Predictor("output/picodet-bottle/inference_model",use_gpu=True)videofile="img/bottle.mp4"#创建视频流cap=cv2.VideoCapture(videofile)#创建跟踪器tracker=dlib.correlation_tracker()isfirst=True #第一帧while cap.isOpened(): ret,frame=cap.read() if not ret: break if isfirst: #获取推理结果 result=predictor.predict(frame) if len(result)>0: res=result[0]["bbox"] score=round(result[0]["score"],2) name=result[0]["category"] #获取检测框的坐标 if score>0.6: #只有当检测到目标时才进行跟踪 x1,y1,w,h=int(res[0]),int(res[1]),int(res[2]),int(res[3]) #print(x1,y1,w,h) #初始化跟踪目标, tracker.start_track(frame, dlib.rectangle(x1, y1, x1+w, y1+h)) isfirst=False else: #当检测到的目标不符合要求时,重新开始跟踪 isfirst=True score=0 else: sc=tracker.update(frame) #返回置信度,值越大表示置信度越高 s=round(sc,2) if sc<5: #当置信度小于5时,重新开始跟踪 isfirst=True score=0 else: #当置信度大于6时,获取跟踪目标的坐标 #获取跟踪结果 box_pred=tracker.get_position() #获取跟踪框的坐标, x1,y1,x2,y2=int(box_pred.left()),int(box_pred.top()),int(box_pred.right()),int(box_pred.bottom()) #绘制跟踪框 cv2.rectangle(frame,(x1,y1),(x2,y2),(0,0,255),2) #写文字 cv2.putText(frame,name+"---"+str(s),(x1,y1),cv2.FONT_HERSHEY_SIMPLEX,0.6,(0,255,0),1) #显示 cv2.imshow("Tracking",frame) if cv2.waitKey(10)==27: break cap.release()cv2.destroyAllWindows()
实现效果视频:
视频加载中...
标签: #ct跟踪算法程序