YoloObjectDetector.hpp
Go to the documentation of this file.
1 /*
2  * YoloObjectDetector.h
3  *
4  * Created on: Dec 19, 2016
5  * Author: Marko Bjelonic
6  * Institute: ETH Zurich, Robotic Systems Lab
7  */
8 
9 #pragma once
10 
11 // c++
12 #include <pthread.h>
13 #include <chrono>
14 #include <cmath>
15 #include <iostream>
16 #include <string>
17 #include <thread>
18 #include <vector>
19 
20 // ROS
22 #include <geometry_msgs/Point.h>
24 #include <ros/ros.h>
25 #include <sensor_msgs/Image.h>
27 #include <std_msgs/Header.h>
28 
29 // OpenCv
30 #include <cv_bridge/cv_bridge.h>
31 #include <opencv2/highgui/highgui.hpp>
32 #include <opencv2/imgproc/imgproc.hpp>
33 #include <opencv2/objdetect/objdetect.hpp>
34 
35 // darknet_ros_msgs
36 #include <darknet_ros_msgs/BoundingBox.h>
37 #include <darknet_ros_msgs/BoundingBoxes.h>
38 #include <darknet_ros_msgs/CheckForObjectsAction.h>
39 #include <darknet_ros_msgs/ObjectCount.h>
40 
41 // Darknet.
42 #ifdef GPU
43 #include "cublas_v2.h"
44 #include "cuda_runtime.h"
45 #include "curand.h"
46 #endif
47 
48 extern "C" {
49 #include <sys/time.h>
50 #include "box.h"
51 #include "cost_layer.h"
52 #include "detection_layer.h"
53 #include "network.h"
54 #include "parser.h"
55 #include "region_layer.h"
56 #include "utils.h"
57 }
58 
59 // Image interface.
61 
62 extern "C" cv::Mat image_to_mat(image im);
63 extern "C" image mat_to_image(cv::Mat m);
64 extern "C" int show_image(image p, const char* name, int ms);
65 
66 namespace darknet_ros {
67 
69 typedef struct {
70  float x, y, w, h, prob;
71  int num, Class;
72 } RosBox_;
73 
74 typedef struct {
75  cv::Mat image;
76  std_msgs::Header header;
78 
80  public:
85 
90 
91  private:
96  bool readParameters();
97 
101  void init();
102 
107  void cameraCallback(const sensor_msgs::ImageConstPtr& msg);
108 
113 
118 
123  bool isCheckingForObjects() const;
124 
129  bool publishDetectionImage(const cv::Mat& detectionImage);
130 
133  using CheckForObjectsActionServerPtr = std::shared_ptr<CheckForObjectsActionServer>;
134 
137 
140  std::vector<std::string> classLabels_;
141 
144 
147 
152 
154  std::vector<std::vector<RosBox_> > rosBoxes_;
155  std::vector<int> rosBoxCounter_;
156  darknet_ros_msgs::BoundingBoxes boundingBoxesResults_;
157 
161 
164 
165  // Yolo running on thread.
166  std::thread yoloThread_;
167 
168  // Darknet.
169  char** demoNames_;
170  image** demoAlphabet_;
172 
173  network* net_;
174  std_msgs::Header headerBuff_[3];
175  image buff_[3];
176  image buffLetter_[3];
177  int buffId_[3];
178  int buffIndex_ = 0;
179  float fps_ = 0;
180  float demoThresh_ = 0;
181  float demoHier_ = .5;
182  int running_ = 0;
183  cv::Mat disp_;
184  int demoDelay_ = 0;
185  int demoFrame_ = 3;
186  float** predictions_;
187  int demoIndex_ = 0;
188  int demoDone_ = 0;
189  float* lastAvg2_;
190  float* lastAvg_;
191  float* avg_;
192  int demoTotal_ = 0;
193  double demoTime_;
194 
200  char* demoPrefix_;
201 
202  std_msgs::Header imageHeader_;
203  cv::Mat camImageCopy_;
204  boost::shared_mutex mutexImageCallback_;
205 
206  bool imageStatus_ = false;
207  boost::shared_mutex mutexImageStatus_;
208 
209  bool isNodeRunning_ = true;
210  boost::shared_mutex mutexNodeStatus_;
211 
213  boost::shared_mutex mutexActionStatus_;
214 
215  // double getWallTime();
216 
217  int sizeNetwork(network* net);
218 
219  void rememberNetwork(network* net);
220 
221  detection* avgPredictions(network* net, int* nboxes);
222 
223  void* detectInThread();
224 
225  void* fetchInThread();
226 
227  void* displayInThread(void* ptr);
228 
229  void* displayLoop(void* ptr);
230 
231  void* detectLoop(void* ptr);
232 
233  void setupNetwork(char* cfgfile, char* weightfile, char* datafile, float thresh, char** names, int classes, int delay, char* prefix,
234  int avg_frames, float hier, int w, int h, int frames, int fullscreen);
235 
236  void yolo();
237 
239 
240  bool getImageStatus(void);
241 
242  bool isNodeRunning(void);
243 
244  void* publishInThread();
245 };
246 
247 } /* namespace darknet_ros*/
darknet_ros::YoloObjectDetector::frameWidth_
int frameWidth_
Camera related parameters.
Definition: YoloObjectDetector.hpp:159
darknet_ros::YoloObjectDetector::isNodeRunning
bool isNodeRunning(void)
Definition: YoloObjectDetector.cpp:533
darknet_ros::YoloObjectDetector::actionId_
int actionId_
Definition: YoloObjectDetector.hpp:212
darknet_ros::YoloObjectDetector::net_
network * net_
Definition: YoloObjectDetector.hpp:173
darknet_ros::YoloObjectDetector::rememberNetwork
void rememberNetwork(network *net)
Definition: YoloObjectDetector.cpp:274
darknet_ros::YoloObjectDetector::getImageStatus
bool getImageStatus(void)
Definition: YoloObjectDetector.cpp:528
darknet_ros::RosBox_::y
float y
Definition: YoloObjectDetector.hpp:70
ros::Publisher
darknet_ros::YoloObjectDetector::buffLetter_
image buffLetter_[3]
Definition: YoloObjectDetector.hpp:176
image_encodings.h
image_transport::ImageTransport
darknet_ros::YoloObjectDetector::mutexImageCallback_
boost::shared_mutex mutexImageCallback_
Definition: YoloObjectDetector.hpp:204
darknet_ros::YoloObjectDetector::boundingBoxesPublisher_
ros::Publisher boundingBoxesPublisher_
Definition: YoloObjectDetector.hpp:151
darknet_ros::YoloObjectDetector::detectInThread
void * detectInThread()
Definition: YoloObjectDetector.cpp:304
darknet_ros::YoloObjectDetector::yoloThread_
std::thread yoloThread_
Definition: YoloObjectDetector.hpp:166
utils.h
darknet_ros::CvMatWithHeader_::header
std_msgs::Header header
Definition: YoloObjectDetector.hpp:76
ros.h
darknet_ros::YoloObjectDetector::nodeHandle_
ros::NodeHandle nodeHandle_
ROS node handle.
Definition: YoloObjectDetector.hpp:136
darknet_ros::YoloObjectDetector::lastAvg_
float * lastAvg_
Definition: YoloObjectDetector.hpp:190
darknet_ros::YoloObjectDetector::running_
int running_
Definition: YoloObjectDetector.hpp:182
darknet_ros::CvMatWithHeader_
Definition: YoloObjectDetector.hpp:74
darknet_ros::YoloObjectDetector::frameHeight_
int frameHeight_
Definition: YoloObjectDetector.hpp:160
darknet_ros::YoloObjectDetector::publishDetectionImage
bool publishDetectionImage(const cv::Mat &detectionImage)
Definition: YoloObjectDetector.cpp:241
darknet_ros::YoloObjectDetector::readParameters
bool readParameters()
Definition: YoloObjectDetector.cpp:48
darknet_ros::YoloObjectDetector
Definition: YoloObjectDetector.hpp:79
darknet_ros::YoloObjectDetector::displayLoop
void * displayLoop(void *ptr)
Definition: YoloObjectDetector.cpp:413
darknet_ros::YoloObjectDetector::fps_
float fps_
Definition: YoloObjectDetector.hpp:179
network.h
darknet_ros::YoloObjectDetector::publishInThread
void * publishInThread()
Definition: YoloObjectDetector.cpp:538
simple_action_server.h
darknet_ros::YoloObjectDetector::checkForObjectsActionGoalCB
void checkForObjectsActionGoalCB()
Definition: YoloObjectDetector.cpp:198
darknet_ros::YoloObjectDetector::classLabels_
std::vector< std::string > classLabels_
Definition: YoloObjectDetector.hpp:140
darknet_ros::YoloObjectDetector::YoloObjectDetector
YoloObjectDetector(ros::NodeHandle nh)
Definition: YoloObjectDetector.cpp:28
darknet_ros::YoloObjectDetector::fullScreen_
int fullScreen_
Definition: YoloObjectDetector.hpp:199
darknet_ros::RosBox_::num
int num
Definition: YoloObjectDetector.hpp:71
darknet_ros::YoloObjectDetector::predictions_
float ** predictions_
Definition: YoloObjectDetector.hpp:186
darknet_ros::YoloObjectDetector::getCvMatWithHeader
CvMatWithHeader_ getCvMatWithHeader()
Definition: YoloObjectDetector.cpp:523
darknet_ros::YoloObjectDetector::boundingBoxesResults_
darknet_ros_msgs::BoundingBoxes boundingBoxesResults_
Definition: YoloObjectDetector.hpp:156
darknet_ros::YoloObjectDetector::camImageCopy_
cv::Mat camImageCopy_
Definition: YoloObjectDetector.hpp:203
darknet_ros::YoloObjectDetector::checkForObjectsActionServer_
CheckForObjectsActionServerPtr checkForObjectsActionServer_
Check for objects action server.
Definition: YoloObjectDetector.hpp:143
darknet_ros::YoloObjectDetector::demoPrefix_
char * demoPrefix_
Definition: YoloObjectDetector.hpp:200
image_transport::Subscriber
darknet_ros::YoloObjectDetector::demoDone_
int demoDone_
Definition: YoloObjectDetector.hpp:188
darknet_ros::YoloObjectDetector::disp_
cv::Mat disp_
Definition: YoloObjectDetector.hpp:183
darknet_ros::YoloObjectDetector::demoNames_
char ** demoNames_
Definition: YoloObjectDetector.hpp:169
darknet_ros::YoloObjectDetector::isNodeRunning_
bool isNodeRunning_
Definition: YoloObjectDetector.hpp:209
darknet_ros::YoloObjectDetector::mutexNodeStatus_
boost::shared_mutex mutexNodeStatus_
Definition: YoloObjectDetector.hpp:210
darknet_ros
Definition: YoloObjectDetector.hpp:66
darknet_ros::YoloObjectDetector::rosBoxCounter_
std::vector< int > rosBoxCounter_
Definition: YoloObjectDetector.hpp:155
darknet_ros::YoloObjectDetector::fetchInThread
void * fetchInThread()
Definition: YoloObjectDetector.cpp:379
darknet_ros::YoloObjectDetector::demoAlphabet_
image ** demoAlphabet_
Definition: YoloObjectDetector.hpp:170
darknet_ros::YoloObjectDetector::isCheckingForObjects
bool isCheckingForObjects() const
Definition: YoloObjectDetector.cpp:237
darknet_ros::YoloObjectDetector::imageStatus_
bool imageStatus_
Definition: YoloObjectDetector.hpp:206
darknet_ros::YoloObjectDetector::imageSubscriber_
image_transport::Subscriber imageSubscriber_
ROS subscriber and publisher.
Definition: YoloObjectDetector.hpp:149
darknet_ros::YoloObjectDetector::imageHeader_
std_msgs::Header imageHeader_
Definition: YoloObjectDetector.hpp:202
darknet_ros::YoloObjectDetector::demoDelay_
int demoDelay_
Definition: YoloObjectDetector.hpp:184
darknet_ros::YoloObjectDetector::yolo
void yolo()
Definition: YoloObjectDetector.cpp:442
darknet_ros::YoloObjectDetector::sizeNetwork
int sizeNetwork(network *net)
Definition: YoloObjectDetector.cpp:262
darknet_ros::YoloObjectDetector::~YoloObjectDetector
~YoloObjectDetector()
Definition: YoloObjectDetector.cpp:40
darknet_ros::RosBox_
Bounding box of the detected object.
Definition: YoloObjectDetector.hpp:69
darknet_ros::YoloObjectDetector::avgPredictions
detection * avgPredictions(network *net, int *nboxes)
Definition: YoloObjectDetector.cpp:286
darknet_ros::YoloObjectDetector::demoFrame_
int demoFrame_
Definition: YoloObjectDetector.hpp:185
darknet_ros::YoloObjectDetector::buff_
image buff_[3]
Definition: YoloObjectDetector.hpp:175
darknet_ros::YoloObjectDetector::avg_
float * avg_
Definition: YoloObjectDetector.hpp:191
darknet_ros::YoloObjectDetector::objectPublisher_
ros::Publisher objectPublisher_
Definition: YoloObjectDetector.hpp:150
image_transport.h
darknet_ros::YoloObjectDetector::demoTotal_
int demoTotal_
Definition: YoloObjectDetector.hpp:192
darknet_ros::YoloObjectDetector::rosBoxes_
std::vector< std::vector< RosBox_ > > rosBoxes_
Detected objects.
Definition: YoloObjectDetector.hpp:154
darknet_ros::YoloObjectDetector::mutexImageStatus_
boost::shared_mutex mutexImageStatus_
Definition: YoloObjectDetector.hpp:207
show_image
int show_image(image p, const char *name, int ms)
mat_to_image
image mat_to_image(cv::Mat m)
darknet_ros::YoloObjectDetector::imageTransport_
image_transport::ImageTransport imageTransport_
Advertise and subscribe to image topics.
Definition: YoloObjectDetector.hpp:146
darknet_ros::YoloObjectDetector::demoClasses_
int demoClasses_
Definition: YoloObjectDetector.hpp:171
darknet_ros::YoloObjectDetector::CheckForObjectsActionServerPtr
std::shared_ptr< CheckForObjectsActionServer > CheckForObjectsActionServerPtr
Definition: YoloObjectDetector.hpp:133
darknet_ros::YoloObjectDetector::detectionImagePublisher_
ros::Publisher detectionImagePublisher_
Publisher of the bounding box image.
Definition: YoloObjectDetector.hpp:163
actionlib::SimpleActionServer
cv_bridge.h
darknet_ros::CvMatWithHeader_::image
cv::Mat image
Definition: YoloObjectDetector.hpp:75
darknet_ros::YoloObjectDetector::roiBoxes_
RosBox_ * roiBoxes_
Definition: YoloObjectDetector.hpp:195
image_to_mat
cv::Mat image_to_mat(image im)
darknet_ros::YoloObjectDetector::lastAvg2_
float * lastAvg2_
Definition: YoloObjectDetector.hpp:189
darknet_ros::YoloObjectDetector::buffId_
int buffId_[3]
Definition: YoloObjectDetector.hpp:177
darknet_ros::YoloObjectDetector::viewImage_
bool viewImage_
Definition: YoloObjectDetector.hpp:196
darknet_ros::YoloObjectDetector::demoHier_
float demoHier_
Definition: YoloObjectDetector.hpp:181
darknet_ros::YoloObjectDetector::demoIndex_
int demoIndex_
Definition: YoloObjectDetector.hpp:187
darknet_ros::YoloObjectDetector::init
void init()
Definition: YoloObjectDetector.cpp:72
darknet_ros::YoloObjectDetector::enableConsoleOutput_
bool enableConsoleOutput_
Definition: YoloObjectDetector.hpp:197
darknet_ros::YoloObjectDetector::demoThresh_
float demoThresh_
Definition: YoloObjectDetector.hpp:180
darknet_ros::YoloObjectDetector::headerBuff_
std_msgs::Header headerBuff_[3]
Definition: YoloObjectDetector.hpp:174
darknet_ros::YoloObjectDetector::numClasses_
int numClasses_
Class labels.
Definition: YoloObjectDetector.hpp:139
darknet_ros::YoloObjectDetector::buffIndex_
int buffIndex_
Definition: YoloObjectDetector.hpp:178
image_interface.hpp
darknet_ros::YoloObjectDetector::waitKeyDelay_
int waitKeyDelay_
Definition: YoloObjectDetector.hpp:198
darknet_ros::YoloObjectDetector::displayInThread
void * displayInThread(void *ptr)
Definition: YoloObjectDetector.cpp:393
darknet_ros::YoloObjectDetector::mutexActionStatus_
boost::shared_mutex mutexActionStatus_
Definition: YoloObjectDetector.hpp:213
darknet_ros::YoloObjectDetector::demoTime_
double demoTime_
Definition: YoloObjectDetector.hpp:193
darknet_ros::YoloObjectDetector::cameraCallback
void cameraCallback(const sensor_msgs::ImageConstPtr &msg)
Definition: YoloObjectDetector.cpp:159
darknet_ros::YoloObjectDetector::detectLoop
void * detectLoop(void *ptr)
Definition: YoloObjectDetector.cpp:419
darknet_ros::YoloObjectDetector::checkForObjectsActionPreemptCB
void checkForObjectsActionPreemptCB()
Definition: YoloObjectDetector.cpp:232
darknet_ros::YoloObjectDetector::setupNetwork
void setupNetwork(char *cfgfile, char *weightfile, char *datafile, float thresh, char **names, int classes, int delay, char *prefix, int avg_frames, float hier, int w, int h, int frames, int fullscreen)
Definition: YoloObjectDetector.cpp:425
ros::NodeHandle


darknet_ros
Author(s): Marko Bjelonic
autogenerated on Wed Mar 2 2022 00:10:00