YOLOv8实现检测结果与单片机串口通信

代码修改:ultralytics/utils/plotting.py

102行 :box_label这个函数加入

ser = serial.Serial('COM6', 9600)

a = str(label)

ser.write(a.encode('utf-8'))

加入这三行代码就能将检测结果发送到串口。

def box_label(self, box, label='', color=(128, 128, 128), txt_color=(255, 255, 255)):
    """Add one xyxy box to image with label."""
    if isinstance(box, torch.Tensor):
        box = box.tolist()
    if self.pil or not is_ascii(label):
        self.draw.rectangle(box, width=self.lw, outline=color)  # box
        if label:
            w, h = self.font.getsize(label)  # text width, height
            outside = box[1] - h >= 0  # label fits outside box
            self.draw.rectangle(
                (box[0], box[1] - h if outside else box[1], box[0] + w + 1,
                 box[1] + 1 if outside else box[1] + h + 1),
                fill=color,
            )
            # self.draw.text((box[0], box[1]), label, fill=txt_color, font=self.font, anchor='ls')  # for PIL>8.0
            self.draw.text((box[0], box[1] - h if outside else box[1]), label, fill=txt_color, font=self.font)
    else:  # cv2
        p1, p2 = (int(box[0]), int(box[1])), (int(box[2]), int(box[3]))
        cv2.rectangle(self.im, p1, p2, color, thickness=self.lw, lineType=cv2.LINE_AA)
        if label:
            tf = max(self.lw - 1, 1)  # font thickness
            w, h = cv2.getTextSize(label, 0, fontScale=self.lw / 3, thickness=tf)[0]  # text width, height
            outside = p1[1] - h >= 3
            p2 = p1[0] + w, p1[1] - h - 3 if outside else p1[1] + h + 3
            cv2.rectangle(self.im, p1, p2, color, -1, cv2.LINE_AA)  # filled
            cv2.putText(self.im,
                        label, (p1[0], p1[1] - 2 if outside else p1[1] + h + 2),
                        0,
                        self.lw / 3,
                        txt_color,
                        thickness=tf,
                        lineType=cv2.LINE_AA)
    ser = serial.Serial('COM6', 9600)
    a = str(label)
    ser.write(a.encode('utf-8'))

1.​​​​​​​实时摄像头检测与串口通讯系统

1.1实时检测结果

 

1-1  调用摄像头检测结果与串口接收类型

图1-1通过加载训练好的垃圾四分类网络模型,调用摄像头完成对可回收垃圾的识别,然后将识别结果的标签通过COM6串口向COM5虚拟串口发送,并由串口助手SSCOM进行显示。以便于和后续将采集到的数据传送给单片机。

1.2虚拟串口的构建

虚拟串口一般用来调试PC上位机软件和串口的通讯,当需要开发一个串口的工具,如果使用单片机的串口来实际调试,至少还需要一个USB转串口,这样才能让单片机和电脑串口通讯,接着还需要在单片机上运行程序和串口相关的程序,以便知道数据传输的状态,这无疑加大的开发的难度。

而虚拟串口则不需要考虑这些问题,它可以在mcu中直接虚拟一个串口,这样就可以使用串口助手直接查看该串口数据的收发情况,简化了调试串口助手上位机流程。

1-2  VSPD串口

虚拟的串口需要成对创建,来指明他们的连接关系。这里选择COM5和COM6,点击 Add Pair创建一个串口对了,如上图所示,可以发现左侧Virtual ports(虚拟端口)多了COM5和COM6。

1.3使用串口助手通讯 

建立好虚拟串口以后,就可以使用他们来通讯了,首先打卡串口助手,然后分别选择虚拟出来的COM5和COM6,波特率设置为9600,此时,图4-5串口助手就能接收来自YOLOv8的垃圾检测结果。随后将数据输入单片机里,使相应机构完成动作,就能实现对垃圾的自动分类了。

图1-3  SSCOM串口助手

  • 34
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Anger、破晓

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

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

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

打赏作者

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

抵扣说明:

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

余额充值