Initial package (#1)
* Initial package Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * Use latest vision_msgs with string id Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * Tiny improvements Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * Add parser tests and ignore blank lines in class names Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * Test when cfg file does not exist Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * Rename test Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * openrobotics_darknet_ros -> openrobotics::darknet_ros Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * Added visibility files Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * Rename files Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * darknet_node -> detector_node Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * Rename files Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * Rename files Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * DetectorNetwork and DetectorNode Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * Simple readme Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * Add Example section Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * Example actually works Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * Fix link Signed-off-by: Shane Loretz <sloretz@osrfoundation.org> * Linter tests pass Signed-off-by: Shane Loretz <sloretz@osrfoundation.org>
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
// Copyright 2019 Open Source Robotics Foundation, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef OPENROBOTICS_DARKNET_ROS__DETECTOR_NETWORK_HPP_
|
||||
#define OPENROBOTICS_DARKNET_ROS__DETECTOR_NETWORK_HPP_
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "openrobotics_darknet_ros/visibility.hpp"
|
||||
#include "sensor_msgs/msg/image.hpp"
|
||||
#include "vision_msgs/msg/detection2_d_array.hpp"
|
||||
|
||||
namespace openrobotics
|
||||
{
|
||||
namespace darknet_ros
|
||||
{
|
||||
// Forward declaration
|
||||
class DetectorNetworkPrivate;
|
||||
|
||||
class DetectorNetwork
|
||||
{
|
||||
public:
|
||||
/// \brief load a network from disk
|
||||
/// \param[in] config_file Path to a file describing the network
|
||||
/// \param[in] weights_file Path to a file containing the network's weights
|
||||
/// \param[in] classes Ordered list of class names the network can predict
|
||||
DARKNET_ROS_PUBLIC
|
||||
DetectorNetwork(
|
||||
const std::string & config_file,
|
||||
const std::string & weights_file,
|
||||
const std::vector<std::string> & classes);
|
||||
|
||||
DARKNET_ROS_PUBLIC
|
||||
~DetectorNetwork();
|
||||
|
||||
/// \brief Detect objects in image
|
||||
/// \param[in] image An image to analyze
|
||||
/// \param[in] threshold How confident the network must be to detect something [0.0, 1.0]
|
||||
/// \param[in] nms_threshold Non-Maximal Suppression threhsold [0.0, 1.0].
|
||||
/// When the intersection over union (iou) of two bounding boxes is greater than nms_threshold,
|
||||
/// the box with the lower objectness score is discarded.
|
||||
/// \param[out] output_detections Things detected in the image (does not set source_img)
|
||||
/// \return number of objects detected
|
||||
DARKNET_ROS_PUBLIC
|
||||
size_t
|
||||
detect(
|
||||
const sensor_msgs::msg::Image & image,
|
||||
double threshold,
|
||||
double nms_threshold,
|
||||
vision_msgs::msg::Detection2DArray * output_detections);
|
||||
|
||||
private:
|
||||
std::unique_ptr<DetectorNetworkPrivate> impl_;
|
||||
};
|
||||
} // namespace darknet_ros
|
||||
} // namespace openrobotics
|
||||
|
||||
#endif // OPENROBOTICS_DARKNET_ROS__DETECTOR_NETWORK_HPP_
|
||||
@@ -0,0 +1,48 @@
|
||||
// Copyright 2019 Open Source Robotics Foundation, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef OPENROBOTICS_DARKNET_ROS__DETECTOR_NODE_HPP_
|
||||
#define OPENROBOTICS_DARKNET_ROS__DETECTOR_NODE_HPP_
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "rclcpp/node.hpp"
|
||||
#include "openrobotics_darknet_ros/visibility_node.hpp"
|
||||
|
||||
|
||||
namespace openrobotics
|
||||
{
|
||||
namespace darknet_ros
|
||||
{
|
||||
// Forward declaration
|
||||
class DetectorNodePrivate;
|
||||
|
||||
class DetectorNode : public rclcpp::Node
|
||||
{
|
||||
public:
|
||||
/// \brief Create a node that uses ROS parameters to get the network
|
||||
DARKNET_ROS_NODE_PUBLIC
|
||||
explicit DetectorNode(rclcpp::NodeOptions options);
|
||||
|
||||
DARKNET_ROS_NODE_PUBLIC
|
||||
virtual ~DetectorNode();
|
||||
|
||||
private:
|
||||
std::unique_ptr<DetectorNodePrivate> impl_;
|
||||
};
|
||||
} // namespace darknet_ros
|
||||
} // namespace openrobotics
|
||||
|
||||
#endif // OPENROBOTICS_DARKNET_ROS__DETECTOR_NODE_HPP_
|
||||
@@ -0,0 +1,36 @@
|
||||
// Copyright 2019 Open Source Robotics Foundation, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef OPENROBOTICS_DARKNET_ROS__PARSE_HPP_
|
||||
#define OPENROBOTICS_DARKNET_ROS__PARSE_HPP_
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "openrobotics_darknet_ros/visibility.hpp"
|
||||
|
||||
namespace openrobotics
|
||||
{
|
||||
namespace darknet_ros
|
||||
{
|
||||
/// \brief Read file containing class names, one per line
|
||||
/// \param[in] filename a path to a file containing classes a network can detect
|
||||
/// \return a container with all of the class names detected
|
||||
DARKNET_ROS_PUBLIC
|
||||
std::vector<std::string>
|
||||
parse_class_names(const std::string & filename);
|
||||
} // namespace darknet_ros
|
||||
} // namespace openrobotics
|
||||
|
||||
#endif // OPENROBOTICS_DARKNET_ROS__PARSE_HPP_
|
||||
@@ -0,0 +1,56 @@
|
||||
// Copyright 2019 Open Source Robotics Foundation, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
/* This header must be included by all rclcpp headers which declare symbols
|
||||
* which are defined in the rclcpp library. When not building the rclcpp
|
||||
* library, i.e. when using the headers in other package's code, the contents
|
||||
* of this header change the visibility of certain symbols which the rclcpp
|
||||
* library cannot have, but the consuming code must have inorder to link.
|
||||
*/
|
||||
|
||||
#ifndef OPENROBOTICS_DARKNET_ROS__VISIBILITY_HPP_
|
||||
#define OPENROBOTICS_DARKNET_ROS__VISIBILITY_HPP_
|
||||
|
||||
// This logic was borrowed (then namespaced) from the examples on the gcc wiki:
|
||||
// https://gcc.gnu.org/wiki/Visibility
|
||||
|
||||
#if defined _WIN32 || defined __CYGWIN__
|
||||
#ifdef __GNUC__
|
||||
#define DARKNET_ROS_EXPORT __attribute__ ((dllexport))
|
||||
#define DARKNET_ROS_IMPORT __attribute__ ((dllimport))
|
||||
#else
|
||||
#define DARKNET_ROS_EXPORT __declspec(dllexport)
|
||||
#define DARKNET_ROS_IMPORT __declspec(dllimport)
|
||||
#endif
|
||||
#ifdef DARKNET_ROS_BUILDING_LIBRARY
|
||||
#define DARKNET_ROS_PUBLIC DARKNET_ROS_EXPORT
|
||||
#else
|
||||
#define DARKNET_ROS_PUBLIC DARKNET_ROS_IMPORT
|
||||
#endif
|
||||
#define DARKNET_ROS_PUBLIC_TYPE DARKNET_ROS_PUBLIC
|
||||
#define DARKNET_ROS_LOCAL
|
||||
#else
|
||||
#define DARKNET_ROS_EXPORT __attribute__ ((visibility("default")))
|
||||
#define DARKNET_ROS_IMPORT
|
||||
#if __GNUC__ >= 4
|
||||
#define DARKNET_ROS_PUBLIC __attribute__ ((visibility("default")))
|
||||
#define DARKNET_ROS_LOCAL __attribute__ ((visibility("hidden")))
|
||||
#else
|
||||
#define DARKNET_ROS_PUBLIC
|
||||
#define DARKNET_ROS_LOCAL
|
||||
#endif
|
||||
#define DARKNET_ROS_PUBLIC_TYPE
|
||||
#endif
|
||||
|
||||
#endif // OPENROBOTICS_DARKNET_ROS__VISIBILITY_HPP_
|
||||
@@ -0,0 +1,56 @@
|
||||
// Copyright 2019 Open Source Robotics Foundation, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
/* This header must be included by all rclcpp headers which declare symbols
|
||||
* which are defined in the rclcpp library. When not building the rclcpp
|
||||
* library, i.e. when using the headers in other package's code, the contents
|
||||
* of this header change the visibility of certain symbols which the rclcpp
|
||||
* library cannot have, but the consuming code must have inorder to link.
|
||||
*/
|
||||
|
||||
#ifndef OPENROBOTICS_DARKNET_ROS__VISIBILITY_NODE_HPP_
|
||||
#define OPENROBOTICS_DARKNET_ROS__VISIBILITY_NODE_HPP_
|
||||
|
||||
// This logic was borrowed (then namespaced) from the examples on the gcc wiki:
|
||||
// https://gcc.gnu.org/wiki/Visibility
|
||||
|
||||
#if defined _WIN32 || defined __CYGWIN__
|
||||
#ifdef __GNUC__
|
||||
#define DARKNET_ROS_NODE_EXPORT __attribute__ ((dllexport))
|
||||
#define DARKNET_ROS_NODE_IMPORT __attribute__ ((dllimport))
|
||||
#else
|
||||
#define DARKNET_ROS_NODE_EXPORT __declspec(dllexport)
|
||||
#define DARKNET_ROS_NODE_IMPORT __declspec(dllimport)
|
||||
#endif
|
||||
#ifdef DARKNET_ROS_NODE_BUILDING_LIBRARY
|
||||
#define DARKNET_ROS_NODE_PUBLIC DARKNET_ROS_NODE_EXPORT
|
||||
#else
|
||||
#define DARKNET_ROS_NODE_PUBLIC DARKNET_ROS_NODE_IMPORT
|
||||
#endif
|
||||
#define DARKNET_ROS_NODE_PUBLIC_TYPE DARKNET_ROS_NODE_PUBLIC
|
||||
#define DARKNET_ROS_NODE_LOCAL
|
||||
#else
|
||||
#define DARKNET_ROS_NODE_EXPORT __attribute__ ((visibility("default")))
|
||||
#define DARKNET_ROS_NODE_IMPORT
|
||||
#if __GNUC__ >= 4
|
||||
#define DARKNET_ROS_NODE_PUBLIC __attribute__ ((visibility("default")))
|
||||
#define DARKNET_ROS_NODE_LOCAL __attribute__ ((visibility("hidden")))
|
||||
#else
|
||||
#define DARKNET_ROS_NODE_PUBLIC
|
||||
#define DARKNET_ROS_NODE_LOCAL
|
||||
#endif
|
||||
#define DARKNET_ROS_NODE_PUBLIC_TYPE
|
||||
#endif
|
||||
|
||||
#endif // OPENROBOTICS_DARKNET_ROS__VISIBILITY_NODE_HPP_
|
||||
Reference in New Issue
Block a user