Skip to content

Commit

Permalink
Added load_parameters() function and updated logger
Browse files Browse the repository at this point in the history
  • Loading branch information
jasmeet0915 committed Feb 26, 2024
1 parent 83b7e77 commit d2f65ae
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 30 deletions.
7 changes: 3 additions & 4 deletions object_detection/config/params.yaml
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
object_detection:
ros__parameters:
input_img_topic: /kitti/camera/color/left/image_raw
input_img_topic: color/image_raw
output_bb_topic: object_detection/img_bb
output_img_topic: object_detection/img
publish_output_img: 1
model_params:
detector_type: YOLOv5
model_dir_path: /root/percep_ws/models/yolov5
weight_file_name: yolov5.onnx
confidence_threshold : 0.5
show_fps : 1
confidence_threshold: 0.5
show_fps: 1
66 changes: 40 additions & 26 deletions object_detection/object_detection/ObjectDetection.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,49 +32,63 @@ class ObjectDetection(Node):
def __init__(self):
super().__init__('object_detection')

# create an empty list that will hold the names of all available detector
# Create an empty list that will hold the names of all available detector
self.available_detectors = []

# Create a logger instance
self.logger = super().get_logger()

# Declare parameters with default values
self.declare_parameters(
namespace='',
parameters=[
('input_img_topic', ''),
('output_bb_topic', ''),
('output_img_topic', ''),
('model_params.detector_type', ''),
('model_params.model_dir_path', ''),
('model_params.weight_file_name', ''),
('model_params.confidence_threshold', 0.7),
('input_img_topic', 'color/image_raw'),
('output_bb_topic', 'object_detection/img_bb'),
('output_img_topic', 'object_detection/img'),
('model_params.detector_type', 'YOLOv5'),
('model_params.model_dir_path', '/root/percep_ws/models/yolov5'),
('model_params.weight_file_name', 'yolov5.onnx'),
('model_params.confidence_threshold', 0.5),
('model_params.show_fps', 1),
]
)

# node params
self.input_img_topic = self.get_parameter('input_img_topic').value
self.output_bb_topic = self.get_parameter('output_bb_topic').value
self.output_img_topic = self.get_parameter('output_img_topic').value

# model params
self.detector_type = self.get_parameter('model_params.detector_type').value
self.model_dir_path = self.get_parameter('model_params.model_dir_path').value
self.weight_file_name = self.get_parameter('model_params.weight_file_name').value
self.confidence_threshold = self.get_parameter('model_params.confidence_threshold').value
self.show_fps = self.get_parameter('model_params.show_fps').value
# Load parameters set by user
self.load_parameters()

# Fill available_detectors with the detectors from Detectors directory
self.discover_detectors()
# Load the detector specified through the parameters
self.load_detector()

# Create a logger instance
self.logger = self.get_logger()

self.img_pub = self.create_publisher(Image, self.output_img_topic, 10)
self.bb_pub = None
self.img_sub = self.create_subscription(Image, self.input_img_topic, self.detection_cb, 10)

self.bridge = CvBridge()

self.logger.info("[OBJECT DETECTION] Initialized Object Detection Node")

def load_parameters(self):
# Node params
self.input_img_topic = self.get_parameter('input_img_topic').value
self.output_bb_topic = self.get_parameter('output_bb_topic').value
self.output_img_topic = self.get_parameter('output_img_topic').value

self.logger.info("[OBJECT DETECTION] Input image topic set to {}".format(self.input_img_topic))
self.logger.info("[OBJECT DETECTION] Publishig output image on topic {}".format(self.output_img_topic) +
" and bounding box data on topic {}".format(self.output_bb_topic))

# Model params
self.detector_type = self.get_parameter('model_params.detector_type').value
self.model_dir_path = self.get_parameter('model_params.model_dir_path').value
self.weight_file_name = self.get_parameter('model_params.weight_file_name').value
self.confidence_threshold = self.get_parameter('model_params.confidence_threshold').value
self.show_fps = self.get_parameter('model_params.show_fps').value

self.logger.info("[OBJECT DETECTION] Detector type set to {} and".format(self.detector_type) +
" using weigth file from {}".format(self.model_dir_path + self.weight_file_name))
self.logger.info("[OBJECT DETECTION] Confidence threshold for detection set to: {}".format(self.confidence_threshold))

def discover_detectors(self):
curr_dir = os.path.dirname(__file__)
dir_contents = os.listdir(curr_dir + "/Detectors")
Expand All @@ -88,7 +102,7 @@ def discover_detectors(self):
def load_detector(self):
# Raise an exception if specified detector was not found
if self.detector_type not in self.available_detectors:
self.logger.error("{} Detector was set in parameters but was not found. Check the " +
self.logger.error("[OBJECT DETECTION] {} Detector was set in parameters but was not found. Check the " +
"Detectors directory for list of available detectors".format(self.detector_type))
raise ModuleNotFoundError(self.detector_type + " Detector specified in config was not found. " +
"Check the Detectors dir for available detectors.")
Expand All @@ -101,15 +115,15 @@ def load_detector(self):
self.detector.build_model(self.model_dir_path, self.weight_file_name)
self.detector.load_classes(self.model_dir_path)

self.logger.info("Your detector: {} has been loaded!".format(self.detector_type))
self.logger.info("[OBJECT DETECTION] Your detector: {} has been loaded!".format(self.detector_type))

def detection_cb(self, img_msg):
cv_image = self.bridge.imgmsg_to_cv2(img_msg, "bgr8")

predictions = self.detector.get_predictions(cv_image=cv_image)

if predictions is None:
self.logger.warning("Image input from topic: {} is empty".format(self.input_img_topic), throttle_duration_sec=1)
self.logger.warning("[OBJECT DETECTION] Image input from topic: {} is empty".format(self.input_img_topic), throttle_duration_sec=1)
else:
for prediction in predictions:
confidence = prediction['confidence']
Expand Down

0 comments on commit d2f65ae

Please sign in to comment.