drawPoses
warning
The document is a continuation of the previous document, if you have landed directly on this page then, Please read from page Get started.
What is drawPoses component ?
drawPoses component is used to draw the detected points(pose) on image.
- Description : drawPoses() takes an input a json string with base64 image, and detected poses information(detected points with probability) and returns base64 string with drawn values on image. Check Input and output parameters for details.
- Parameters :
- Input(Via STDIN) : A JSON String with following parameters:
- Parameter1: For each detected pose
- detected point
- Probability for each point
- Parameter2: Original image in base64 string format
- Parameter1: For each detected pose
- Output(Via STDOUT) : A JSON string with following contents
- Base64 image string with drawn pose
- int responseID
- Input(Via STDIN) : A JSON String with following parameters:
List of drawPoses features in shunya stack
- Get Image with drawn pose detections
Using drawPoses
Requirements to use drawPoses
- Shunya OS installed (supported Arm devices) or Shunya OS docker container (X86 based windows/linux devices)
- Shunya AI installed in Shunya OS.
Steps to use drawPoses
- Give pose data JSON as an input.
- Get Image with drawn pose detections
note
Run the steps given below inside Shunya OS installed (supported Arm devices) or Shunya OS docker container (X86 based windows/linux devices) terminals.
Lets take an example use case: Say we need to
- Give detected poses information as as input in JSON format
- Get JSON output of all the detected poses drawn on image.
Steps are
1. Give pose data JSON as an input.
Start with an ready to use template for drawing poses on image.
git clone https://gitlab.iotiot.in/shunya/products/shunya-ai-examples.git
cd shunya-ai-examples/indiv-componentsOpen the examples in a text editor and modify as per your usecase.
- For CPP you will find the examples in the folder
cpp-examples/pose-estimation/drawPoses
- Open the file
draw_poses.cpp
- Modify the line to set the input json string
/* Replace detectPosesOut with your json string and give as an input to drawPoses component */
drawPoses.stdin() << detectPosesOut << std::endl;- For Python you will find the examples in the folder
python-examples/pose-estimation/drawPoses
- Open the file
draw_poses.py
- Modify the line to set the input json string
# Replace detectPosesOut with your json string and give as an input to drawPoses component
drawPosesOut = drawPoses.communicate(input=detectPosesOut)[0]- For CPP you will find the examples in the folder
2. Get Image with drawn pose detections
Once you are done editing, save and run the code, by running
mkdir build && cd build
cmake ../
make
./drawPosesCpppython3 draw_poses.py
Running the codes will print the JSON output on the terminal (to STDOUT).
For Example:
Lets say the input image is
Input JSON containing pose data is
{
"Image":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUG",
"DetectedposesJSON":[
{
"Point0":{
"Landmarks":{
"x":112.5,
"y":21.09375
},
"Prob":0.979064404964447
},
"Point1":{
"Landmarks": {
"x":117.1875,
"y":17.578125
},
"Prob":0.9587295651435852
},
.....
}
}Then the JSON output is
{
"DetectedPosesJSON": {
"ResponseID": 1606896528,
"Image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wB=="
}
}
Understand this component with an example (ready to use code)
This is an example for pose-estimation and here we will be using 2 components: detectPoses and drawPoses
Check this ready to use example in c++ and python
Download the code
git clone https://gitlab.iotiot.in/shunya/products/shunya-ai-examples.git
cd shunya-ai-examples/cpp-examples/pose-estimation```shell git clone https://gitlab.iotiot.in/shunya/products/shunya-ai-examples.git cd shunya-ai-examples/python-examples/pose-estimation ```In this folder there is a file, pose_detect.cpp or pose_detect.py
detectbjects Components used
subprocess::popen detectPoses("/usr/bin/detectPoses", {});
```shell detectPoses = Popen(['/usr/bin/detectPoses'], stdout=PIPE, stdin=PIPE) ```drawPoses component used
subprocess::popen drawPoses("/usr/bin/drawPoses", {});
```shell drawPoses = Popen(['/usr/bin/drawPoses'], stdout=PIPE, stdin=PIPE) ```Run code by yourself
- You will get a new image stored in system.mkdir build && cd build
cmake .. && make
./poseEstimateCpp```shell python3 pose_estimate.py ```