Code Monkey home page Code Monkey logo

coral_usb_ros's Introduction

coral_usb_ros

GitHub Workflow Status (branch) GitHub tag (latest by date) Docker Stars Docker Pulls Docker Automated Docker Build Status

ROS package for Coral Edge TPU USB Accelerator

Environment

  • Ubuntu 16.04 + Kinetic
  • Ubuntu 18.04 + Melodic

If you want to run this on Ubuntu 14.04 + Indigo, please see indigo branch.

If you want to run this on PR2, please see pr2 branch.

Notice

We need python3.5 or python3.6 to run this package.

ROS node list

Object detector: edgetpu_object_detector.py

edgetpu_object_detector

For more information, please see here.

Face detector: edgetpu_face_detector.py

edgetpu_face_detector

For more information, please see here.

Human pose estimator: edgetpu_human_pose_estimator.py

edgetpu_human_pose_estimator

For more information, please see here.

Semantic segmenter: edgetpu_semantic_segmenter.py

edgetpu_semantic_segmenter

For more information, please see here.

Node manager: edgetpu_node_manager.py

For more information, please see here.

Setup

Edge TPU dependencies installation

echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
# If you do not have USB3, install libedgetpu1-legacy-std
sudo apt-get install libedgetpu1-legacy-max
sudo apt-get install python3-edgetpu
sudo apt-get install python3-pip
wget https://dl.google.com/coral/python/tflite_runtime-1.14.0-cp35-cp35m-linux_x86_64.whl
pip3 install tflite_runtime-1.14.0-cp35-cp35m-linux_x86_64.whl
sudo apt-get install python3-pip
wget https://dl.google.com/coral/python/tflite_runtime-1.14.0-cp36-cp36m-linux_x86_64.whl
pip3 install tflite_runtime-1.14.0-cp36-cp36m-linux_x86_64.whl

For more information, please see here.

Workspace build

Workspace build (Kinetic)

sudo apt-get install python3-catkin-pkg-modules python3-rospkg-modules python3-venv python3-empy
sudo apt-get install ros-kinetic-opencv3
sudo apt-get install ros-kinetic-catkin
pip3 install --user opencv-python==4.2.0.32 numpy\<1.19.0
source /opt/ros/kinetic/setup.bash
mkdir -p ~/coral_ws/src
cd ~/coral_ws/src
git clone https://github.com/knorth55/coral_usb_ros.git
wstool init
wstool merge coral_usb_ros/fc.rosinstall
wstool merge coral_usb_ros/fc.rosinstall.kinetic
wstool update
rosdep install --from-paths . --ignore-src -y -r
cd ~/coral_ws
catkin init
catkin config -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.5m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so
catkin build

Workspace build (Melodic)

sudo apt-get install python3-catkin-pkg-modules python3-rospkg-modules python3-venv python3-empy
sudo apt-get install python3-opencv
sudo apt-get install ros-melodic-catkin
source /opt/ros/melodic/setup.bash
mkdir -p ~/coral_ws/src
cd ~/coral_ws/src
git clone https://github.com/knorth55/coral_usb_ros.git
wstool init
wstool merge coral_usb_ros/fc.rosinstall
wstool merge coral_usb_ros/fc.rosinstall.melodic
wstool update
rosdep install --from-paths . --ignore-src -y -r
cd ~/coral_ws
catkin init
catkin config -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so
catkin build

Model download

source ~/coral_ws/devel/setup.bash
roscd coral_usb/scripts
rosrun coral_usb download_models.py

Model training with your dataset

Please see here for more detailed information.

Demo

Run roscore

roscore

Run image_publisher

# source normal workspace, not edge tpu workspace
# /opt/ros/kinetic/setup.bash or /opt/ros/melodic/setup.bash
# source /opt/ros/kinetic/setup.bash
source /opt/ros/melodic/setup.bash
rosrun jsk_perception image_publisher.py _file_name:=$(rospack find jsk_perception)/sample/object_detection_example_1.jpg

Run Edge TPU launch

# source edge tpu workspace
source /opt/ros/${ROS_DISTRO}/setup.bash # THIS IS VERY IMPORTANT FOR MELODIC to set /opt/ros/${ROS_DISTRO}/lib/python2.7/dist-packages in $PYTHONPATH
source ~/coral_ws/devel/setup.bash       # THIS PUT devel/lib/python3/dist-packages in fornt of /opt/ros/${ROS_DISTRO}/lib/python2.7/dist-package
# object detector
roslaunch coral_usb edgetpu_object_detector.launch INPUT_IMAGE:=/image_publisher/output
# face detector
roslaunch coral_usb edgetpu_face_detector.launch INPUT_IMAGE:=/image_publisher/output
# human pose estimator
roslaunch coral_usb edgetpu_human_pose_estimator.launch INPUT_IMAGE:=/image_publisher/output
# semantic segmenter
roslaunch coral_usb edgetpu_semantic_segmenter.launch INPUT_IMAGE:=/image_publisher/output

To subscribe compressed input image, use IMAGE_TRANSPORT:=compressed

roslaunch edgetpu_object_detector.launch INPUT_IMAGE:=/image_publisher/output IMAGE_TRANSPORT:=compressed

Run image_view

# source normal workspace, not edge tpu workspace
# /opt/ros/kinetic/setup.bash or /opt/ros/melodic/setup.bash
source /opt/ros/kinetic/setup.bash
# object detector
rosrun image_view image_view image:=/edgetpu_object_detector/output/image
# face detector
rosrun image_view image_view image:=/edgetpu_face_detector/output/image
# human pose estimator
rosrun image_view image_view image:=/edgetpu_human_pose_estimator/output/image
# semantic segmenter
rosrun image_view image_view image:=/edgetpu_semantic_segmenter/output/image

To subscribe compressed output image, set ~image_transport param to compressed

rosrun image_view image_view image:=/edgetpu_object_detector/output/image _image_transport:=compressed

ROS node information

Object detector: edgetpu_object_detector.py

edgetpu_object_detector

Subscribing Topic

  • ~input/image (sensor_msgs/Image)

    • Input image

Publishing Topic

  • ~output/rects (jsk_recognition_msgs/RectArray)

    • Rectangles of detected objects
  • ~output/class (jsk_recognition_msgs/ClassificationResult)

    • Classification results of detected objects
  • ~output/image (sensor_msgs/Image)

    • Visualization of detection results

Parameters

  • ~classifier_name (String, default: rospy.get_name())

    • Classifier name
  • ~model_file (String, default: $(rospack find coral_usb)/models/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite)

    • Model file path
  • ~label_file (String, default: $(rospack find coral_usb)/models/coco_labels.txt)

    • Label file path.
  • ~enable_visualization (Bool, default: True)

    • Whether enable visualization or not
  • ~visualize_duration (Float, default: 0.1)

    • Time duration for visualization
  • ~image_transport: (String, default: raw)

    • Set compressed to subscribe compressed image

Dynamic parameters

  • ~score_thresh: (Float, default: 0.6)

    • Score threshold for object detection
  • ~top_k: (Int, default: 100)

    • Maximum number of detected objects

Face detector: edgetpu_face_detector.py

edgetpu_face_detector

Subscribing Topic

  • ~input/image (sensor_msgs/Image)

    • Input image

Publishing Topic

  • ~output/rects (jsk_recognition_msgs/RectArray)

    • Rectangles of detected faces
  • ~output/class (jsk_recognition_msgs/ClassificationResult)

    • Classification results of detected faces
  • ~output/image (sensor_msgs/Image)

    • Visualization of detection results

Parameters

  • ~classifier_name (String, default: rospy.get_name())

    • Classifier name
  • ~model_file (String, default: $(rospack find coral_usb)/models/mobilenet_ssd_v2_face_quant_postprocess_edgetpu.tflite)

    • Model file path
  • ~enable_visualization (Bool, default: True)

    • Whether enable visualization or not
  • ~visualize_duration (Float, default: 0.1)

    • Time duration for visualization
  • ~image_transport: (String, default: raw)

    • Set compressed to subscribe compressed image

Dynamic parameters

  • ~score_thresh: (Float, default: 0.6)

    • Score threshold for face detection
  • ~top_k: (Int, default: 100)

    • Maximum number of detected faces

Human pose estimator: edgetpu_human_pose_estimator.py

edgetpu_human_pose_estimator

Subscribing Topic

  • ~input/image (sensor_msgs/Image)

    • Input image

Publishing Topic

  • ~output/poses (jsk_recognition_msgs/PeoplePoseArray)

    • Estimated human poses
  • ~output/rects (jsk_recognition_msgs/RectArray)

    • Rectangles of detected humans
  • ~output/class (jsk_recognition_msgs/ClassificationResult)

    • Classification results of detected humans
  • ~output/image (sensor_msgs/Image)

    • Visualization of estimation results

Parameters

  • ~classifier_name (String, default: rospy.get_name())

    • Classifier name
  • ~model_file (String, default: $(rospack find coral_usb)/python/coral_usb/posenet/models/posenet_mobilenet_v1_075_481_641_quant_decoder_edgetpu.tflite)

    • Model file path
  • ~enable_visualization (Bool, default: True)

    • Whether enable visualization or not
  • ~visualize_duration (Float, default: 0.1)

    • Time duration for visualization
  • ~image_transport: (String, default: raw)

    • Set compressed to subscribe compressed image

Dynamic parameters

  • ~score_thresh: (Float, default: 0.2)

    • Score threshold for human pose estimation
  • ~joint_score_thresh: (Float, default: 0.2)

    • Score threshold of each joint for human pose estimation

Semantic segmenter: edgetpu_semantic_segmenter.py

edgetpu_semantic_segmenter

Subscribing Topic

  • ~input/image (sensor_msgs/Image)

    • Input image

Publishing Topic

  • ~output/label (sensor_msgs/Image)

    • Estimated label image
  • ~output/image (sensor_msgs/Image)

    • Visualization of estimation results

Parameters

  • ~classifier_name (String, default: rospy.get_name())

    • Classifier name
  • ~model_file (String, default: $(rospack find coral_usb)/models/deeplabv3_mnv2_pascal_quant_edgetpu.tflite)

    • Model file path
  • ~label_file (String, default: None)

    • Label file path. pascal_voc label is used by default.
  • ~enable_visualization (Bool, default: True)

    • Whether enable visualization or not
  • ~visualize_duration (Float, default: 0.1)

    • Time duration for visualization
  • ~image_transport: (String, default: raw)

    • Set compressed to subscribe compressed image

Node manager: edgetpu_node_manager.py

You can see the sample launch edgetpu_node_manager.launch

Parameters

  • ~nodes: (Dict, default: {})

    • Dictionary of node's name and type.
    • type can be as follow:
      • edgetpu_object_detector
      • edgetpu_face_detector
      • edgetpu_human_pose_estimator
      • edgetpu_semantic_segmenter
    • Parameters for each node can be set after name namespace.
  • ~default: (String, default: None)

    • Default node name
  • ~prefix: (String, default: '')

    • Prefix for each nodes

Service

  • ~start: (coral_usb/StartNode)

    • Start node by node name
  • ~stop: (coral_usb/StopNode)

    • Stop node

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.