有了目标检测 再结合 云台舵机 PID 算法可以实现简单的 目标跟踪:

注: PID 算法源码是机器人开发板厂家提供, 以下是简单原理介绍:

P - 线性控制量 , I - 积分参数 , D - 微分参数

自动控制系统的经典算法, 要让舵机到达目标位置Y ,   首要是要给系统一个线性作用力,控制量和移动距离体现为比例系数P。 当然这个作用力的结果会有偏差。

积分参数对于产生的偏差起到滞后的纠正作用。

微分参数通过偏差的变化速度提前预估未来的偏差以起到尽早纠正偏差的作用。能加快系统响应。

PID有严谨的理论推导,和标准的 控制算法, 对于给定的动力系统, P , I , D 参数要通过调较来获得。

可以看看百度里的介绍:

https://baike.baidu.com/item/PID%E7%AE%97%E6%B3%95/4660106?fr=aladdin

这里的目标跟踪是不严格的, 只是通过简单的检测定位算法 来控制镜头云台转动到目标的中心,起到简单的跟踪效果。 出现多个人手时会产生跟踪的叛变。。

jetbot hand detect and tracking

目标检测使用了 yolov5s 训练的 人脸 、带口罩人脸、人手  三种分类目标的模型。 并且转了 tensorRT 在 jetson nano 下运行,可以到 640x360@20fps需要的可以私信我。

代码实现:

#!/usr/bin/python3
# -*- coding:utf-8 -*-
import sys sys.path.append('/workspace/hugo_py')import cv2
import numpy as np
import time
from camera import JetCamera
import traceback
import TRTYolov5 as fd
import PID cap_w = 640
cap_h = 360
cap_fps = 30# 云台 PID 控制
target_valuex=2100
target_valuey=2048xservo_pid = PID.PositionalPID(1.9, 0.3, 0.35)
yservo_pid = PID.PositionalPID(1.5, 0.2, 0.3)# 云台控制总线
from servoserial import ServoSerial
servo_device = ServoSerial()def ptz_reset():global target_valuex, target_valueytarget_valuex = 2100target_valuey = 2048servo_device.Servo_serial_double_control(1, target_valuex, 2,  target_valuey)time.sleep(0.1)def main():global target_valuex, target_valuey, xservo_pid, yservo_pidptz_reset()cam = JetCamera(cap_w, cap_h, cap_fps)engine = fd.create('../build/yolov5s.engine')out_win = "foo"cv2.namedWindow(out_win, cv2.WINDOW_NORMAL)cv2.setWindowProperty(out_win, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)cam.open()cnt = 0sum_time = 0while True:try:ret, frame = cam.read()#print("camera read one frame ")if not ret:breakt0 = time.time()ret = fd.detect(engine, frame, 0.4)res = eval(ret)t1 = time.time()sum_time += t1 - t0cnt += 1if cnt % 150 == 0:print("frame cnt [%d]   detect delay = %.1fms" % (cnt, (sum_time) * 1000/ cnt ))sum_time = 0cnt = 0print(res)if   res['num_det'] > 0:for ret in res['objects']:cls_id, x1, y1, x2, y2 = retcolor = {0:(0, 0, 255), 1:(255, 0, 0), 2:(0, 255, 0)}[cls_id]cv2.rectangle(frame, (x1, y1), (x2, y2), color, 3)if 2 == cls_id:x_s, y_s, w_s, h_s = x1 * 300 / cap_w, y1 * 300 / cap_h, (x2 - x1) * 300 / cap_w , (y2 - y1 ) * 300 / cap_hxservo_pid.SystemOutput = x_s + w_s / 2xservo_pid.SetStepSignal(150)xservo_pid.SetInertiaTime(0.01, 0.006)target_valuex = int(2100 + xservo_pid.SystemOutput)yservo_pid.SystemOutput = y_s + h_s / 2yservo_pid.SetStepSignal(150)yservo_pid.SetInertiaTime(0.01, 0.006)target_valuey = int(2048 + yservo_pid.SystemOutput)servo_device.Servo_serial_double_control(1, target_valuex, 2 , target_valuey)#    r = ret[2]#    #print("ret = %s, %s" % (ret, r))#    #cv2.rectangle(frame, (int(r[0]), int(r[1])), (int(r[2]), int(r[3])), (255, 255, 0))cv2.imshow(out_win, frame)cv2.waitKey(1)except:traceback.print_exc()breakcam.close()if __name__ == '__main__':main()

jetbot12 之 人手目标跟踪(hand tracking)相关推荐

  1. 【专知荟萃18】目标跟踪Object Tracking知识资料全集(入门/进阶/论文/综述/视频/专家,附查看)

    原创: 专知内容组 专知 2017-11-18 点击上方"专知"关注获取专业AI知识! [导读]主题荟萃知识是专知的核心功能之一,为用户提供AI领域系统性的知识学习服务.主题荟萃为 ...

  2. 干货丨计算机视觉必读:目标跟踪、网络压缩、图像分类、人脸识别等

    文章来源:新智元 [导读]深度学习目前已成为发展最快.最令人兴奋的机器学习领域之一.本文以计算机视觉的重要概念为线索,介绍深度学习在计算机视觉任务中的应用,包括网络压缩.细粒度图像分类.看图说话.视觉 ...

  3. 目标跟踪算法五:MDNet: Learning Multi-Domain Convolutional Neural Networks for Visual Tracking

    目标跟踪算法五:MDNet: Learning Multi-Domain Convolutional Neural Networks for Visual Tracking 原文:https://zh ...

  4. 目标跟踪算法三:Modeling and Propagating CNNs in a Tree Structure for Visual Tracking (VOT2016冠军)

    目标跟踪算法三:Modeling and Propagating CNNs in a Tree Structure for Visual Tracking (VOT2016冠军) 文章链接:https ...

  5. Object Tracking using OpenCV (C++/Python)(使用OpenCV进行目标跟踪)

    本博客翻译搬运自https://www.learnopencv.com/object-tracking-using-opencv-cpp-python,用于初入目标跟踪的新手学习,转贴请注明! 使用O ...

  6. 目标跟踪算法综述:Correlation Filter for UAV-Based Aerial Tracking: A Review and Experimental Evaluation

    标题:相关过滤无人机空中跟踪技术综述与实验评估 作者:Changhong Fu, Geng Lu 链接:Correlation Filter for UAV-Based Aerial Tracking ...

  7. 【目标跟踪】Long-term Correlation Tracking 阅读笔记

    Long-term Correlation Tracking 论文地址: https://www.cv-foundation.org/openaccess/content_cvpr_2015/pape ...

  8. 目标跟踪笔记Understanding and Diagnosing Visual Tracking Systems

    Understanding and Diagnosing Visual Tracking Systems 原文链接:https://blog.csdn.net/u010515206/article/d ...

  9. UDT(【CVPR2019】Unsupervised Deep Tracking无监督目标跟踪)

    UDT是中科大.腾讯AI lab和上交的研究者提出的无监督目标跟踪算法.仔细阅读过这篇文章之后,写下一篇paper reading加深印象. 论文标题:Unsupervised Deep Tracki ...

最新文章

  1. 敲诈英伟达的竟然是一群未成年???
  2. IT兄弟连 JavaWeb教程 MVC设计模式
  3. centos7 搭建vsftpd服务并锁定用户的家目录
  4. 监控系统几种常见的光端机传输方案拓扑图
  5. CICD和K8S实战
  6. oss上传判断_OSS
  7. MFC中给对话框重绘边框
  8. docker基础1--下载制定docker镜像的两种方法:
  9. IFTT-意大利金融交易税
  10. couldn't open file: data/coco.names
  11. 实时渲染器不止lumion,Chaos Vantage你值得一试
  12. Winodws10 system进程占用磁盘100%
  13. Mybatis-Plus批量新增
  14. 支付宝快捷支付接入问题
  15. 也谈说话这件事--《好好说话》读后感
  16. 线性电路特性的研究与multisim仿真(附工程文件)
  17. npm无法加载文件,无法下载依赖包
  18. PAT (Basic Level) Practice (中文)1072 开学寄语(C语言)
  19. DCOS之监控技术选型(中)
  20. AutoCAD阵列中实现编号递增

热门文章

  1. IOC(一) - 初识
  2. Android Broadcast原理分析之registerReceiver(一)
  3. HCNR200/201线性光耦隔离检测电压电路
  4. 07、光耦隔离继电器实验
  5. 为什么选择 NetApp EF 系列阵列?
  6. python识图 web_Python图片识别——人工智能篇
  7. OKEx公链OKChain 下一个DeFi跑马场?
  8. 传输介质:同轴电缆、双绞线和光纤
  9. python threadpoolexecutor_Python线程池ThreadPoolExecutor实践
  10. ProE二次开发 Creo二次开发 MCADEx Tools 免费工具QQ群 156242985