ai视觉学习跟踪 (AI机器视觉检测设备)

图像跟踪算法,我们由浅入深[狗头],先了解传统视觉里的跟踪算法。

传统视觉的图像跟踪。首先需要手动选出我们要识别的物体。随后使用跟踪算法实现跟踪,较为容易的就是opencv 自带的图像跟踪算法。

实验前的小测试[太阳]

目前OpenCV4版本中自带了8种目标跟踪算法。

下面是我经过测试做的总结

  • BOOSTING:算法原理类似于Haar cascades (AdaBoost),是一种很老的算法。这个算法速度慢并且不是很准。
  • MIL:比BOOSTING准一点。
  • KCF:速度比BOOSTING和MIL更快,与BOOSTING和MIL一样不能很好地处理遮挡问题。
  • CSRT:比KCF更准一些,但是速度比KCF稍慢。
  • MedianFlow:对于快速移动的目标和外形变化迅速的目标效果不好。
  • TLD:会产生较多的false-positives。
  • MOSSE:算法速度非常快,但是准确率比不上KCF和CSRT。在一些追求算法速度的场合很适用。
  • GOTURN:OpenCV中自带的唯一一个基于深度学习的算法。运行算法需要提前*载下**好模型文件。

综合算法速度和准确率考虑,个人觉得CSRT、KCF、MOSSE这三个目标跟踪算法较好。

一起开始动手做跟踪器吧!

Step1 打开摄像头选取跟踪的物体[太阳]

初始化视频捕获设备,我选择使用摄像头,jupyter 运行python程序

步骤如下:

  1. 打开摄像头
  2. 进入逻辑循环
  3. 读取摄像头图像
  4. 按回车按键确定绘制帧
  5. 框取跟踪的物体按回车按键确定

代码如下:

cap= cv2.VideoCapture(0)
print("按回车键选取当前帧")
while True:
    gCapStatus,gFrame = cap.read()
    if (gCapStatus == False):
        print("捕获帧失败")
        quit()
    cv2.imshow("pick frame",gFrame)
    key = cv2.waitKey(1) & 0xFF
    if(key == 13):
        break

# 框选感兴趣区域
cv2.destroyWindow("pick frame")
gROI = cv2.selectROI("ROI frame",gFrame,False)
if (not gROI):
    print("空框选,退出")
    quit()
cv2.destroyAllWindows()

演示如下[机智]

ai视觉学习跟踪,ai图像行为算法分析系统

Step2 跟踪

所选物体[太阳]

  1. 初始化*踪器追**KCF ,跟踪器类Tracker的代码需要的请留下邮箱,邮件发送源代码(仅供学习交流)
  2. 循环读取图像
  3. 跟踪输出图像

代码如下:

# 初始化*踪器追**
#'BOOSTING', 'MIL', 'KCF', 'TLD', 'MEDIANFLOW', 'GOTURN'
gTracker = Tracker(tracker_type="KCF")
gTracker.initWorking(gFrame,gROI)

# 循环帧读取,开始跟踪
while True:
    gCapStatus, gFrame = cap.read()
    if(gCapStatus):
        # 展示跟踪图片
        _item = gTracker.track(gFrame)
        gFrame=_item.getFrame()
        cv2.imshow("track result",gFrame)
        gFrame=cv2.resize(gFrame,(640,480))
        if _item.getMessage():
            # 打印跟踪数据
            print(_item.getMessage())
        else:
            # 丢失,重新用初始ROI初始
            print("丢失,重新使用初始ROI开始")
            gTracker = Tracker(tracker_type="KCF")
            gTracker.initWorking(gFrame, gROI)

        key = cv2.waitKey(1) & 0xFF
        if (key == ord('q')) | (key == 27):
            break
    else:
        print("捕获帧失败")
        break
cv2.destroyAllWindows()

效果展示[机智]

ai视觉学习跟踪,ai图像行为算法分析系统

学习更多视觉内容,关注我持续更新中。[作揖][来看我]