这是一个视频浓缩的项目
我的 github 地址 https://github.com/fraser-in-school/video_synopsis-
但这个项目是在前人的工作上完成的, 请了解 https://github.com/Qidian213/deep_sort_yolov3
前辈们的 README.md 我更名为 SENIOR_README.md 这个文件仍然在项目目录下,我觉得你也很有必要去看看
这个文件
这个视频浓缩主要分为以下的几个步骤
1、多目标检测+跟踪,确定序号和轨迹
形成每个跟踪对象轨迹的索引
2、确定视频编辑的背景
3、检查跟踪轨迹的重合,避免多个对象在同一时刻出现在同一位置,造成重叠
4、形成一个新的索引,并依据这个索引生成视频浓缩
一些必要的准备工作
必要的库
opencv
TensorFlow 1.5 以下
以及一些其他的库
需要下载 yolo.h5 model, 将其放到 model_data 文件夹下
首先需要将 constant.py 里面的视频路径改成自己的
正式开始
第一步确定目标轨迹的索引,基本由前人的工作完成
python demo
或者在 pycahrm 直接运行 demo.py
在 temp_file 文件夹下会生成 tracking.txt, 后面用到的是 tracking_result.txt 文件是指拿到完整的 tracking.txt 更名为 tracking_result.txt 即可
第二步生成视频背景
运行 get_background.py
觉得背景可以了,按下 q 退出
在 temp_file 文件夹下会生成 background.jpg
第三步生成新的索引我没有找到好的算法和方法,后面是我自己想的办法,处理方式比较粗糙,目标重合比较严重,详情可以见 some_message.txt
这里有两步
运行 read_frame.py
在 temp_file 文件夹下会生成 target.json, 相当于目标原来的轨迹索引了
在 targets_image 文件夹下会生成每个目标的在各个帧的裁剪图片
运行 get_new_index.py
在 temp_file 文件夹下会生成 new_index.json 文件,相当于新的索引了
第四步生成新的索引和视频
运行 get_video.py 生成最后的视频
一些主要的处理方式
裁剪矩形
裁剪大小为真正大小的 120%,
宽度上大概多裁 12,即 top_left_x - 6, right_bottom_x + 6
长度上大概多裁 24,即 top_left_y - 12, right_bottom_y + 12
冲突判定方式
本来是一个矩形重合的问题,这里简化为 centroid 在 x 轴,y 轴两个方向上的距离问题
x 方向上 距离相差 1.5 * average_width = 87 1.3 75.4 2.5 145
y 方向上 距离相差 1.5 * average_height = 180 1.3 156 2.5 300
最开始采用的 1.5 * average, 但后面的目标重合很严重,后面改成 2.5 * average,但其实
目标重合还是很严重,主要还是生成新索引的方式太粗糙了
如何生成新的索引?
1)第一部分,找到所有 target 的“新”第一帧
找到第一帧出现的所有 target, 这些 target 从第一帧开始出现
第一步完成后,找到不与第一步产生的所有 target 冲突的 target
重复以上两步,这里换成第 X 帧,直至所有 target 第一帧都已经形成
2)检测冲突
这里的冲突分为两种,一种为本来就是在同一帧就有冲突的,这里我们叫做第一类冲突
另外一种是因为加入不同时刻的 target 因为速度与其他时刻的 target 不一致,产生了冲突,
这里我们叫做第二类冲突
这里的处理方式都采用一样的处理方式,发现 target_1 与 其他 n 个 target 存在冲突时,
record = n
计算record, 将 {position, record} 都放入同一个数组里,首先是空的,加入新的 target 的
时候,与先前所有的 target 进行一次距离计算
联系方式:
201250397@qq.com
这是我的小号的 QQ 邮箱,可能会看到,也可能看不到