使用MaixPy进行数字识别并控制LED灯的项目

效果展示

led

介绍

在本项目中,我们将使用MaixPy平台,结合YOLOv5模型,来实现一个基于图像识别的控制系统。系统将通过摄像头捕捉图像,识别其中的数字,并根据识别结果控制一个外接的LED灯:当识别到数字“1”时点亮LED,识别到数字“2”时关闭LED。

准备工作

在这里插入图片描述

硬件准备

Maixcam开发板(带摄像头版本)
LED灯和电阻
杜邦线若干

软件准备

MaixPy固件
YOLOv5模型文件(model_127448.mud)
MaixPy IDE(用于代码编写和上传)

模型下载链接,下载后解压放在桌面上备用

https://maixhub.com/model/zoo/388

硬件连接

首先,我们需要将LED灯连接到MaixPy开发板上:

连接摄像头模块:

将摄像头模块插入开发板对应的接口。
连接LED灯:
将LED灯的正极(长脚)连接到GPIO A14引脚。
将LED灯的负极(短脚)连接到开发板的GND引脚。

然后我们打开MaixVision软件

将刚才解压得到的模型文件拷贝到开发板任意目录下(比如 /root/models)。
在这里插入图片描述

点击上传文件,将解压的文件放进去即可。

然后我们新建一个文件,复制这段代码,

detector = nn.YOLOv5(model="/root/models/model_127448.mud")#注意修改成自己的文件路径
from maix import camera, display, image, nn, app
from maix import gpio, pinmap, time

# 初始化YOLOv5模型
detector = nn.YOLOv5(model="/root/models/model_127448.mud")#注意修改成自己的文件路径

# 初始化摄像头,使用模型输入尺寸
cam = camera.Camera(detector.input_width(), detector.input_height(), detector.input_format())

# 初始化显示器
dis = display.Display()

# 初始化GPIO引脚,用于控制LED
pinmap.set_pin_function("A14", "GPIOA14")  # 假设LED连接在GPIO A14引脚上

# 创建GPIO实例
led = gpio.GPIO("GPIOA14", gpio.Mode.OUT)
led.value(0)  # 初始化时关闭LED

# 主循环
while not app.need_exit():
    # 读取摄像头图像
    img = cam.read()
    
    # 进行目标检测
    objs = detector.detect(img, conf_th=0.5, iou_th=0.45)
    
    # 标志变量,用于确定是否检测到数字1或2
    detected_1 = False
    detected_2 = False

    # 处理检测到的对象
    for obj in objs:
        # 绘制检测框
        img.draw_rect(obj.x, obj.y, obj.w, obj.h, color=image.COLOR_RED)
        
        # 获取检测结果标签和置信度
        label = detector.labels[obj.class_id].strip()  # 确保标签文件正确映射并去除多余空格
        score = obj.score
        
        # 打印检测结果
        print(f'Detected: {label} with score: {score}')

        # 根据检测结果控制LED
        if label == "1":
            detected_1 = True
        elif label == "2":
            detected_2 = True
        
        # 绘制检测结果文本
        msg = f'{label}: {score:.2f}'
        img.draw_string(obj.x, obj.y, msg, color=image.COLOR_RED)
    
    # 根据检测到的结果控制LED
    if detected_1:
        print("Turning LED ON")
        led.value(1)  # 点亮LED
    elif detected_2:
        print("Turning LED OFF")
        led.value(0)  # 关闭LED
    
    # 显示处理后的图像
    dis.show(img)

    # 延迟一段时间,以避免过于频繁的检测(根据需要调整)
    time.sleep_ms(100)

通过本项目,我们实现了一个简单的基于图像识别的控制系统,能够根据摄像头捕捉的图像内容控制外接的LED灯。希望这个教程对你有所帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悸尢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值