用python和opencv实时跟踪无人机目标

上周末飞行后(连同加布里埃尔莱安德罗)加布里埃尔的无人驾驶飞机(这是一架基于APM 2.6的手工四轮飞机)在我们镇上(阿雷格里港,Brasil)我决定使用opencv和python来实现对对象的跟踪,并检查结果如何使用简单快速的方法,比如均值漂移.结果非常令人印象深刻,我相信有bepaly亚洲足够的优化空间,但是,该算法现在能够使用python实时运行,结果良好,全高清分辨率为1920×1080和30 fps。

这是驾驶飞机的视频加布里埃尔

更多细节请看全高清。

该算法可以描述如下,非常简单(少于50行python),而且非常简单:bepaly亚洲

  • 定义了一个ROI(感兴趣的区域);在这种情况下,我要跟踪的建筑
  • 计算了归一化的直方图和反投影。
  • 平均移位算法用于跟踪投资回报率。

跟踪的整个代码描述如下:

import numpy as nimport cv2def run_main():cap=cv2.videocapture('upabove.mp4')读取视频ret的第一帧,frame=cap.read()设置ROI(感兴趣区域)。事实上,这是我们跟踪的建筑物的矩形c,r,w,h=900650,70,70 track_window=(c,r,w,h)创建遮罩和标准化柱状图roi=frame[r:r+h,C:C+W]hsv_roi=cv2.cvt颜色(roi,cv2.color_bgr2hsv)mask=cv2.inrange(hsv_roi,数组((0)30、32)np.array((180,255,255.))ROI历史=cv2.calchist([hsv_ROI],〔0〕;面具,〔180〕;〔0〕180])cv2.正常化(ROI历史,罗伊希斯特0,255,cv2.norm_minmax)term_crit=(cv2.term_criteria_eps_cv2.term_criteria_count,80,1)如果为真:ret,frame=cap.read()hsv=cv2.cvtcolor(帧,cv2.color_bgr2hsv)dst=cv2.calcbackproject([hsv],〔0〕;罗伊希斯特〔0180〕;1)RET,track_window=cv2.平均偏移(dst,跟踪窗口术语“crit”x,y,w,h=轨迹窗口cv2.矩形(框架,(x,y)(x+w,y+h),255,2)cv2.puttext(帧,“追踪”(X-25,Y-10),cv2.font撊hershey撊u simplex,1,(255255255)2,cv2.cv_aa)cv2.imshow('跟踪',frame)如果cv2.waitkey(1)&0xff==ord('q'):break cap.release()cv2.DestroyalLwindows()如果uuu name_uuu=“uu main_uuuuu”:运行main()

希望你喜欢!

克里斯蒂安S佩隆

66评论

  1. 使用FPV视频是否同样准确?标准PAL分辨率?这将是难以置信的更有用的,能够跟踪和检测从现场饲料和后处理后的飞行。

  2. 这激励了我。我加入了几个为无人机做工程软件的家伙,我只有Java/后端体验。这让我相信我可以和他们一起玩!谢谢

    1. 我认为覆盆子圆周率不能达到这个帧速率。我也很感兴趣知道使用了哪些硬件!

    2. 你好,托马斯,我们用的是APM 2.6板,但是视频是用gopro录制的,处理是用台式计算机完成的。但是视频是实时处理的,例如,它也可以用于FPV传输。我也相信树莓圆周率上的手臂有足够的资源来处理这个问题,但我还是要测试一下。

        1. 你是否因为我对这个项目感兴趣而编写了一个教程,我会很感谢你对如何开始的建议。

    1. 我在安装OpenCV时遇到了这个问题。有人知道这一变化背后的历史/原因吗?我是OpenCV的新手。

      1. 在OpenCV 3.0版中,完成了大量的重构。由于利息上升,来自世界各地人民和GSOC的贡献,图书馆越来越大了。版本3似乎是减少所有技术债务和提供一个更清洁、更容易的设计的合适时机,正如您所说的,新手学习更快。

  3. 你好,你的案例非常简单,所以任何bepaly亚洲值得尊敬的跟踪方法都会给你很好的结果。但对于你的情况(特别是在无人机的情况下)一个用于视频稳定的KLT跟踪和一个混合的KLT/MS跟踪将给你一个非常好的鲁棒性和准确性,bepaly亚洲即使使用可变形对象(使用OpenCV,编码也不是很复杂)。bepaly亚洲

    我以前也为硕士论文做过类似的工作,如果你对它感兴趣,你可以在这里看到结果并下载我的论文:http://namnorireports.duckdns.org/wordpress/?P=104.

      1. 考虑到在跟踪时,通常在使用角或边时不使用原始尺寸的图像,因为他们的核心信息在低采样图像中几乎保持不变,在非常小的情况下,当你bepaly亚洲需要原始尺寸的精度时,你要做的是金字塔分析。

        MS通常应用的问题是只有颜色信息,当你有相似的柱状图时,它会失败很多(在真实场景中会发生很多)。您可以轻松提高它的性能,只需将梯度信息添加到柱状图的其余部分(例如边缘点的计数),并以依赖的方式使用通道(将每个样本rgbe作为柱状图中的单个值,这会消耗大量的内存,但值得付出额外的成本)。

        如果你以后用klt方法稳定视频,然后你可以更进一步,使用在KLT中跟踪的功能来学习MS柱状图,而不是使用单个补丁(这将使您在可变形对象中获得更好的结果,它会让你使用更聪明的学习方法。

  4. 干得好!
    现在我很想看到无人机实时运行。我想一个典型的智能手机类型的设备就足够了(假设我们可以使用它的GPU来加速计算)。
    想象一下用现代智能手机的计算能力你能做什么!(甚至没有提到像手机这样的连接,3G全球定位系统,其IMU等)

    aaann现在我需要一架无人机……:-/

  5. 干得真不错!我在研究一些稍微不同的东西。我想用我的无人机的GPS信息获取我正在跟踪的目标的GPS坐标。
    我真的很想在我的头脑中有一个有前途的项目。准确度也让我恼火(也许我会先让无人机停下来获得一个稳固的GPS锁)
    如果可能,或者你可以证明,我要感谢的不仅仅是男人!

  6. 嗨,克里斯蒂安,

    您的跟踪软件似乎速度快且功能强大。
    我和我的团队为智能视频分析创建了一个销售平台。我们有很多客户会觉得您的软件非常有趣。

    这个平台叫Blepo,可以在网址:http://www.blepo.net.作为开发人员,你可以免费为你的软件做广告,给广大用户。这些用户将能够根据自己的视频测试您的软件,让他们找到最适合自己需求的软件。

    这个平台是基于云的,安全的。您可以选择上传您的IVA软件的演示版本,或者在您自己的服务器上托管演示版本。如果托管在您自己的服务器上,每次用户想要测试它时,您都会收到一个在线请求。bepaly亚洲这样可以确保完全保护您的软件。

    我很高兴你加入这个社区——它将给你的软件带来巨大的风险。有关我们社区的更多信息,请访问
    http://www.procams-project.eu/developer/开发人员/.

    致以最诚挚的问候,

    玛丽娜

  7. 我怎么解决这个问题
    回溯(最近一次呼叫的最后一次):
    文件“c:/python27/koko realtime.py”,第45行,在里面
    Run*主()
    文件“c:/python27/koko realtime.py”,第16行,在RunyMalm
    ROI=帧[R:R+H,C:C+W]
    类型错误:“nonetype”对象没有属性“uu getitem”

  8. 嗨,克里斯,

    我们也能在移动目标上实现您的解决方案吗?我们对你们的解决方案感兴趣。

    1. 你好,Elie,当然你可以在移动目标上实现它,然而,还有其他方法可以改善你的跟踪,这种方法是用一种非常简单(性能良好)的方法制作的,bepaly亚洲这取决于你能获得多少性能,视频的质量,等。

      1. 嗨,克里斯蒂安,谢谢你的回复,那么我们如何用我们的无人机和平衡架来实现呢?我们用的是Pixhawk。我们需要什么才能做到?

  9. ROI=帧[R:R+H,C:C+W]
    类型错误:“nonetype”对象没有属性“uu getitem”
    如何解决

    1. 据我所知,OpenCV许可证是一个3条款的BSD许可证。(http://opencv.org/license.html网站)我引用了文章中文档示例的链接(同时,如果你看到,代码实际上并不完全相同,你知道在不使用相同的API的情况下进行meanshift的另一种方法吗?,如果这违反了许可证,请告诉我,以便我可以删除相关代码。

  10. 你是如何将这些数字赋予你定义投资回报率的那一行的?我是说你是怎么得到这些数字的?

    如果你能告诉我这对我有很大帮助…
    谢谢!

  11. 嗨,克里斯,

    精彩的视频捕捉。我需要一点帮助。你是如何在程序中得到“upabove.mp4”的?而且,如果我想在地面上绕圈,我该如何改变参数c,r,w,h?

  12. 嘿…非常感谢你的代码!嗯,事实上,我的项目涉及使用无人机使用FPV检测人脸(例如用于检测通缉犯),你能告诉我是否有检测人脸的代码吗??

  13. 嗨,克里斯,

    我需要为无人机实现跟车算法。无人机接收汽车的GPS坐标。我将在PX4 FMU中实现它。我还想有一个良好的质量视频录制,同时跟踪。如何使用您的代码?

  14. 嘿,当讨论实时目标跟踪时,这个领域会包括计算机科学还是计算机工程?以及将无人机连接到GPS或计算机?如果可能的话,请给我发送关于这些主题的有用链接。

  15. 我想用覆盆子圆周率和Ardupilot开发同样的东西,我如何才能做到这一点,你能建议我一些有用的教程,作为一个无人机新手。

  16. 跟踪器似乎工作迅速可靠!
    我有一点担心,在这里,无人机与物体保持恒定的距离。所以,如果我们假设无人机朝着物体移动,对象的边界框是否跟踪移动,换言之,边界框是否会随着对象的靠近而放大?

    谢谢
    Saif

  17. 你好!

    我需要你的帮助。我想知道,我们如何使用无人机的实时饲料来处理该实时饲料来检测人。有没有可能?如果是的话,比怎样?我们能使用任何无人机在桌面上获取实时信息并根据需要进行处理吗?
    我在等你的答复。

    谢谢

  18. 你好,先生。佩龙
    我在看你的代码,我试图用A.R无人机2.0运行你的代码,但没有任何东西在流。我是不是该加些什么?

  19. 是否有可执行的donloadable。就像一个可安装的应用程序,因为我不是程序员。但我是一个无人机制造者,这很吸引人bepaly亚洲

  20. 设置ROI(感兴趣区域)。事实上,这是一个
    #我们跟踪的建筑物的矩形
    C、R、W、H=900650、70、70
    轨道窗口=(c,r,w,h)

    你能解释一下这些行吗

  21. 嗨,克里斯蒂安

    这对于我正在从事的一个基于无bepaly亚洲人机的非盈利反偷猎项目非常有用,如果你愿意讨论这一点,以及我们面对的汽车摄像机和无人机定位的障碍,那就太好了。

    谢谢

    罗伯特

  22. 嗨,我试着跑,但是,我保存此错误:

    蒙版=cv2.inrange(hsv_roi,数组((0)30、32)np.数组((180,255,255.))

    错误:/users/travis/build/skvark/opencv python/opencv/modules/core/src/arithm.cpp:1769:错误:(-209)下边界既不是与src大小相同、类型相同的数组,函数inrange中没有标量

留下评论

您的电子邮件地址将不会发布。

此网站使用Akismet来减少垃圾邮件。了解如何处理评论数据.