Super Detection API
The APIs documented on this page are called "super APIs" because they are authenticated by partner's "super auth token".
Authentication​
All APIs are authenticated by the authentication token in the HTTP request header:
Authorization: Token XXX
tip
Please contact Obico team to obtain your super auth token.
Endpoint​
https://app.obico.io/
. Production endpoint. Please use this endpoint unless instructed by the Obico team differently.https://app-stg.obico.io/
. Staging endpoint. Please don't use unless instructed by the Obico team.
POST /ent/partners/api/predict/
​
Request​
This POST request should be sent as multipart/form-data
format.
Query parameters​
printer_id
: A id that can uniquely identify the printer within your system. Max 256 characters.print_id
: A id that can uniquely identify the print within the printer it belongs. Max 256 characters.img
: Snapshot from the webcam for failure detection. In JPEG format.
Response​
Status code: 200
​
API request was processed successfully.
Body​
{
"result": {
"p": 0,
"temporal_stats": {
"ewm_mean": 0,
"rolling_mean_short": 0,
"rolling_mean_long": 0,
"prediction_num": 0,
"prediction_num_lifetime": 0
},
"detections": [
[0.541085422039032, [422.7984619140625, 236.30227661132812, 61.9364013671875, 74.49552917480469]],
[0.43781569600105286, [426.05596923828125, 264.619140625, 42.386478424072266, 4.73854064941406]],
[0.2545202076435089, [423.3209533691406, 238.6829071044922, 113.47953796386719, 135.73854064941406]],
[0.20370429754257202, [456.3966369628906, 236.23785400390625, 39.029632568359375, 67.34481811523438]]
]
}
}
p
: A number between 0 and 1.0. 0 means no failure is detected. 1 means the maximum confidence on predicting a print failure.temporal_stats
: The temporal stats that may be useful in determining if a failure has actually occurred. These stats are important for smoothening the noises in failure detection. See the tip below for details.ewm_mean
: Exponentially weighted mean forp
. EWM window span = 12.rolling_mean_short
: Short-term rolling mean forp
. Rolling window span = 310. This rolling mean is reset to 0 when a new print starts.rolling_mean_long
: Long-term rolling mean forp
. Rolling window span = 7200. This rolling mean is accumulated over the lifetime of the printer.prediction_num
: The number of predictions for the current print so far.prediction_num_lifetime
: The number of predictions for the life-time of the printer.detections
: A list of tuples. Each tuple is[confidence, [xc, yc, w, h]]
.confidence
: Range: [0, 1], where 0 means not failure and 1.0 means the maximum confidence on predicting a print failure.[xc, yc, w, h]
: Rectangle of the detected area.xc
andyc
are the X and Y coordinates of the center of the rectangle.w
andh
are the width and hight of the rectangle.
tip
It's a good practice to use the temporal stats to smoothen out the noises in failure detection. Otherwise there may be excessive amount of false alarms.
In Obico open-source server, the way these temporal stats are used can be simplistically described as below:
- If
ewm_mean - rolling_mean_long < 0.36
: no failure. - Else if
ewm_mean - rolling_mean_long > 0.99
: failure. - Else if
ewm_mean - rolling_mean_long > 0.78
: maybe failure. - Else if
ewm_mean > (rolling_mean_short - rolling_mean_long) * 3.8
: maybe failure.
tip
All these "magic numbers", such as the rolling window sizes, or thresholds such as 0.36 or 0.78, should be considered as hyper-parameters. You are highly recommended to go through the hyper-parameters tuning process to find the optimal values for them.
Status code: 400
​
API request was NOT processed successfully for other reasons, such as missing required parameters.
Body​
{
"error": "Detailed error message"
}
Status code: 401
​
Super auth_token is not valid. Contact Obico team member.
Body​
{
"error": "Invalid or Inactive Token",
"is_authenticated": "False"
}
Status code: 429
​
API request was NOT processed successfully because of rate throttling. Contact Obico team member to increase your rate limit.
Body​
{
"error": "You are running too hot! Take it easy buddy..."
}