Closed zhangcun-yan closed 3 years ago
我把整个项目 clone 下来然后重新运行了一遍,没有出现你说的问题。应该是因为你用的是 windows 平台,或者是 opencv 版本差异导致的。
这个程序会读取源视频三次,第一次进行检测,第二次追踪,第三次逐帧绘制。我高度怀疑问题出在第一次读取完毕之后 stream 没有被释放,导致当前帧被定位在了最后一帧上。
一个简单的验证方法是:把你的视频文件复制一份一模一样的放在同一个目录下,然后在 main.py 的 41 行中将 video_file 替换为那个复制的视频,保证 stream 是一个新的 capture 对象,这样再运行下试试。
非常感谢您的帮助,我查到我的原因是opecncv 的版本太高了,当我删除最新的4.4版本重新安装3.4版本之后问题解决了,跑通了,安装代码如下 pip3 install -i https://pypi.doubanio.com/simple/ opencv-contrib-python=3.4.2.16,再次感谢!!
我使用的系统是 Ubuntu 18.04,opencv 的版本是 4.0.0,python 版本是 3.6,使用的神经网络是 yolov3。 我感觉你的 opencv 降低到 3.4 可能有点过低了。
非常感谢你热心的解答问题!
非常感谢您的帮助,我查到我的原因是opecncv 的版本太高了,当我删除最新的4.4版本重新安装3.4版本之后问题解决了,跑通了,安装代码如下 pip3 install -i https://pypi.doubanio.com/simple/ opencv-contrib-python=3.4.2.16,再次感谢!!
@YANzhangcun 你好,我也遇到了相同的问题,在Windows 10系统下降级了OpenCV到3.4之后还是没有解决,请问你使用的系统也是Linux的吗?
@hy741oo 你先试试 2 楼的解决方法,如果可行,那基本就确定问题原因了。
@hy741oo 你先试试 2 楼的解决方法,如果可行,那基本就确定问题原因了。
@neozhaoliang 你好,我现在正在试你在2楼里说明的方法,但是我想先了解一下我该如何自定义检测区域?现在我遇到了一个问题,就是你定义的选择框我无法在其他视频上使用,我手头上没有1080p且车流正对着视频中心位置的交通视频,所有的车辆都没有通过预先定义好了的检测区域,因此导致输出的结果为空,即“trajectories.csv”文件内没有任何内容。
@YANzhangcun 我也是在win10下运行,但是问题还是依旧。
@hy741oo 如果没有选择区域的话,zone 就是 none,所有车辆都会被检测。对应代码在这里:
https://github.com/neozhaoliang/visual-vehicle-behavier-analyzer/blob/master/analyzer/track.py#L382
检测框在运行 caliberate_camera 的时候,第一次弹出的图像是重投影和坐标图,第二次是选择监控区域的图。在图上点击设置区域即可。
轨迹输出是空的原因我觉得不是这个问题。能说一下你的运行环境吗?
@hy741oo 如果没有选择区域的话,zone 就是 none,所有车辆都会被检测。对应代码在这里:
https://github.com/neozhaoliang/visual-vehicle-behavier-analyzer/blob/master/analyzer/track.py#L382
检测框在运行 caliberate_camera 的时候,第一次弹出的图像是重投影和坐标图,第二次是选择监控区域的图。在图上点击设置区域即可。
轨迹输出是空的原因我觉得不是这个问题。能说一下你的运行环境吗?
@neozhaoliang 我的运行环境是 Python 3.8.5、opencv-contrib-python 3.4.11.45、opencv-python 3.4.11.45,神经网络也是yolov3、系统是Windows 10 1909。
我在运行的时候并没有“设置区域”这个步骤,在运行“main.py”脚本了之后项目就会直接读取视频,然后对视频内的所有对象进行检测,可以通过新弹出的窗口看到,然后是第二次读取原视频,应该就是你在2楼里说明的追踪过程,在第三次读取原视频的时候,也就是逐帧绘制的时候,会第二次弹出新窗口,这次弹出的新窗口可以看到在视频上面有和你在你的博客上演示视频一样的区域。
如果用的是你的视频,轨迹输出会有结果,但是结果就和1楼一样会有重复的数值;如果是用我的视频,那就不会有轨迹输出。
@hy741oo @YANzhangcun 我修改了下 stream 打开的部分,二位 pull 下代码再试试?
@hy741oo @YANzhangcun 我修改了下 stream 打开的部分,二位 pull 下代码再试试?
不行,我试了下没有任何改变。
其实项目里还有一个bug,该bug从一开始就有,就是在我当前的运行环境下用win10自带的视频软件“电影和电视”打开输出视频“trajectory_result.mp4”会提示“无法播放 不支持此项目所用的格式。请选择其他格式播放。 0xc1010103”,用“迅雷播放组件”播放视频不会有错误提示,但是视频内容是花屏状态。不知道和当前的问题有没有关系。
@hy741oo 我在博客里面 po 的视频就是用这个程序输出的,我想应该是和平台有关的,linux 看文件头部,windows 看后缀不看头部。不知道是不是这样。用 vlc 播放器 我想应该不会出这个问题。
@hy741oo 我在博客里面 po 的视频就是用这个程序输出的,我想应该是和平台有关的,linux 看文件头部,windows 看后缀不看头部。不知道是不是这样。用 vlc 播放器 我想应该不会出这个问题。
我在win10上下了一个VLC播放器播放视频文件,确实可以正常播放了,应该是解码器的问题。
@neozhaoliang我这边有三个问题想请教下:
问题2想达到的效果
已经可以正常运行得到输出了吗?
在 utils.geodesy 里面有个 load_scene_yaml 函数,只要修改它,让它的返回值是你的像素点和 xy 坐标即可。
trajectory.py 里面的 _asDict 方法会把该轨迹转换为一个字典,utils.misc.py 里面有一个 write_trajectory_csv 函数负责将这些轨迹输出到 csv,我觉得你只要修改这个输出 csv 的函数即可。用 pandas 的 DataFrame 直接按列输出。
问题 3 不知是何意思。
顺便你可以看看博客文章里面新传的视频,里面显示了轨迹计算与真实效果的差异。
目前已经可以运行,非常感谢哈!
希望做好了能分享下效果视频哈,如果效果不满意也可以一起讨论下原因。我感觉你那张图片里面的标定误差还挺明显的。
链接: https://pan.baidu.com/s/12Lh8VDx1LfCOmWKU_qULQQ 提取码: ck78 。视频中存在一些轨迹跟踪跳动的问题特点是在检测区域边缘,还有一个问题想向您请教,我使用跟踪出来的轨迹绘制轨迹图,出来的结果和在视频是看到的结果差距有点大,特别在开始端的轨迹点和接近末端的轨迹点。对照视频我自己猜测可能原因在于:1.存在个别识别框的跳动,也就是两辆车形态相似,识别过程中在他们接近的时候识别框发生跳转;3.我们的算法使用滤波算法前后参照多少个点哈?2.我们绘制的识别检测区域在进入之前和驶出后的段时间内仍然执行识别命令(因为在视频中可以看到,车辆接近检测区但并未进入的时候已经开始识别,车辆出了检测框仍然继续识别),在我上传的第三视频中可以看到。不知能否在现在的代码架构下应改进下?
你的图没有传上来。
"轨迹跟踪跳动" 不知是何意。
滤波这个东西有个特点:在轨迹的末端是没有或者很少有未来的信息可以使用的,这时的平滑基本不起作用,所以轨迹末端会有弯弯扭扭的现象。而初始端一般会平滑的比较好。
从你绘制的结果来看确实是发生了错误的关联。yolov3 这个网络的跳动比较大,换 mask rcnn 会好一些,但是也很难彻底解决。毕竟现在关联追踪多用极大二分匹配,除非更换关联的方法,否则单靠调整 iou 阈值的方法很难避免遮挡导致的切换。
所有的车辆都是识别的,只不过只有那些曾经进入过监控区域的车辆才会被输出。这个代码里面很好改,对应逻辑在
https://github.com/neozhaoliang/visual-vehicle-behavier-analyzer/blob/master/analyzer/track.py#L382
不知道你想对什么样的对象计算其轨迹?
还有就是我看你的图片显示的标定误差挺明显的,不知道这个问题影响如何?
我是想对视频中的车辆提取其轨迹,进行驾驶行为建模。最开始的图片确实存在较大的误差,主要原因可能是GPS坐标转换问题,后面不进行GPS坐标转换,之后差异相对小一些。你这个算法在编写的过程中有没有考虑到使用透视定理,直接求得像素坐标与实际坐标之间的转换矩阵,后对像素坐标进行转换。这边有透视定理:https://blog.csdn.net/stf1065716904/article/details/92795238
用相机模型反算可以把像素投影到任何 z=c 平面上,用透视变换只能投影到一个固定平面。
已经可以正常运行得到输出了吗?
1. 在 utils.geodesy 里面有个 load_scene_yaml 函数,只要修改它,让它的返回值是你的像素点和 xy 坐标即可。 2. trajectory.py 里面的 _asDict 方法会把该轨迹转换为一个字典,utils.misc.py 里面有一个 write_trajectory_csv 函数负责将这些轨迹输出到 csv,我觉得你只要修改这个输出 csv 的函数即可。用 pandas 的 DataFrame 直接按列输出。
问题 3 不知是何意思。
顺便你可以看看博客文章里面新传的视频,里面显示了轨迹计算与真实效果的差异。
@neozhaoliang 关于问题3我也遇到了,就是在运行camera_calibration.py
,确认了点重合了之后会第二次弹出窗口来利用鼠标点击相应的点来确定检测的范围,在这个步骤中新弹出窗口的大小是根据截图的大小来确定的,也就是说如果从视频中截出来的图的大小是4k甚至是8k的话,在普通1080p分辨率显示器下仅仅只会显示整张图片的左上角一小块,这样不方便在图片中央确立检测范围,有没有一个办法可以限制这个新窗口里的内容显示在一个范围内,防止超过显示器分辨率的大小?
顺便一说我用虚拟机配置了一个和你提供的环境几乎一摸一样的工作环境,现在可以正常使用。
可以的,只要把图片缩小显示就可以。我稍后几天改改。
hy741oo notifications@github.com 于2020年11月24日周二 下午5:39写道:
已经可以正常运行得到输出了吗?
在 utils.geodesy 里面有个 load_scene_yaml 函数,只要修改它,让它的返回值是你的像素点和 xy 坐标即可。
trajectory.py 里面的 _asDict 方法会把该轨迹转换为一个字典,utils.misc.py 里面有一个 write_trajectory_csv 函数负责将这些轨迹输出到 csv,我觉得你只要修改这个输出 csv 的函数即可。用 pandas 的 DataFrame 直接按列输出。
问题 3 不知是何意思。
顺便你可以看看博客文章里面新传的视频,里面显示了轨迹计算与真实效果的差异。
@neozhaoliang https://github.com/neozhaoliang 关于问题3我也遇到了,就是在运行 camera_calibration.py ,确认了点重合了之后会第二次弹出窗口来利用鼠标点击相应的点来确定检测的范围,在这个步骤中新弹出窗口的大小是根据截图的大小来确定的,也就是说如果从视频中截出来的图的大小是4k甚至是8k的话,在普通1080p分辨率显示器下仅仅只会显示整张图片的左上角一小块,这样不方便在图片中央确立检测范围,有没有一个办法可以限制这个新窗口里的内容显示在一个范围内,防止超过显示器分辨率的大小?
顺便一说我用虚拟机配置了一个和你提供的环境几乎一摸一样的工作环境,现在可以正常使用。
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/neozhaoliang/visual-vehicle-behavier-analyzer/issues/1#issuecomment-732777479, or unsubscribe https://github.com/notifications/unsubscribe-auth/AFR2HJV4FCWAFJO7JZISNALSRN5NFANCNFSM4TUD37MQ .
我把整个项目 clone 下来然后重新运行了一遍,没有出现你说的问题。应该是因为你用的是 windows 平台,或者是 opencv 版本差异导致的。
这个程序会读取源视频三次,第一次进行检测,第二次追踪,第三次逐帧绘制。我高度怀疑问题出在第一次读取完毕之后 stream 没有被释放,导致当前帧被定位在了最后一帧上。
一个简单的验证方法是:把你的视频文件复制一份一模一样的放在同一个目录下,然后在 main.py 的 41 行中将 video_file 替换为那个复制的视频,保证 stream 是一个新的 capture 对象,这样再运行下试试。
您好,我也遇到了最终输出的csv文件中坐标不发生变化,始终是同一个值的问题,运行环境为ubuntu18.04+opencv4.3+python3.6.9,想请问一下这个问题最终是怎么解决的呢(我按照之前的办法将视频复制了一份保证了stream capture到的是一个新的视频,同时修改了所有与stream有关的函数,在末尾均加上了release(),问题依旧没有解决),期待您的解答!谢谢!
@942572730 目前看来是 opencv 版本问题,降到 4.0 或者 3.4 应该都可以。
好滴!十分感谢!
获取 Outlook for iOShttps://aka.ms/o0ukef
发件人: Zhao Liang notifications@github.com 发送时间: Thursday, January 21, 2021 12:21:52 AM 收件人: neozhaoliang/visual-vehicle-behavier-analyzer visual-vehicle-behavier-analyzer@noreply.github.com 抄送: JIAO, TIANQI (PGT) Tianqi.Jiao@warwick.ac.uk; Mention mention@noreply.github.com 主题: Re: [neozhaoliang/visual-vehicle-behavier-analyzer] how did trajectories result are the same value? (#1)
@942572730https://github.com/942572730 目前看来是 opencv 版本问题,降到 4.0 或者 3.4 应该都可以。
― You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/neozhaoliang/visual-vehicle-behavier-analyzer/issues/1#issuecomment-763753122, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ANOKYJK32KJN3YHBHQ4YPRDS237KBANCNFSM4TUD37MQ.
@942572730 目前看来是 opencv 版本问题,降到 4.0 或者 3.4 应该都可以。
您好,在调整之后有一个新的问题,就是在将轨迹画入视频文件时(也就是第三次绘制)会报错Brokenpipe Error,但是用演示的视频就不会出现这个问题,而且trajectory确实是有的,如果把pipe.write(frame.tobytes())注释掉后面的代码能够正确运行,不知您在开发的过程中是否遇到了相同的问题,或者这个问题有什么解决方法吗?
不清楚原因,你能提供你的运行环境信息吗?
不清楚原因,你能提供你的运行环境信息吗?
我用的是ubuntu18.04的虚拟机,opencv4.0.0,python3.6.9,在运行时我首先运行的是您提供的参考视频,一切都运行正常,最终的视频重绘制和csv都成功生成,但我运行自己的视频时发现在第三次将每一帧的轨迹画在视频中时就会报错brokenpipe错误,但注释掉后csv是可以正常输出的,如果需要的话我还可以提供我的实验视频,希望能找到问题究竟是出在什么地方,万分感谢!
把你的视频和标定的文件发给我看看,xidalapuda@126.com
请问博客的内容在哪里可以看到,我在您的博客找不到了
因为涉及一些发表方面的原因,文章需要暂时撤下。过一段时间会重新发布的。
tigerst007 notifications@github.com 于2021年3月9日周二 上午9:52写道:
请问博客的内容在哪里可以看到,我在您的博客找不到了
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/neozhaoliang/visual-vehicle-behavier-analyzer/issues/1#issuecomment-793258407, or unsubscribe https://github.com/notifications/unsubscribe-auth/AFR2HJWOSHUCYLPFHKRFFGLTCV5OLANCNFSM4TUD37MQ .
楼上各位:问题已经修正,opencv 4+ 的版本应该也都可以运行。此外添加了说明文档。
博主:您好!我用您的代码识别无人机视频中的车辆(抖动处理好的),不知道为什么不能准确的识别出现目标?请问存在限制吗?
这个项目使用的是 coco 数据集上训练的 yolov3,无人机视频中的车辆是俯视视角,与数据集中的图片不同,会否是这方面的原因?
this is a good project. and i have recurrent your code , but the result of trajectories.csv the world_x and world_y are the same value.