请教下领导提出图像识别的这种思路是否可行?

2020-01-08 08:58:26 +08:00
 xiaolinjia

需求是领导想做一个船只的目标跟踪,即不断截取摄像头的图片,然后用 TensorFlow 等,框选出当前船只在图片中的像素坐标,再调用摄像头的移动命令去使其移动以保持船只在摄像头中间。

姑且当其识别的比较准的前提下,测试发现有一个问题。

如果有其他船只从旁边经过(即和目标船只出现在同一个摄像头中)的时候,因为图像识别到两艘船,且坐标不同,这时,我就不知道要跟哪艘了。

针对这个问题,领导跟我说,让我看看 opencv 的相似度计算。他思路是,把之前框选的船只图,保存下来(不是保留摄像头整个图片,而是仅框选的船只图片),然后再把这个船,和之后的摄像头的图片做相似度计算,再判断出是要跟着哪艘船?

注:是用框选出的小图,和整张摄像头的大图进行相似度计算。

我也不是很懂机器学习这块,只是懂 python 就让我上了。。所以我想请问下这种思路到底可行不,如果是比较困难的话,或者有大佬提出其他可行的想法?

11313 次点击
所在节点    Python
83 条回复
theqiang
2020-01-08 17:02:01 +08:00
船运动比较规律,用卡尔曼滤波跟踪不就行了,隔几帧检测一下校准。
aguesuka
2020-01-08 17:23:06 +08:00
保存船的时候同时保存船的速度,通过速度和加速度来预测船的下一个位置。
encro
2020-01-08 17:48:36 +08:00
1,将船只简化为线框(去彩色,找出边界,描绘成点),
2,跟踪线框移动,保证线框在屏幕中间。
clemente0620
2020-01-08 19:31:57 +08:00
我正好在做这块,我可以提供直接的方案和工程,而且可以做到实时 你需要吗???
clemente0620
2020-01-08 19:33:58 +08:00
其实就是 主干网络选型+跟踪算法结合就行
xiaolinjia
2020-01-08 20:06:41 +08:00
@clemente0620 需要啊老哥。
lpf0309
2020-01-08 20:49:21 +08:00
我做了半学期跟你做的差不多,哈哈,有好的算法求分享学习一下。
qza1212
2020-01-08 21:19:16 +08:00
你要是研究目标跟踪,那可以去读博了,参考下这个知乎回答 :
计算机视觉中,目前有哪些经典的目标跟踪算法? - YaqiLYU 的回答 - 知乎
https://www.zhihu.com/question/26493945/answer/156025576

如果只是应用,opencv 3.0 后就已经引入了 tracking api 直接用就行
https://docs.opencv.org/4.2.0/d9/df8/group__tracking.html
https://www.learnopencv.com/object-tracking-using-opencv-cpp-python/
loissiau
2020-01-09 01:17:14 +08:00
卫星跟踪船只?
westonWei
2020-01-09 01:30:22 +08:00
不是很懂这些,不过从实际的情况考虑,同一艘船,拍摄的角度不同,会被认为不同的船。
realpg
2020-01-09 02:09:19 +08:00
完全可行。我有个合作伙伴有类似应用
zjsxwc
2020-01-09 08:25:27 +08:00
碰到两艘同款船时 就凉凉
horkooo
2020-01-09 08:34:53 +08:00
这个需求是可以实现的。用 php+opencv+tensorflow,最后记得云台控制。你可以搜搜树莓派方面有大量 python 的实例。
atonku
2020-01-09 08:38:20 +08:00
虽不明,蛋觉厉
realpg
2020-01-09 10:31:09 +08:00
@zjsxwc #72


并不会。

我这边合作伙伴有个比这还复杂的,识别车辆,没有预先训练和预置图形样本,即时训练识别。我没研究过他们是怎么开发的,团队没几个人,搞 python 的,实际应用效果我是见到了的,很好。

进出公路港高峰期,摄像头视野内很少有只有一辆车的时候。他们算法很简单的能区分不同车辆,但是全程过摄像头被遮挡一部分的车辆可能没法记录好是哪一辆,但是能认出来是一辆货车,只是特征记录不足

他们的系统在实时摄像头预览上会像 <POI>那样标出车辆轮廓和车辆内部 ID,识别出来是一辆车,但是特征不足的会记录一辆未知车。

我不知道船这种东西在机器看的辨识度,货车而论,人眼看不出区别的同样涂装的大货车,在他们计算机识别预览图上看识别飞快且能准确区分。

不过他们的采集点有减速带,车速快不了,而且是刚过车辆闸门以后,考虑船只移动速度,应该差不多。

我们承建了这个系统的内网传输,每个远端节点,80Gbps 的高速 LAN 到总数据中心。在每个采集点附近的建筑内有一个小 GPU 集群,然后高速网络回数据中心,我估计是保存共享数据给其他节点用
mahonejolla
2020-01-09 11:23:57 +08:00
@zjsxwc #72 看到你这个回复,我哈哈笑了。其他答案我还很是谨慎的表情。
Chenamy2017
2020-01-09 13:13:20 +08:00
目标跟踪,目标有自己的特征,比如航向、速度,根据这个去推算下一帧(时刻)目标可能会出现的位置。
我们以前做雷达跟踪目标就是这样,没有目标的图像数据,只有特征数据,推算的轨迹精确度相当高。
uxff
2020-01-09 13:14:31 +08:00
碰到 2 艘一样的船,要根据船的运行轨迹,预判下一秒可能出现的位置来判断。
人类肉眼也是这么跟踪的。

船应该不会在采集周期(一般 1 秒以内)内瞬间飘逸让肉眼也没法跟踪 2 船的位置吧。
xiaolinjia
2020-01-10 11:57:22 +08:00
@qza1212 大佬,拜读了你发的第三篇,突然有种茅塞顿开的感觉。确实一开始的思路应该是错了,不应该每帧都靠图像识别,而是应该像文章所说的,第一帧识别,n 帧跟踪,再 n+1 帧识别(个人理解是用于校准多帧跟踪可能造成的偏差),再 n 帧跟踪,如此反复。这么说,我更应该去看看跟踪算法。你的这篇文章确切帮我解决了响应速度和准度的部分问题,但是多船的问题,这个能解决吗。
qza1212
2020-01-11 02:05:09 +08:00
@xiaolinjia 不是大佬哈……只是想提供一点帮助

不可能每帧都 detection,也不可能不做 detection
detection 能辅助 tracking,tracking 也能提高 detection 的准确度

你领导给你的这个任务……都可以用来做硕博的毕业课题了,既然你这是工业应用,那自然应该找现成的用

推荐一个流程:
1. 对初始帧做 detection 拿到多个目标 boundingbox,或者用交互手段直接框
2. 针对每个 boundingbox,tracking N 帧之后的位置,计算它们之间的相似度
3. 相似度大于某个阈值 continue, 否则重新 detection

detection 用的方法推荐用深度学习,直接拿别人的模型用,用传统的 cv 特征学习门槛比较高,还得自己训练
至于模型,楼上有大佬提到了一些方法,……或者你康康 12306 的验证码识别能不能直接用
https://github.com/zhaipro/easy12306
https://github.com/testerSunshine/12306model
detection 再考虑细一点的话,还有一个候选区域生成的问题,可以用滑动窗,mser 或者 selective search

tracking 的方法 opencv 3.0 之后的版本里有很多,自己选一个就行

计算相似度的方法,7#已经帮你想好了

这个流程可以 handle 多目标情况

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/635977

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX