I am using Azure cognitive-service custom vision service to detect shapes from capture images. As per their documentation, I got the response as per their format.
But I am an facing issue to plot the shape above the image.
{
"id": "0fbda4ee-8956-4979-bf57-a252441af98d",
"project": "9ca4032b-beeb-40ad-9396-1c3fcfd9ba89",
"iteration": "27c85265-a158-4fc4-b22a-d535dd758d80",
"created": "2018-06-11T09:34:29.9496528Z",
"predictions": [
{
"probability": 0.0102891214,
"tagId": "677afcf8-bc4a-493f-b588-707663286125",
"tagName": "ball",
"boundingBox": {
"left": 0.2889924,
"top": 0.0169312358,
"width": 0.7007024,
"height": 0.8284572
}
},
{
"probability": 0.012788726,
"tagId": "ca844f08-b6c0-4d9a-9010-73945d442708",
"tagName": "cricket ball",
"boundingBox": {
"left": 0.304018974,
"top": 0.413163722,
"width": 0.299461246,
"height": 0.436399817
}
},
{
"probability": 0.0229086485,
"tagId": "ca844f08-b6c0-4d9a-9010-73945d442708",
"tagName": "cricket ball",
"boundingBox": {
"left": 0.2889924,
"top": 0.0169312358,
"width": 0.7007024,
"height": 0.8284572
}
},
{
"probability": 0.0100123268,
"tagId": "4672144d-5593-446f-be63-5144a35d0e6e",
"tagName": "pipe",
"boundingBox": {
"left": 0.711509764,
"top": 0.377838552,
"width": 0.07217276,
"height": 0.113578767
}
},
{
"probability": 0.0167990718,
"tagId": "4672144d-5593-446f-be63-5144a35d0e6e",
"tagName": "pipe",
"boundingBox": {
"left": 0.9821227,
"top": 0.9500536,
"width": 0.0115685463,
"height": 0.033854425
}
},
{
"probability": 0.923659563,
"tagId": "4672144d-5593-446f-be63-5144a35d0e6e",
"tagName": "pipe",
"boundingBox": {
"left": 0.288039029,
"top": 0.411838,
"width": 0.291451037,
"height": 0.4237842
}
}
]
}
Above is the response I got in that Custom vision API call. But the issue is with boundingBox. It is having values always in a fraction, starting from 0. Now if I want to use that and want to draw a square, then it is not possible as because I don't know exact logic behind drawing square/rectangles from that values.
How can I use those values and draw a rectangles/square using it?
Custom Vision functionality can be divided into two features. Image classification applies one or more labels to an entire image. Object detection is similar, but it returns the coordinates in the image where the applied label(s) can be found.
From the Custom Vision web page, select your project and then select the Performance tab. To submit images to the Prediction API, you'll first need to publish your iteration for prediction, which can be done by selecting Publish and specifying a name for the published iteration.
They both deal with computer vision on images. The difference between them is the Custom Vision can only do image classification and object detection, as well as take in your own images. The Computer Vision APIs can do a bit more, but you don't have any control over how the models are trained.
These boundingBox values are in percent of the image original size, so you can draw the rectangle by multiplying the values by the image width (for left and width values) or by the image height (for top and height values).
Keep in mind that the position is expressed from the top left corner, so position 0,0 is this corner.
I got a small custom vision detecting cola bottles.
Original image is the following one:
I used the Custom Vision portal to make a prediction and got the following result - let's focus on this highlighted result with a 87,5% score:
Using the API (available here), I also made the Predict operation and got (among other details) this prediction:
{
"probability": 0.875464261,
"tagId": "1932c95f-ed4a-4675-bde4-c2457e1389e6",
"tagName": "CocaLight",
"boundingBox": {
"left": 0.453497916,
"top": 0.0,
"width": 0.2523211,
"height": 0.8738168
}
}
Considering that my image dimension is 800 x 652 (so ImageWidth 800, ImageHeight 652):
Rectangle draw
Top left point position?
So my rectangle starting position is (362,0).
Size?
Let's draw it!
Looks right!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With