-
Notifications
You must be signed in to change notification settings - Fork 0
/
run_yolo.py
53 lines (48 loc) · 2.76 KB
/
run_yolo.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import cv2
from ultralytics import YOLO
from std_msgs.msg import Float32MultiArray
class YOLODetector(Node):
def __init__(self):
super().__init__('yolo_detector')
self.subscription = self.create_subscription(
Image,
'/kinect_rgb',
self.listener_callback,
10)
self.detection_pub = self.create_publisher(Float32MultiArray, '/yolo/detections', 10)
self.bridge = CvBridge()
self.model = YOLO('assets/yolov8n.pt')
def listener_callback(self, msg):
frame = self.bridge.imgmsg_to_cv2(msg, 'bgr8')
results = self.model.track(frame, persist=True,classes=[49], verbose=False)
#change the class as needed, see the list below main block
for res in results:
annotated_frame = res.plot()
boxes = results[0].boxes.xyxy.cpu().tolist()
clss = results[0].boxes.cls.cpu().tolist()
detection_msg = Float32MultiArray()
detection_data = []
for box, cls in zip(boxes, clss):
detection_data.extend(box + [cls])
detection_msg.data = detection_data
self.detection_pub.publish(detection_msg)
# Display the annotated frame
cv2.imshow("YOLOv8 Tracking", annotated_frame)
cv2.waitKey(1)
def main(args=None):
rclpy.init(args=args)
yolo_detector = YOLODetector()
rclpy.spin(yolo_detector)
yolo_detector.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
#{0: 'person', 1: 'bicycle', 2: 'car', 3: 'motorcycle', 4: 'airplane', 5: 'bus', 6: 'train', 7: 'truck', 8: 'boat', 9: 'traffic light', 10: 'fire hydrant', 11: 'stop sign', 12: 'parking meter', 13: 'bench', 14: 'bird',
# 15: 'cat', 16: 'dog', 17: 'horse', 18: 'sheep', 19: 'cow', 20: 'elephant', 21: 'bear', 22: 'zebra', 23: 'giraffe', 24: 'backpack', 25: 'umbrella', 26: 'handbag', 27: 'tie', 28: 'suitcase', 29: 'frisbee', 30: 'skis',
# 31: 'snowboard', 32: 'sports ball', 33: 'kite', 34: 'baseball bat', 35: 'baseball glove', 36: 'skateboard', 37: 'surfboard', 38: 'tennis racket', 39: 'bottle', 40: 'wine glass', 41: 'cup', 42: 'fork', 43: 'knife', 44: 'spoon',
# 45: 'bowl', 46: 'banana', 47: 'apple', 48: 'sandwich', 49: 'orange', 50: 'broccoli', 51: 'carrot', 52: 'hot dog', 53: 'pizza', 54: 'donut', 55: 'cake', 56: 'chair', 57: 'couch', 58: 'potted plant', 59: 'bed',
# 60: 'dining table', 61: 'toilet', 62: 'tv', 63: 'laptop',64: 'mouse', 65: 'remote', 66: 'keyboard', 67: 'cell phone', 68: 'microwave', 69: 'oven', 70: 'toaster', 71: 'sink', 72: 'refrigerator', 73: 'book', 74: 'clock', 75: 'vase', 76: 'scissors', 77: 'teddy bear', 78: 'hair drier', 79: 'toothbrush'}