Skip to content
This repository was archived by the owner on Jan 7, 2023. It is now read-only.

Commit 4c3521d

Browse files
author
Xiaocheng Dong
committed
Change for object_msgs updated
1 parent f948ba7 commit 4c3521d

File tree

2 files changed

+24
-37
lines changed

2 files changed

+24
-37
lines changed

Diff for: opencl_caffe/src/srv.cpp

+18-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616

1717
#include <string>
18+
#include <cv_bridge/cv_bridge.h>
1819
#include <pluginlib/class_list_macros.h>
1920
#include "opencl_caffe/detector_gpu.h"
2021
#include "opencl_caffe/srv.h"
@@ -43,12 +44,25 @@ Srv::Srv(ros::NodeHandle& n)
4344

4445
bool Srv::handleService(object_msgs::DetectObject::Request& req, object_msgs::DetectObject::Response& resp)
4546
{
46-
sensor_msgs::ImagePtr image = boost::make_shared<sensor_msgs::Image>(req.image);
47-
if (!detector_->runInference(image, resp.objects))
47+
for (auto image_path : req.image_paths)
4848
{
49-
ROS_ERROR("Detect object failed.");
50-
return false;
49+
cv_bridge::CvImage cv_image;
50+
sensor_msgs::Image ros_image;
51+
cv_image.image = cv::imread(image_path);
52+
cv_image.encoding = "bgr8";
53+
cv_image.toImageMsg(ros_image);
54+
55+
object_msgs::ObjectsInBoxes objects;
56+
57+
if (!detector_->runInference(boost::make_shared<sensor_msgs::Image>(ros_image), objects))
58+
{
59+
ROS_ERROR("Detect object failed.");
60+
return false;
61+
}
62+
63+
resp.objects.push_back(objects);
5164
}
65+
5266
return true;
5367
}
5468

Diff for: opencl_caffe/tests/unittest_srv.cpp

+6-33
Original file line numberDiff line numberDiff line change
@@ -26,46 +26,19 @@
2626
#include <ros/ros.h>
2727
#include <object_msgs/DetectObject.h>
2828

29-
std::string matType2Encoding(int mat_type)
30-
{
31-
switch (mat_type)
32-
{
33-
case CV_8UC1:
34-
return "mono8";
35-
case CV_8UC3:
36-
return "bgr8";
37-
case CV_16SC1:
38-
return "mono16";
39-
case CV_8UC4:
40-
return "rgba8";
41-
default:
42-
throw std::runtime_error("Unsupported encoding type");
43-
}
44-
}
45-
46-
void convertFrameToMessage(const cv::Mat* frame, size_t frame_id, sensor_msgs::Image* image_msg)
47-
{
48-
image_msg->height = frame->rows;
49-
image_msg->width = frame->cols;
50-
image_msg->encoding = matType2Encoding(frame->type());
51-
image_msg->step = static_cast<sensor_msgs::Image::_step_type>(frame->step);
52-
size_t size = frame->step * frame->rows;
53-
image_msg->data.resize(size);
54-
memcpy(&image_msg->data[0], frame->data, size);
55-
image_msg->header.frame_id = std::to_string(frame_id);
56-
}
57-
5829
TEST(UnitTestSrv, testSrv)
5930
{
6031
ros::NodeHandle n;
6132
ros::ServiceClient client = n.serviceClient<object_msgs::DetectObject>("opencl_caffe/opencl_caffe_srv/run_inference");
6233
object_msgs::DetectObject inf;
6334

64-
cv::Mat image = cv::imread(ros::package::getPath("opencl_caffe") + "/resources/cat.jpg");
65-
convertFrameToMessage(&image, 0, &inf.request.image);
66-
client.waitForExistence(ros::Duration(60));
35+
inf.request.image_paths.push_back(ros::package::getPath("opencl_caffe") + "/resources/cat.jpg");
36+
inf.request.image_paths.push_back(ros::package::getPath("opencl_caffe") + "/resources/cat.jpg");
37+
client.waitForExistence(ros::Duration(120));
6738
ASSERT_TRUE(client.call(inf));
68-
ASSERT_GE(inf.response.objects.objects_vector.size(), 1);
39+
ASSERT_TRUE(inf.response.objects.size() == 2);
40+
ASSERT_GE(inf.response.objects[0].objects_vector.size(), 1);
41+
ASSERT_GE(inf.response.objects[1].objects_vector.size(), 1);
6942
}
7043

7144
int main(int argc, char** argv)

0 commit comments

Comments
 (0)