OpenMV:20追踪其他物体的云台

2023-05-16

文章目录

  • 追踪人脸的云台
  • 追踪AprilTags的云台
  • 追踪圆形的云台

和追踪小车的原理是一样的

首先获得目标物体的x,y坐标,然后通过目标物体的xy坐标来控制我们云台的两个舵机的pid运动

无论追踪什么物体,都是通过物体的x,y坐标来控制云台的运动,对于云台的舵机来说,它只知道传给它的是x,y坐标,并不知道OpenMV传给它的是小球的xy坐标还是人脸的xy坐标

所以我们只需要修改main.py中的函数即可

追踪人脸的云台

搜索函数:objects = img.find_features(face_cascade,threshold ,scale)

记得要载入haar算子,并且寻找小球的函数find_blob()和寻找人脸的函数find_feartures()的返回值是不一样的!

import sensor, image, time

from pid import PID
from pyb import Servo

pan_servo=Servo(1)
tilt_servo=Servo(2)

pan_servo.calibration(500,2500,500)
tilt_servo.calibration(500,2500,500)

red_threshold  = (13, 49, 18, 61, 6, 47)

pan_pid = PID(p=0.07, i=0, imax=90) #脱机运行或者禁用图像传输,使用这个PID
tilt_pid = PID(p=0.05, i=0, imax=90) #脱机运行或者禁用图像传输,使用这个PID
#pan_pid = PID(p=0.1, i=0, imax=90)#在线调试使用这个PID
#tilt_pid = PID(p=0.1, i=0, imax=90)#在线调试使用这个PID

sensor.reset() # Initialize the camera sensor.
sensor.set_contrast(1)  # 插入:设置对比度
sensor.set_gainceiling(16)  # 插入:设置增益

# 由于云台上的OpenMV是反着装的,而检测人脸的haar算子是正着看的,所以就必须把照片倒过来才能检测成功
    # 我们不用那么麻烦:直接设置图像为镜像模式,是垂直方向的翻转即可
sensor.set_vflip(True)

sensor.set_pixformat(sensor.GRAYSCALE) # 人脸识别最好采用灰度图模式
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affect.
sensor.set_auto_whitebal(False) # turn this off.
clock = time.clock() # Tracks FPS.


# 加载人脸的haar算子
face_cascade = image.HaarCascade("frontalface" , stages = 25)

def find_max(blobs):
    max_size=0
    for blob in blobs:
        if blob[2]*blob[3] > max_size:
            max_blob=blob
            max_size = blob[2]*blob[3]
    return max_blob


while(True):
    clock.tick() # Track elapsed milliseconds between snapshots().
    img = sensor.snapshot() # 截取一张图片
    
    # 截取一张图片后,对我们的图像进行find_features()
    # objects是返回的人脸矩形框(x,y,w,h)
    objects = img.find_features(face_cascade,threshold = 0.75,scale = 1.35)
    
    
    if objects: # 如果识别到人脸——>找到视野中最大的人脸
        max_object = find_max(objects)
        pan_error = max_object[0] +  max_object[2]/2 - img.width()/2
        tilt_error =  max_object[1] +  max_object[3]/2  - img.height()/2

        print("pan_error: ", pan_error)

        img.draw_rectangle( max_object.rect()) # rect
        img.draw_cross(int( max_object[0] +  max_object[2]/2),int( max_object[1] +  max_object[3]/2)) # cx, cy

        pan_output=pan_pid.get_pid(pan_error,1)/2
        tilt_output=tilt_pid.get_pid(tilt_error,1)
        print("pan_output",pan_output)
        pan_servo.angle(pan_servo.angle()+pan_output)
        tilt_servo.angle(tilt_servo.angle()-tilt_output)


追踪AprilTags的云台

搜索函数: objects = img.find_apriltags()

import sensor, image, time

from pid import PID
from pyb import Servo

pan_servo=Servo(1)
tilt_servo=Servo(2)

pan_servo.calibration(500,2500,500)
tilt_servo.calibration(500,2500,500)

red_threshold  = (13, 49, 18, 61, 6, 47)

pan_pid = PID(p=0.07, i=0, imax=90) #脱机运行或者禁用图像传输,使用这个PID
tilt_pid = PID(p=0.05, i=0, imax=90) #脱机运行或者禁用图像传输,使用这个PID
#pan_pid = PID(p=0.1, i=0, imax=90)#在线调试使用这个PID
#tilt_pid = PID(p=0.1, i=0, imax=90)#在线调试使用这个PID

sensor.reset() # Initialize the camera sensor.
sensor.set_contrast(1)  # 插入:设置对比度
sensor.set_gainceiling(16)  # 插入:设置增益

sensor.set_pixformat(sensor.GRAYSCALE) # 人脸识别最好采用灰度图模式
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affect.
sensor.set_auto_whitebal(False) # turn this off.
clock = time.clock() # Tracks FPS.


# 加载人脸的haar算子
face_cascade = image.HaarCascade("frontalface" , stages = 25)

def find_max(blobs):
    max_size=0
    for blob in blobs:
        if blob[2]*blob[3] > max_size:
            max_blob=blob
            max_size = blob[2]*blob[3]
    return max_blob


while(True):
    clock.tick() # Track elapsed milliseconds between snapshots().
    img = sensor.snapshot() # 截取一张图片
    
    # 截取一张图片后,对我们的图像进行find_apriltags()
    # 函数的返回值是一个AprilTag的对象列表
    objects = img.find_apriltags()
    
    
    if objects: # 如果识别到人脸——>找到视野中最大的人脸
        max_object = find_max(objects)
        pan_error = max_object[0] +  max_object[2]/2 - img.width()/2
        tilt_error =  max_object[1] +  max_object[3]/2  - img.height()/2

        print("pan_error: ", pan_error)

        img.draw_rectangle( max_object.rect()) # rect
        img.draw_cross(int( max_object[0] +  max_object[2]/2),int( max_object[1] +  max_object[3]/2)) # cx, cy

        pan_output=pan_pid.get_pid(pan_error,1)/2
        tilt_output=tilt_pid.get_pid(tilt_error,1)
        print("pan_output",pan_output)
        pan_servo.angle(pan_servo.angle()+pan_output)
        tilt_servo.angle(tilt_servo.angle()-tilt_output)


追踪圆形的云台

搜索函数:objects = img.find_circles()

注意要用到畸变矫正,加在我们的sensor.snapshot()之后img = sensor.snapshot().lens_corr(1,8)

对于圆来说,比较大小就不用if blob[2]*blob[3] > max_size:了,而是直接比较半径cirle[2]即可

import sensor, image, time

from pid import PID
from pyb import Servo

pan_servo=Servo(1)
tilt_servo=Servo(2)

pan_servo.calibration(500,2500,500)
tilt_servo.calibration(500,2500,500)

red_threshold  = (13, 49, 18, 61, 6, 47)

pan_pid = PID(p=0.07, i=0, imax=90) #脱机运行或者禁用图像传输,使用这个PID
tilt_pid = PID(p=0.05, i=0, imax=90) #脱机运行或者禁用图像传输,使用这个PID
#pan_pid = PID(p=0.1, i=0, imax=90)#在线调试使用这个PID
#tilt_pid = PID(p=0.1, i=0, imax=90)#在线调试使用这个PID

sensor.reset() # Initialize the camera sensor.
sensor.set_contrast(1)  # 插入:设置对比度
sensor.set_gainceiling(16)  # 插入:设置增益

sensor.set_pixformat(sensor.GRAYSCALE) # 人脸识别最好采用灰度图模式
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affect.
sensor.set_auto_whitebal(False) # turn this off.
clock = time.clock() # Tracks FPS.




def find_max(blobs):
    max_size=0
    for blob in blobs:
        if blob[2]*blob[2] > max_size:
            max_blob=blob
            max_size = blob[2]*blob[2]
    return max_blob


while(True):
    clock.tick() # Track elapsed milliseconds between snapshots().
    img = sensor.snapshot().lens_corr(1,8)  # 截取一张图片的同时进行畸变矫正 
    
    # 截取一张图片后,对我们的图像进行find_apriltags()
    # 函数的返回值是一个圆的圆心在摄像头里的xy坐标以及半径(x,y,r)
    objects = img.find_circles(threshold = 3500,x_margin = 10,y_margin = 10,r_margin = 10,r_min = 2,r_max = 100,r_step = 2)
    
    
    if objects: # 如果识别到人脸——>找到视野中最大的人脸
        max_object = find_max(objects)
        pan_error = max_object[0]  - img.width()/2    # 圆心的x坐标即为object[0]
        tilt_error =  max_object[1]   - img.height()/2    # 圆心的y坐标即为object[1]

        print("pan_error: ", pan_error)

        img.draw_rectangle( max_object.rect()) # rect
        # 直接改为画圆而非矩形
        img.draw_circle(max_object[0],max_object[1],max_object[2],color = (255,0,0))
        img.draw_cross(int(max_object[0]),int(max_object[1]) # 在圆形(x,y)处画十字

        pan_output=pan_pid.get_pid(pan_error,1)/2
        tilt_output=tilt_pid.get_pid(tilt_error,1)
        print("pan_output",pan_output)
        pan_servo.angle(pan_servo.angle()+pan_output)
        tilt_servo.angle(tilt_servo.angle()-tilt_output)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenMV:20追踪其他物体的云台 的相关文章

  • OpenMV巡线

    你向别人介绍openmv就说哦这是一个嵌入式的机器视觉模块 一个摄像头模块带有主控 xff0c 可以用Python编程 用openMV巡线 借助的是线性回归 xff0c 线性回归的意思就是找出一条直线嘛 xff0c 用最小二乘法 xff0c
  • Openmv+STM32F103C8T6视觉巡线小车

    Openmv巡线 机器视觉巡线处理是参考openmv官方代码 Openmv官网源代码 xff1a book openmv cc project follow lines html 根据官网视频及教程将源码注入openmv中 小车巡的是黑线
  • openmv中模块解析

    模块解析 1 sensor摄像头模块 xff1a 包含了感光芯片与图像预处理的各项操作 sensor reset 重置并初始化OpenMV sensor set pixformat sensor RGB565 选择颜色空间与像素格式RGB5
  • 2021电赛F题之openmv巡线(附代码)

    效果展示 xff1a 出错解决方法 openmv数字识别源代码 gitee 通过使用不同阈值的方法可以得到当前区域中什么区域有红线 xff0c 对于电控而言作用类似于红外对管 xff0c 之后电控通过逻辑判断如何运动 xff0c 这就是我们
  • pixhawk无人机结合openmv之精准降落

    pixhawk飞控与openmv之精准降落 一 精准降落概述二 精准降落流程三 代码逻辑流程四 总结反思改进 一 精准降落概述 1 概述 无人机在生产生活中逐渐获得更大的用途 xff0c 京东的物流无人机有望解决用户快递最后一分钟的问题 x
  • OpenMV:20追踪其他物体的云台

    文章目录 追踪人脸的云台追踪AprilTags的云台追踪圆形的云台 和追踪小车的原理是一样的 首先获得目标物体的x y坐标 xff0c 然后通过目标物体的xy坐标来控制我们云台的两个舵机的pid运动 无论追踪什么物体 xff0c 都是通过物
  • pid摄像头循迹(opencv和openmv)

    pid摄像头循迹 xff08 opencv和openmv xff09 用摄像头进行循迹的方法参考硬件选型方面软件思路一 图像预处理 xff1a 代码部分二 线性拟合opencv线性拟合 xff1a 实际在树莓派上运行时 xff0c 帧率也比
  • Openmv色块追踪

    Openmv 拿到后第一次进行开发 xff08 颜色追踪 xff09 Openmv本身是具有很多的内置函数的 xff0c 基本都是别人给我们写好了 xff0c 需要我们自己去调用 xff0c 并给函数传递参数以实现我们需要的效果 但是很多初
  • Openmv学习day2——AprilTag

    仅作为个人学习 xff0c 原文地址 xff1a 链接 link AprilTag的简介 AprilTag是一个视觉基准系统 xff0c 可用于各种任务 xff0c 包括AR xff0c 机器人和相机校准 这个tag可以直接用打印机打印出来
  • 【毕业设计】基于STM32及OpenMV的云台追踪装置

    目录 修改记录1 摘 要2 整体功能分析3 硬件选型3 1 OpenMV4 Cam H73 2 STM32F103ZET63 3 DS3120舵机3 4 LED补光板3 5 供电及稳压3 6 硬件连接 4 软件功能实现4 1 OpenMV部
  • 通过openmv生成apriltag标签

    Apriltag官网提供的tag图片分辨率很低 xff0c 完全无法使用 xff0c 通过openmv生成apriltag标签 生成方法如下 xff1a openmv IDE的下载与安装 openmv官方提供了各种版本的IDE xff0c
  • 【串口通信】K210与STM32串口通信、K210与OpenMV串口通信

    串口通信 K210与STM32串口通信 K210与OpenMV串口通信 串口通信前言为何需要串口通信 K210如何进行串口通信K210串口配置K210串口发送相关定义K210串口发送测试K210串口接收相关定义K210串口接收测试 STM3
  • OpenMV H7也就是OpenMV4来啦 最新

    17年开始做过了四个版本的openmv 可谓是电赛好帮手 开发了两年的openmv xff0c 我的目的就是让openmv变得便宜 目前官方的第四代openmv还在众筹中 xff1a https www kickstarter com pr
  • OpenMV:19OpenMV4 Plus训练神经网络进行口罩识别

    文章目录 1 采集2 连接3 训练复制API KEY上传照片模型创建生成神经网络训练神经网络测试神经网络备份保存 4 下载代码分析 注意 xff1a 只有 OpenMV4 Plus可以自己训练神经网络 xff0c 其他版本的性能不够 本节讲
  • OpenMV与Arduino通信—串口

    文章目录 96 Arduino 96 的串口函数接收函数 96 Serial read 96 检测串口 96 Serial available 96 串口通信例程 96 OpenMV 96 代码 96 Arduino 96 代码 所有要进行
  • OpenMV色块寻找

    OpenMV入门 xff0c 从入门到入坟 gt lt 此文章大部分内容取自OpenMV官方中文参考文档 详情看OpenMV官方中文参考文档 文章目录 一 sensor snapshot 拍一张照片二 image find blogs 查找
  • OpenMv测距(Apriltag)

    利用OpenMv测离Apriltag的距离 xff08 其他色块啥的算法都差不多 xff0c 主要是Apriltag精确一些 xff09 span class token comment 本次利用OpenMv单目测距Apriltag离摄像头
  • OpenMV4开发笔记4-舵机控制

    OpenMV4的舵机控制脚有3个 P7 P8 P9 即可以控制3个舵机 Servo 1 gt P7 PD12 Servo 2 gt P8 PD13 OpenMV3 M7 OpenMV4 H7上增加 Servo 3 gt P9 PD14 注意
  • 基于STM32F407的人脸追踪

    整体概述 本项目采用两个舵机构成的二自由度的电动云台作为执行机构 控制摄像头在水平和垂直方向的运动 舵机带动摄像头进行二维平面的运动的同时 摄像头进行实时人脸检测 一旦检测到人脸 则进行人脸跟踪 摄像头采用星瞳openMV H7 主控采用的
  • 2021全国电设(F题)openmv的图像识别之数字识别

    基于openmv的图像识别 通过参加全国电子设计大赛F题总结出openmv4的数字识别 其它版本暂时没试过 欢迎交流 openmv简介 OpenMV是一个开源 低成本 功能强大的机器视觉模块 以STM32F427CPU为核心 集成了OV77

随机推荐

  • SpringMVC获取请求参数

    CSDN话题挑战赛第1期 活动详情地址 https marketing csdn net p bb5081d88a77db8d6ef45bb7b6ef3d7f 大家好 我是郭尕 SpringMVC获取请求参数 一 前言 二 通过控制器方法的
  • 搞定Redis(三)消息的发布、订阅和新增数据类型

    一 Redis的发布和订阅 1 什么是发布和订阅 Redis 发布订阅 pub sub 是一种消息通信模式 xff1a 发送者 pub 发送消息 xff0c 订阅者 sub 接收消息 Redis 客户端可以订阅任意数量的频道 2 Redis
  • 智能控制——模糊数学及控制

    一 模糊控制概况 模糊逻辑控制 Fuzzy Logic Control 简称模糊控制 Fuzzy Control xff0c 是以模糊集合论 模糊语言变量和模糊逻辑推理为基础的一种计算机数字控制技术 1965年 xff0c 美国的L A Z
  • CMakeList 将CPP代码编译成可执行文件示例

    一 本次编译 CMakeList中用到的语法详解 1 设置cmake 版本 xff1a cmake minimum required VERSION 3 5 2 set the project name project Agent Test
  • STM32 IO口模拟串口

    红叶何时落水 什么是串口呢 xff1f 简单来说它是一种通信协议 xff1b 串口是一个泛称 xff0c UART TTL RS232 RS485都遵循类似的通信时序协议 xff0c 因此都被通称为串口 而对于单片机来说 xff0c 串口通
  • python学习:最适合初学者的8本Python书籍

    Python是最友好的编程语言之一 xff0c 也因此成为初学者的首选 xff0c 为了帮助你更好更快的上手Python xff0c 并学会使用Python进行编程 xff0c 本文我们为初学者分享了最好的Python书籍 希望能够对你有所
  • 最适合Python入门到大牛必看的7本书籍,一定要收藏!

    Python零基础应该阅读哪些书籍 xff1f 我推荐这三本书 1 Python学习手册 xff08 第4版 xff09 以计算机科学家一样的思维方式来理解Python语言编程 xff0c 实用的学习指南 xff0c 适合没有Python编
  • 电脑可以上网,但是仍然显示无网络连接

    不知道是否因为win11的正式发布 xff0c 催促着win10的更新 xff0c 而在更新中对于部分用户的电脑产生了bug xff1a 目前被证实为win10 1607版本后 xff0c URL变动引起的 在我们使用WLAN连接方式时 x
  • 阿里云云平台,物联网可视化web界面简单教程

    目前市面上的云平台 xff0c 多以华为 xff0c 阿里 xff0c 中国移动为主 但是了解一个 xff0c 便可满足需求了 1 首先 xff0c 我们要创建一个属于自己的账号 xff0c 然后尽可能的领取各种限免套餐 2 打开产品这一栏
  • LCD屏幕 ~ 字模提取工具和图片转码工具

    目录 字模提取 工具资源下载 xff1a 图片转码 工具资源下载 xff1a 字模提取 工具资源下载 xff1a 链接 xff1a https pan baidu com s 1BF8lJLmM V vWrl2F6Cd7Q pwd 61 m
  • (练习篇)萤火虫esp32与小爱音响---实现笔记本电脑唤醒

    目录 初步工作 xff1a 进入正题 xff1a 初步工作 xff1a xff08 已使用过ESP32的同志们 xff0c 可以忽略这一步 xff09 首先下载arduinoIDE Software Arduino 我安装的是1 8 18直
  • Python:列表有趣挑战--斗地主扑克牌发牌

    目录 游戏描述 xff1a 题目分析与关键点 xff1a 代码参考 xff1a 游戏描述 xff1a 本题限定用以下方法打乱序列中的元素 random shuffle 几个人用一副扑克牌玩游戏 xff0c 游戏过程通常有洗牌 发牌 理牌等动
  • Python: 常用指令归纳(持续更新中)

    目录 复合赋值运算符 位运算符的运算规则 常用的转义符 常用字符串格式转换控制符 字符串处理函数 序列类型的常用操作符 复合赋值运算符 复合赋值运算符 运 算 符功 能 描 述 示 例 x 61 5 xff0c y 61 3 43 61 加
  • 无线远距离WiFi模块图传技术,无人机智能安防预警应用

    随着社会经济的快速发展 xff0c 交通工具日渐增多 xff0c 人员 车辆流动性大 xff0c 警车 警员在执法过程中对移动目标 突发场合的信息收集与现场预警 xff0c 当场发现嫌疑目标并进行抓捕已成为公安警务工作的紧迫需求 从警务执法
  • yolov5输出检测框的中心位置,框的长宽,框的位置,以及输出对应标签格式的输出

    yolov5输出检测框的中心位置 xff0c 框的长宽 xff0c 框的位置 xff0c 以及输出对应标签格式的输出 模型读取每个图片 xff0c 并将上述的信息依此输出到同名的txt文件中保存 xff0c 具体需要哪些坐标可以自己选 更改
  • 无人机远距离WiFi图传应用,CV5200无线WiFi模组,远程实时通信传输方案

    无线图传在实际应用中越来越受到追捧 xff0c 无线图传免布线 移动方便 安装简单 xff0c 大大节约了材料和人工成本 无线图传能够在远距离范围内实时视频无线传输 xff0c 满足了不同距离需要的需求 xff0c 也覆盖了不同规模的企业
  • antd表单赋值,回显表格数据

    使用 antd 做表格回显数据时 xff0c 会看到文档有写 xff1a 所以我们可以 1 定义hooks const form 61 Form useForm 2 在触发事件中使用 xff0c 以打开模态框赋值为例 const showM
  • jetson nano jacksdk4.6中cuda,cudnn,tensorrt的版本查看

    JetPack 4 6上已经预装了CUDA cuDNN and TensorRT VPI 1 1 可以直接从官网下载 xff08 jetson sdk xff09 使用拷贝到SD卡 JetPack 4 6 is the latest pro
  • 无人船毕设进展

    智能无人测量船设计进展 xff08 硬件系统 xff09 目录前言课题目的研究现状控制系统 xff08 Pixhawk xff09 动力系统供电系统通讯系统传感器系统pixhawk2 4 8接口分析控制系统详细分析技术路线参考文献 目录 前
  • OpenMV:20追踪其他物体的云台

    文章目录 追踪人脸的云台追踪AprilTags的云台追踪圆形的云台 和追踪小车的原理是一样的 首先获得目标物体的x y坐标 xff0c 然后通过目标物体的xy坐标来控制我们云台的两个舵机的pid运动 无论追踪什么物体 xff0c 都是通过物