深度学习之SSD算法下的路径跟踪---Python
动态船舶路径关键点提取在视频流送入改进SSD路径检测系统后,视频流的每一帧图片先进入改进SSD识别模型进行识别,随后返回真实框以及相应的坐标,通过真实框的坐标可以获取框的中心点的位置如图所示:由图可知,可以通过真实框的两个点坐标算出中心坐标Center,如式所示:中心点为Center的坐标,其他的值如上图所示...
深度学习之SSD算法下的路径跟踪—Python
这篇博客发完意味着我已经毕业了,这可能是我最后一次发有关深度学习的图像识别的博客了,之前看过有人做过小球路径的跟踪,所以就仿照小球路径跟踪做了一个船舶路径跟踪,有不足之处还请大虾们多多包涵哈。
我主要是用python写的,因为比较好学嘛,下面进入正题。路径追踪包含两点,一点就是物体识别,另一点就是路径提取。物体识别模块我通过水网上的SSD代码,已经实现并且进行了细微改进了。本次博客就不对物体识别进行多余的描述了,网上有很多资源可供参考。下面主要介绍路径跟踪,路径跟踪说白了就是提取关键点,然后在放回去,由点成线嘛,然后就有了。
动态船舶路径关键点提取
在视频流送入改进SSD路径检测系统后,视频流的每一帧图片先进入改进SSD识别模型进行识别,随后返回真实框以及相应的坐标,通过真实框的坐标可以获取框的中心点的位置如图所示:
由图可知,可以通过真实框的两个点坐标算出中心坐标Center,如式所示:
系统获取视频流后,将视频流输入到改进SSD框架,在由框架输出含有真实框的船舶检测结果的每一帧图片,随后对每一帧图片进行路径关键点提取,从而得到不同时间段的路径关键点图片,然后在将这些关键点存储起来,依次对应输出,从而生成船舶的运动路径。
SSD算法的实现以及改进我就不说了,网上有很多的资源可供参考,我是在demotest里面进行了修改,并增加了路径跟踪模块。由于本人比较懒,且我做的时二分类,即识别船舶和背景,所以未在检测框中调用visualization.py这个文件,所以检测结果的框中不含有障碍物名称。
下面贴出跟踪模块代码:
代码中的调试我就不删了啊,不然代码看起来太少了,哈哈。。。。。
def track_s(img,xx1,xx2,yy1,yy2):
import time
qwe = time.time()
counter =0
center = (yy1 + ((yy2 - yy1) // 2), xx1 + ((xx2 - xx1) // 2))
# print(center)
pts.append(center)
# #
for ii in range(0,len(pts)):
# print(ii)
# if pts[ii - 1] is None or pts[ii] is None:
# continue
# if counter >= 10 and ii == 1 and pts[-10] is not None:
# # compute the difference between the x and y
# # coordinates and re-initialize the direction
# # text variables
# dxx = pts[-10][0] - pts[ii][0]
# dyy = pts[-10][1] - pts[ii][1]
# (dirxx, diryy) = ("", "")
#
# # ensure there is significant movement in the
# # x-direction
# if np.abs(dxx) > 20:
# dirxx = "East" if np.sign(dxx) == 1 else "West"
#
# # ensure there is significant movement in the
# # y-direction
# if np.abs(dyy) > 20:
# diryy = "North" if np.sign(dyy) == 1 else "South"
#
# # handle when both directions are non-empty
# if dirxx != "" and diryy != "":
# direction = "{}-{}".format(diryy, dirxx)
#
# # otherwise, only one direction is non-empty
# else:
# direction = dirxx if dirxx != "" else diryy
thickness = 20
cv2.line(img, pts[ii], pts[ii - 1], (0, 0, 255), thickness)
# counter += 1
#
# cv2.imshow("img",img)
# counter += 1
# cv2.imshow("img",img)
# cv2.waitKey(0)
下面是主模块调用代码:
def bboxes_draw_on_img(img, classes, scores, bboxes, colors, thickness=20):
shape = img.shape
pts = deque(maxlen=256)
for i in range(bboxes.shape[0]):
bbox = bboxes[i]
color = colors[classes[i]]
# Draw bounding box...
xx1=int(bbox[0] * shape[0])
yy1=int(bbox[1] * shape[1])
xx2=int(bbox[2] * shape[0])
yy2=int(bbox[3] * shape[1])
p1 = (xx1, yy1)
p2 = (xx2, yy2)
cv2.rectangle(img, (yy1,xx1),(yy2,xx2), color, thickness)
track_s(img,xx1,xx2,yy1,yy2)
# Draw text...
s = '%s/%.3f' % (l_VOC_CLASS[int(classes[i]) - 1], scores[i])
p1 = (p1[0] - 5, p1[1])
# cv2.putText(img, s, p1[::-1], cv2.FONT_HERSHEY_DUPLEX, 1.5, color, 3)
我使用的是Carver C43 Coupe Running Video的网上离线视频做的检测,有条件的也可以使用网络摄像头来做。至于水印嘛就没去除了,在网上找了好久带水印的太多了,就凑合用吧。
下面贴上gift图片,我是用剪辑大师导出的图片居然也带水印,泪崩。。。
一起开启新世界的大门吧😊
更多推荐
所有评论(0)