@1:正确的写法
KCFtrackers_dict[key] = cv.TrackerKCF_create()
这里是在KCFtrackers_dict字典中新建了一对 (key , value)
value是cv.TrackerKCF_create()
@2:以前的报错(KeyErrory 2)写法 trackers_dict = {key: cv.TrackerKCF_create()}
这样会导致字典从新赋予 key , val , 而不是如 @1:中在原有的基础上在新添加 key , val 所以会报错
@3:原作者写法
trackers_dict = {key: cv.TrackerKCF_create() for key in objects_list}
这是原作者的写法,她的思想是对检测到的所有物体进行kcf跟踪,直到全部丢失在进行下一轮的检测,所以这个步骤是对所有的字典中的key 也就是所有检测到的目标id创建kcf跟踪器
代码详情如下:
___________________________________________
# TODO KCF3: init2\
KCFobjects_list = list(KCFobjects_dict.keys())
# TODO 二: objects_list 检测列表
if len(KCFobjects_list) > 0:
for key in KCFobjects_list:
if KCFobjects_dict[key][1] == 0: # 没有创建跟踪器的时候都是0 # TODO 字典val, 元组中第二个数
# KCFtrackers_dict = {key: cv.TrackerKCF_create()}
KCFtrackers_dict[key] = cv.TrackerKCF_create() # 现在是@1:正确的写法,@2:以前的写法会报错,因为错误的使用字典
# key: cv.TrackerKCF_create() for key in objects_list
# TODO 三: trackers_dict 跟踪字典
KCFobjects_dict[key][1] = 1 # 创建跟踪器之后是1 # TODO 字典val, 元组中第二个数
# KCFtrackers_dict = {key: cv.TrackerKCF_create() for key in objects_list}
KCFtrackers_dict[key].init(frame, KCFobjects_dict[key][0])
# TODO 四: trackers_dict 跟踪字典 init
# print(KCFtrackers_dict)
# print('@', bbox)
# ix = KCF_bbox[0]
# iy = KCF_bbox[1]
# w = KCF_bbox[2]
# h = KCF_bbox[3]
# KCFtracker.init([KCF_bbox[0], KCF_bbox[1], KCF_bbox[2], KCF_bbox[3]], frame)
# TODO KCF3: init2/