首页 > 酒水资讯 > 酒水功效

daily tracker,daily track

酒易淘 酒水功效 2022-07-27 15:17:42

品牌名称:酱香白酒加盟 所属行业:酒水 > 白酒

基本投资:10~50万元 投资热度:

加盟意向:1634 门店数量:534家

索要资料 查看详情

  

     

  

  引言   

  

  行人检测是近年来计算机视觉领域的研究热点,也是目标检测领域的难点。其目的是对图像中的行人进行识别和定位,在很多领域得到了广泛的应用。在交通安全方面,无人驾驶汽车通过提前探测行人并及时避让,避免了交通事故的发生;在安全防护方面,采用行人探测,防止可疑人员进入;在公共场所管理方面,通过行人检测统计行人流量数据,优化人力物力资源配置。   

  

  关于目标检测的方法,自2013年Ross Girshick提出R-CNN以来,短短几年内人们提出了快速R-CNN、更快R-CNN、掩膜R-CNN、SSD、YOLO等算法。其中两步目标检测法(R-CNN系列算法)需要先生成大量候选帧,然后用卷积神经网络对候选帧进行分类回归。单步检测法(SSD,YOLO系列算法)直接利用卷积神经网络中的回归方法,一步预测目标的位置和类别。两步检测的目标检测方法虽然在大多数场景下准确率较高,但是需要两步。因此,这种方法将耗费大量的时间和昂贵的硬件,所以它不适合实时检测视频文件。YOLO系列网络速度更快,能适应实时视频的检测,泛化能力更强。   

  

  对于人物跟踪,亚历克斯比雷在2016年提出了一种简单的在线实时跟踪算法。该算法结合了传统的卡尔曼滤波和匈牙利算法,能够很好地关联视频帧序列中的交叉检测结果。而且其速度比传统算法快20倍左右,可以快速处理目标探测反馈的数据。   

  

  因此,本项目采用深度学习的方法,通过YOLO算法实现行人检测,通过深度排序算法实现轨迹跟踪。最终实现效果可以看到下图:   

  

     

  

  1.1 环境要求基本介绍   

  

  这个环境使用python3.6.5 windows平台。使用的主要库有:   

  

  Opencv模块。在计算机视觉项目的开发中,opencv作为一个流行的开源库,拥有丰富的常用图像处理函数库。它是用C/C语言编写的,可以运行在Linux/Windows/Mac等操作系统上,可以快速实现一些图像处理和识别任务。   

  

  枕头模块。PIL是图像存档和批处理的理想应用。您可以使用该库创建缩略图,并在文件格式、打印图像等之间进行转换。它提供了广泛的文件格式支持,高效的内部表示和相当强大的图像处理功能。核心图像数据库旨在快速访问以几种基本像素格式存储的数据。它为通用图像处理工具提供了坚实的基础。   

  

  科学图书馆。Scipy是一个在数学、科学和工程领域使用的通用软件包。它可以处理插值、积分、优化、图像处理、常微分方程数值解、信号处理等问题。用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。   

  

  Keras模块。Keras是Python编写的开源人工神经网络库,可作为Tensorflow、Microsoft-CNTK和Theano的高级应用程序接口,用于深度学习模型的设计、调试、评估、应用和可视化。   

  

  1.2 算法设计   

  

  卷积神经网络用于检测和跟踪视频中的行人。帧输入后首先进入YOLOv3目标检测网络,由Darknet-53提取特征。其次,进行上采样、特征融合和回归分析。第三,将预测帧信息输入排序算法,对目标特征进行建模、匹配和跟踪。最后输出结果。下图是算法流程的设计示意图:   

  

     

  

  行人检测2.1 YOLO行人检测   

  

  普通的两阶段检测首先使用候选区域生成器生成的候选区域集,从每个候选区域中提取特征,然后使用区域分类器预测候选区域的类别。而YOLO作为单级检测器,不需要生成候选区域,直接对特征图各个位置的物体进行分类预测,效率更高。   

  

  在这里使用拉贝梅标注行人数据集,然后通过搭建好的YOLO算法产生模型并进行训练即可。   

  

  ' def yolo_body(inputs,num_anchors,num_classes): ' ' '在克拉斯中创建YOLO V3模型美国有线新闻网;卷积神经网络主体' ' ' ' darknet=Model(inputs,darknet_body(inputs)) x,y1=make _ last _ layers(dark net。output,512,num _ anchors *(num _ class 5))x=compose(   

DarknetConv2D_BN_Leaky(256, (1,1)), UpSampling2D(2))(x) x = Concatenate()(.output>) x, y2 = make_last_layers(x, 256, num_anchors*(num_classes+5)) x = compose( DarknetConv2D_BN_Leaky(128, (1,1)), UpSampling2D(2))(x) x = Concatenate()(.output>) x, y3 = make_last_layers(x, 128, num_anchors*(num_classes+5)) return Model(inputs, )

  

2.2 Deepsort行人跟踪

  

行人多目标跟踪算法设计的步骤如下:

  

(1) 检测阶段:目标检测算法会分析每一个输入帧,并识别属于特定类别的对象,给出分类和坐标。

  

(2) 特征提取/运动轨迹预测阶段:采用一种或者多种特征提取算法用来提取表观特征,运动或者交互特征。此外,还可以使用轨迹预测器预测该目标的下一个位置。

  

(3) 相似度计算阶段:表观特征和运动特征可以用来计算两个目标之间的相似性。

  

(4) 关联阶段:使用计算得到的相似性作为依据,将属于同一目标的检测对象和轨迹关联起来,并给检测对象分配和轨迹相同的 ID。

  

使用卡尔曼滤波类跟踪的估计状态系统和估计的方差或不确定性。用于预测。

  

这里dist_thresh为距离阈值。当超过阈值时,轨道将被删除,并创建新的轨道;Max_frames_to_skip为允许跳过的最大帧数对于跟踪对象未被检测到;max_trace_length为跟踪路径历史长度;trackIdCount为每个轨道对象的标识。

  

def Update(self, detections): if (len(self.tracks) == 0): for i in range(len(detections)): track = Track(detections, self.trackIdCount) self.trackIdCount += 1 self.tracks.append(track) N = len(self.tracks) M = len(detections) cost = np.zeros(shape=(N, M)) for i in range(len(self.tracks)): for j in range(len(detections)): try: diff = self.tracks.prediction - detections distance = np.sqrt(diff<0><0>*diff<0><0> + diff<1><0>*diff<1><0>) cost = distance except: pass cost = (0.5) * cost assignment = <> for _ in range(N): assignment.append(-1) row_ind, col_ind = linear_sum_assignment(cost) for i in range(len(row_ind)): assignment> = col_ind un_assigned_tracks = <> for i in range(len(assignment)): if (assignment != -1): if (cost> > self.dist_thresh): assignment = -1 un_assigned_tracks.append(i) pass else: self.tracks.skipped_frames += 1 del_tracks = <>

  

综合结果显示将YOLO行人检测和deepsort算法结合,并通过设置基本阈值参数控制轨迹预测的欧式距离。通过搭建本项目可应用于城市商业街道、人行道、校园道路场景,使用其得出的人员流动数据,帮助公共交通和安全管理。最终得到的使用效果如下:

  

track_colors = get_colors_for_classes(max_colors)result = np.asarray(image)font = cv2.FONT_HERSHEY_SIMPLEXresult0 = result.copy()result1=result.copy()img_position=np.zeros(,result.shape<1>,3>)if (len(centers) > 0): tracker.Update(centers) for i in range(len(tracker.tracks)): if (len(tracker.tracks.trace) > 1): x0, y0 = tracker.tracks.trace<-1><0><0>, tracker.tracks.trace<-1><1><0> cv2.putText(result0, "ID: "+str(tracker.tracks.track_id-99), (int(x0), int(y0)), font, track_id_size, (255, 255, 255), 2) cv2.putText(result1, "ID: " + str(tracker.tracks.track_id - 99), (int(x0), int(y0)), font, track_id_size, (255, 255, 255), 2) color_random = tracker.tracks.track_id % 9 cv2.circle(img_position, (int(x0), int(y0)), 1, track_colors, 8) cv2.putText(img_position, str(tracker.tracks.track_id - 99), (int(x0), int(y0)), font, track_id_size, (255, 255, 255), 2) result0=result0.copy() for j in range(len(tracker.tracks.trace) - 1): x1 = tracker.tracks.trace<0><0> y1 = tracker.tracks.trace<1><0> x2 = tracker.tracks.trace<0><0> y2 = tracker.tracks.trace<1><0> clr = tracker.tracks.track_id % 9 distance = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5 if distance < max_point_distance: cv2.line(result1, (int(x1), int(y1)), (int(x2), int(y2)), track_colors, 4) result1=result1.copy()

  

  

完整代码:

  

链接:https://pan.baidu.com/s/1KHEbPwCrjsS_3wBdUrtdtQ

  

提取码:pe5m

  

作者简介:

  

李秋键,CSDN博客专家,CSDN达人课作者。硕士在读于中国矿业大学,开发有taptap竞赛获奖等。

免费咨询
免费获取加盟资料