Quantcast
Channel: ROS Answers: Open Source Q&A Forum - RSS feed
Viewing all articles
Browse latest Browse all 417

How to linked ROS with OpenCV 3.4.5 dnn module? Error: undefined reference cv::dnn:experimental_dnn_v2::Net::Net()

$
0
0
Hi, I'm trying to use publisher-subcriber no to run my object recognition program by streaming images from my webcam. In my program, I am using readNetFromTensorflow function that provided by opencv_dnn library. But while I catkin_make on my workspace, there is always popup this error: CMakeFiles/my_subscriber.dir/src/my_subscriber.cpp.o: In function `main': my_subscriber.cpp:(.text+0x2ee): undefined reference to `cv::dnn::experimental_dnn_v2::readNetFromTensorflow(cv::String const&, cv::String const&)' my_subscriber.cpp:(.text+0x30e): undefined reference to `cv::dnn::experimental_dnn_v2::Net::setPreferableBackend(int)' my_subscriber.cpp:(.text+0x31a): undefined reference to `cv::dnn::experimental_dnn_v2::Net::setPreferableTarget(int)' my_subscriber.cpp:(.text+0x4c4): undefined reference to `cv::dnn::experimental_dnn_v2::Net::~Net()' my_subscriber.cpp:(.text+0x5f0): undefined reference to `cv::dnn::experimental_dnn_v2::Net::~Net()' collect2: error: ld returned 1 exit status image_transport_tutorial/CMakeFiles/my_subscriber.dir/build.make:176: recipe for target '/home/odroid/image_transport_ws/devel/lib/image_transport_tutorial/my_subscriber' failed make[2]: *** [/home/odroid/image_transport_ws/devel/lib/image_transport_tutorial/my_subscriber] Error 1 CMakeFiles/Makefile2:1125: recipe for target 'image_transport_tutorial/CMakeFiles/my_subscriber.dir/all' failed make[1]: *** [image_transport_tutorial/CMakeFiles/my_subscriber.dir/all] Error 2 Makefile:138: recipe for target 'all' failed make: *** [all] Error 2 And here is my program so far: #include #include #include #include #include #include using namespace std; using namespace cv; const size_t inWidth = 320; const size_t inHeight = 320; const char* classNames[] = {"background", "A", "B", "C"}; cv_bridge::CvImagePtr cv_ptr; int h,w; void imageCallback(const sensor_msgs::ImageConstPtr& msg) { try { cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8); w = cv_ptr->image.cols; h = cv_ptr->image.rows; cv::waitKey(10); } catch (cv_bridge::Exception& e) { ROS_ERROR("Could not convert from '%s' to 'bgr8'.", msg->encoding.c_str()); } } int main(int argc, char **argv) { ros::init(argc, argv, "image_listener"); ros::NodeHandle nh; cv::namedWindow("view"); cv::startWindowThread(); image_transport::ImageTransport it(nh); //! [Initialize network] cv::dnn::Net net = dnn::readNetFromTensorflow("/home/odroid/Desktop/Archive/frozen_inference_graph.pb","/home/odroid/Desktop/Archive/graph.pbtxt"); net.setPreferableBackend(3); net.setPreferableTarget(1); //! [Initialize network] image_transport::Subscriber sub = it.subscribe("camera/image", 1, &imageCallback); //cv::Mat inputBlob = cv::dnn::blobFromImage(cv_ptr->image,1.0, Size(inWidth,inHeight),Scalar(127.5,127.5,127.5), true,false); //Convert Mat to batch of images //net.setInput(inputBlob); //Mat detection = net.forward(); ros::spin(); cv::destroyWindow("view"); } If I comment cv::dnn::Net, I can build 100% complete. And here is my CMakeLists.txt: cmake_minimum_required(VERSION 3.1) #Enable C++11 set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) project(image_transport_tutorial) find_package(catkin REQUIRED COMPONENTS cv_bridge image_transport message_generation sensor_msgs) # add the resized image message add_message_files(DIRECTORY msg FILES ResizedImage.msg ) generate_messages(DEPENDENCIES sensor_msgs) catkin_package(CATKIN_DEPENDS cv_bridge image_transport message_runtime sensor_msgs) find_package(OpenCV REQUIRED) #Set OpenCV set(OpenCV_INCLUDE_DIRS /usr/local/include/ /usr/local/include/opencv2/) #Print some message showing some of them message(STATUS "OpenCV library status:") message(STATUS "config: ${OpenCV_DIR}") message(STATUS "version: ${OpenCV_VERSION}") message(STATUS "libraries: ${OpenCV_LIBRARIES}") message(STATUS "include path: ${OpenCV_INCLUDE_DIRS}") include_directories(include ${catkin_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS}) # add the publisher example add_executable(my_publisher src/my_publisher.cpp) add_dependencies(my_publisher ${catkin_EXPORTED_TARGETS} ${${PROJECT_NAME}_EXPORTED_TARGETS}) target_link_libraries(my_publisher ${catkin_LIBRARIES} ${OpenCV_LIBRARIES}) # add the subscriber example add_executable(my_subscriber src/my_subscriber.cpp) add_dependencies(my_subscriber ${catkin_EXPORTED_TARGETS} ${${PROJECT_NAME}_EXPORTED_TARGETS}) target_link_libraries(my_subscriber ${catkin_LIBRARIES} ${OpenCV_LIBRARIES}) # add the plugin example add_library(resized_publisher src/manifest.cpp src/resized_publisher.cpp src/resized_subscriber.cpp) add_dependencies(resized_publisher ${catkin_EXPORTED_TARGETS} ${${PROJECT_NAME}_EXPORTED_TARGETS}) target_link_libraries(resized_publisher ${catkin_LIBRARIES} ${OpenCV_LIBRARIES}) # Mark executables and/or libraries for installation install(TARGETS my_publisher my_subscriber resized_publisher ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) install(DIRECTORY launch/ DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch ) install(DIRECTORY model/ DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/model ) install(FILES resized_plugins.xml DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) ** > UPDATES: ** If I catkin_make by using opencv 3.3.1, which is built while I installed ROS Kinetic, I can compiled it 100% successful. But when I do some rosrun, it will cause some error. Here is the error: Preprocessor/sub:Sub(Preprocessor/mul)(Preprocessor/sub/y) OpenCV Error: Unspecified error (Unknown layer type Sub in op Preprocessor/sub) in populateNet, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/dnn/src/tensorflow/tf_importer.cpp, line 1311 I have done some browsing for a few days and found a guy that saying it's because of cv_bridge and image_transport of the opencv that comes with ROS.Here the link:[https://answers.ros.org/question/318146/using-opencv-dnn-module-with-ros/](https://answers.ros.org/question/318146/using-opencv-dnn-module-with-ros/) Please help, Any help will be appreciate.

Viewing all articles
Browse latest Browse all 417

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>