代码修改: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串口助手