curl --request GET \
--url https://studio.edgeimpulse.com/v1/api/{projectId}/training/anomaly/{learnId}/metadata \
--header 'x-api-key: <api-key>'import requests
url = "https://studio.edgeimpulse.com/v1/api/{projectId}/training/anomaly/{learnId}/metadata"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://studio.edgeimpulse.com/v1/api/{projectId}/training/anomaly/{learnId}/metadata', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://studio.edgeimpulse.com/v1/api/{projectId}/training/anomaly/{learnId}/metadata",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://studio.edgeimpulse.com/v1/api/{projectId}/training/anomaly/{learnId}/metadata"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://studio.edgeimpulse.com/v1/api/{projectId}/training/anomaly/{learnId}/metadata")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://studio.edgeimpulse.com/v1/api/{projectId}/training/anomaly/{learnId}/metadata")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"created": "2023-11-07T05:31:56Z",
"scale": [
123
],
"mean": [
123
],
"clusters": [
{
"center": [
123
],
"maxError": 123
}
],
"axes": "`[ 0, 11, 22 ]`",
"defaultMinimumConfidenceRating": 123,
"thresholds": [
{
"key": "min_score",
"description": "Score threshold",
"helpText": "Threshold score for bounding boxes. If the score for a bounding box is below this the box will be discarded.",
"value": 0.5,
"suggestedValue": 123,
"suggestedValueText": "<string>",
"dropdownOptions": [
{
"description": "<string>",
"value": "<string>"
}
]
}
],
"error": "<string>",
"availableModelTypes": [],
"modelValidationMetrics": [
{
"loss": 123,
"confusionMatrix": [
[
31,
1,
0
],
[
2,
27,
3
],
[
1,
0,
39
]
],
"report": {},
"onDevicePerformance": [
{
"mcu": "<string>",
"name": "<string>",
"isDefault": true,
"latency": 123,
"tflite": {
"ramRequired": 123,
"romRequired": 123,
"arenaSize": 123,
"modelSize": 123
},
"eon": {
"ramRequired": 123,
"romRequired": 123,
"arenaSize": 123,
"modelSize": 123
},
"hasPerformance": true,
"eon_ram_optimized": {
"ramRequired": 123,
"romRequired": 123,
"arenaSize": 123,
"modelSize": 123
},
"customMetrics": [
{
"name": "<string>",
"value": "<string>"
}
],
"profilingError": "<string>"
}
],
"isSupportedOnMcu": true,
"additionalMetrics": [
{
"name": "<string>",
"value": "<string>",
"fullPrecisionValue": 123,
"tooltipText": "<string>",
"link": "<string>"
}
],
"accuracy": 123,
"predictions": [
{
"sampleId": 123,
"startMs": 123,
"endMs": 123,
"prediction": "<string>",
"label": "<string>",
"predictionCorrect": true,
"f1Score": 123,
"anomalyScores": [
[
123
]
],
"boundingBoxes": [
{
"label": "<string>",
"x": 123,
"y": 123,
"width": 123,
"height": 123,
"score": 123
}
],
"labelMapPredictions": {}
}
],
"mcuSupportError": "<string>",
"profilingJobId": 123,
"profilingJobFailed": true
}
],
"hasTrainedModel": true
}Anomaly metadata
Get metadata about a trained anomaly block. Use the impulse blocks to find the learnId.
curl --request GET \
--url https://studio.edgeimpulse.com/v1/api/{projectId}/training/anomaly/{learnId}/metadata \
--header 'x-api-key: <api-key>'import requests
url = "https://studio.edgeimpulse.com/v1/api/{projectId}/training/anomaly/{learnId}/metadata"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://studio.edgeimpulse.com/v1/api/{projectId}/training/anomaly/{learnId}/metadata', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://studio.edgeimpulse.com/v1/api/{projectId}/training/anomaly/{learnId}/metadata",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://studio.edgeimpulse.com/v1/api/{projectId}/training/anomaly/{learnId}/metadata"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://studio.edgeimpulse.com/v1/api/{projectId}/training/anomaly/{learnId}/metadata")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://studio.edgeimpulse.com/v1/api/{projectId}/training/anomaly/{learnId}/metadata")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"created": "2023-11-07T05:31:56Z",
"scale": [
123
],
"mean": [
123
],
"clusters": [
{
"center": [
123
],
"maxError": 123
}
],
"axes": "`[ 0, 11, 22 ]`",
"defaultMinimumConfidenceRating": 123,
"thresholds": [
{
"key": "min_score",
"description": "Score threshold",
"helpText": "Threshold score for bounding boxes. If the score for a bounding box is below this the box will be discarded.",
"value": 0.5,
"suggestedValue": 123,
"suggestedValueText": "<string>",
"dropdownOptions": [
{
"description": "<string>",
"value": "<string>"
}
]
}
],
"error": "<string>",
"availableModelTypes": [],
"modelValidationMetrics": [
{
"loss": 123,
"confusionMatrix": [
[
31,
1,
0
],
[
2,
27,
3
],
[
1,
0,
39
]
],
"report": {},
"onDevicePerformance": [
{
"mcu": "<string>",
"name": "<string>",
"isDefault": true,
"latency": 123,
"tflite": {
"ramRequired": 123,
"romRequired": 123,
"arenaSize": 123,
"modelSize": 123
},
"eon": {
"ramRequired": 123,
"romRequired": 123,
"arenaSize": 123,
"modelSize": 123
},
"hasPerformance": true,
"eon_ram_optimized": {
"ramRequired": 123,
"romRequired": 123,
"arenaSize": 123,
"modelSize": 123
},
"customMetrics": [
{
"name": "<string>",
"value": "<string>"
}
],
"profilingError": "<string>"
}
],
"isSupportedOnMcu": true,
"additionalMetrics": [
{
"name": "<string>",
"value": "<string>",
"fullPrecisionValue": 123,
"tooltipText": "<string>",
"link": "<string>"
}
],
"accuracy": 123,
"predictions": [
{
"sampleId": 123,
"startMs": 123,
"endMs": 123,
"prediction": "<string>",
"label": "<string>",
"predictionCorrect": true,
"f1Score": 123,
"anomalyScores": [
[
123
]
],
"boundingBoxes": [
{
"label": "<string>",
"x": 123,
"y": 123,
"width": 123,
"height": 123,
"score": 123
}
],
"labelMapPredictions": {}
}
],
"mcuSupportError": "<string>",
"profilingJobId": 123,
"profilingJobFailed": true
}
],
"hasTrainedModel": true
}Authorizations
Path Parameters
Project ID
Learn Block ID, use the impulse functions to retrieve the ID
Response
OK
Whether the operation succeeded
Date when the model was trained
Scale input for StandardScaler. Values are scaled like this (where ix is axis index): input[ix] = (input[ix] - mean[ix]) / scale[ix];
Mean input for StandardScaler. Values are scaled like this (where ix is axis index): input[ix] = (input[ix] - mean[ix]) / scale[ix];
Trained K-means clusters
Show child attributes
Show child attributes
Which axes were included during training (by index)
"[ 0, 11, 22 ]"
DEPRECATED, see "thresholds" instead. Default minimum confidence rating required before tagging as anomaly, based on scores of training data (GMM only).
List of configurable thresholds for this block.
Show child attributes
Show child attributes
Optional error description (set if 'success' was false)
The types of model that are available
int8, float32, akida, requiresRetrain The model type that is recommended for use
int8, float32, akida, requiresRetrain Metrics for each of the available model types
Show child attributes
Show child attributes
Was this page helpful?