当前位置: 首页> 财经> 产业 > 搜索引擎seo外包_foxmail企业邮箱入口_百度seo学院_郑州网站推广排名公司

搜索引擎seo外包_foxmail企业邮箱入口_百度seo学院_郑州网站推广排名公司

时间:2025/7/9 11:09:15来源:https://blog.csdn.net/weixin_44845743/article/details/142788580 浏览次数:0次
搜索引擎seo外包_foxmail企业邮箱入口_百度seo学院_郑州网站推广排名公司

 1. 介绍

        本项目通过PCA9685舵机控制模块控制二自由度舵机云台固定在零点位置,然后通OpenCV检测到黄色小熊,找到中心位置并打印出中心位置的坐标,通过双色LED灯进行指示是否检测到目标,本项目为后面二维云台追踪物体和追踪人脸提供基础,云台追踪物体就必须知道物体的中心坐标和图像坐标的相对值,然后才能控制舵机云台进行水平方问(x方向)和垂直方向(y方向)进行修正。

2.OpenCV 定位物体的实时位置

        使用平移/倾斜舵机云台将对象放置在屏幕中间。对于运动的物体,我们必须实时知道对象的位置。所以必须知道对象中心的坐标。
        首先,之前已经学习过识别颜色,这里我们对其进行修改以打印所建立对象的x,y坐标。
        代码的“核心”是找到对象在其上画一个圆并在其中心画一个红点。
        在项目中搭建一个双色LED灯模块,该双色 LED 灯连接的是GPIO管脚(GPIO19)端口上,从而可以让双色LED 灯作为提示。

3.建立电路

树莓派T 型转接板双色 LED 模块
**G(S)
GPIO19GPIO19R(中间)
GNDGNDGND
树莓派T型转接板PCA9685 舵机驱动模块
SCLSCLSCL
SDASDASDA
3.3V3.3VVCC
5V5VV+
GNDGNDGND
舵机PCA9685 舵机驱动模块
水平方向舵机(pan)PWM0
倾斜舵机(tilt)PWM1

4. 源程序代码

# 载入必要的库文件
from __future__ import print_function
from gpiozero import LED
from adafruit_servokit import ServoKit
from imutils.video import VideoStream
import imutils
import time
import cv2
import oskit = ServoKit(channels=16)# 舵机调零
pan =  90
tilt = 60    # 往上仰,方便操作
# 初始化位置
kit.servo[0].angle=pan
kit.servo[1].angle=tilt# LED 初始化
redLed = LED(19)kit = ServoKit(channels=16)# 舵机调零
pan =  90
tilt = 60    # 往上仰,方便操作
# 初始化位置
kit.servo[0].angle=pan
kit.servo[1].angle=tilt# LED 初始化
redLed = LED(19)import libcamera
from picamera2 import Picamera2picamera = Picamera2()
config = picamera.create_preview_configuration(main={"format": 'RGB888', "size": (640, 480)},raw={"format": "SRGGB12", "size": (1920, 1080)})
config["transform"] = libcamera.Transform(hflip=0, vflip=1)
picamera.configure(config)
picamera.start()time.sleep(2.0)# 定义对象的上下边界
# 在HSV颜色空间中进行跟踪
colorLower = (3,100,100)
colorUpper = (23,255,255)# 创建显示控件
def bgr8_to_jpeg(value, quality=75):return bytes(cv2.imencode('.jpg', value)[1])import traitlets
import ipywidgets.widgets as widgets
from IPython.display import display
Frame = widgets.Image(format='jpeg', width=500, height=350)
display(Frame)# 线程函数操作库
import threading # 线程
import ctypes
import inspect# 线程结束代码
def _async_raise(tid, exctype):tid = ctypes.c_long(tid)if not inspect.isclass(exctype):exctype = type(exctype)res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))if res == 0:raise ValueError("invalid thread id")elif res != 1:ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)raise SystemError("PyThreadState_SetAsyncExc failed")def stop_thread(thread):_async_raise(thread.ident, SystemExit)# 关闭LED灯
redLed.off()
ledOn = Falsedef Video_display():global ledOn# 循环的帧从视频流while True:# 从视频流中抓取下一帧,调整大小# 帧,并将其转换为HSV颜色空间frame = picamera.capture_array()frame = imutils.resize(frame, width=500)frame = imutils.rotate(frame, angle=0)hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)# 为对象颜色构造一个遮罩,然后执行# 一系列的膨胀和侵蚀,以消除任何小的# blobs left in the maskmask = cv2.inRange(hsv, colorLower, colorUpper)mask = cv2.erode(mask, None, iterations=2)mask = cv2.dilate(mask, None, iterations=2)# 找到遮罩中的轮廓并初始化# (x, y) center of the objectcnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2]#cnts = cnts[0] if imutils.is_cv2() else cnts[1]center = None# 只有在找到至少一条轮廓线时才进行if len(cnts) > 0:# 在蒙版中找到最大的轮廓,然后使用# 它可以计算出最小的围圆# 重心c = max(cnts, key=cv2.contourArea)((x, y), radius) = cv2.minEnclosingCircle(c)M = cv2.moments(c)center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))# 只有当半径满足最小尺寸时才进行if radius > 10:# 在框架上画圆和质心,# 然后更新跟踪点的列表cv2.circle(frame, (int(x), int(y)), int(radius),(0, 255, 255), 2)cv2.circle(frame, center, 5, (0, 0, 255), -1)# 定位舵机在圆心mapObjectPosition(int(x), int(y))# 如果led还没有打开,打开ledif not ledOn:redLed.on()ledOn = True# 如果没有检测到球,关闭LED灯elif ledOn:redLed.off()ledOn = False# 向我们的屏幕显示框架Frame.value = bgr8_to_jpeg(frame) time.sleep(0.01)                # 不要CPU 占用太高# 做点清理工作print("\n [INFO] Exiting Program and cleanup stuff \n")# 开始线程
t = threading.Thread(target=Video_display)
t.setDaemon(True)
t.start()# 结束线程
stop_thread(t)

        运行程序,将在终端上看到(x,y)位置坐标,移动对象并观察坐标。将看到x从0到500(从左到右),y从0到350(从上到下)。在 JupyterLab 上实时打印出坐标信息,当识别到物体(黄色小熊)的时候,可以观察双色LBD灯的变化。

 

关键字:搜索引擎seo外包_foxmail企业邮箱入口_百度seo学院_郑州网站推广排名公司

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: