Skip to content

System Architecture

The core concept of BerryNet is to create an AIoT (AI + IoT) network:

  • An IoT network that devices can communicate with each other.
  • Some of the devices are more powerful and can execute edge AI computation.

bn-slide-aiot-network

Based on the concept, user can create an AI application by constructing a data network/pipeline.

bn-slide-core-concept

bn-slide-basic-topoloty

Communication

BerryNet uses MQTT as the default IoT communication mechanism because MQTT is a de-factor IoT industry protocol.

MQTT topic format is based on the concept:

berrynet/<component-type>/<component-name>/<message-type>[/message-additional-info...]

MQTT topics using in BerryNet

MQTT Topic Description
berrynet/engine/darknet/result Inference result from the Darknet engine
berrynet/engine/tfliteclassifier/result Inference result from the TFLite classification engine
berrynet/engine/tflitedetector/result Inference result from the TFLite detection engine
berrynet/engine/ovclassifier/result Inference result from the OpenVINO classification engine
berrynet/engine/ovdetector/result Inference result from the OpenVINO detection engine
berrynet/engine/pipeline/result Inference result from the Dyda pipeline engine
berrynet/engine/tensorflow/result Inference result from the TensorFlow engine
berrynet/data/rgbimage Input image from the camera client
berrynet/dashboard/snapshot Relay input image to Freeboard snapshot widget
berrynet/dashboard/inferenceResult Relay inference text result to Freeboard inferneceResult widget

Generic Inference Result Format

Generic inference result format makes AI inference services to follow the same rule.

Classification

{
    "timestamp": STRING,
    "bytes": STRING,
    "annotations": [
        {
           "type": "classification",
           "label": STRING,
           "confidence": FLOAT32
        },
        ...
    ]
}

Detection

{
    "timestamp": STRING,
    "bytes": STRING,
    "annotations": [
        {
           "type": "detection",
           "label": STRING,
           "confidence": FLOAT32,
           "top": UINT32,
           "bottom": UINT32,
           "left": UINT32,
           "right", UINT32,
        },
        ...
    ]
}

Field Description

Field Description Type
timestamp Datetime string in ISO format. STRING
bytes Raw image or image with inference results in base64 format. STRING
type Inference type.
Valid values: {classification, detection}
STRING
label Inference result label. STRING
confidence Inference result confidence.
Valid value: 0.00 <= confidence <= 1.00
FLOAT32
left x of the top-left point. UINT32
top y of the top-left point. UINT32
right x of the bottom-right point. UINT32
bottom y of the bottom-right point. UINT32