• DepthAI-v2
  • Can the DepthAI SDK run two Roboflow models

Hi All,

Can the DepthAI SDK run two Roboflow models? I've got my code setup to run two models, it seems to run successfully but when I trigger either model it appears to execute the same trigger either way.


from depthai_sdk import OakCamera
from depthai_sdk.classes import DetectionPacket
from depthai_sdk.trigger_action import Action, DetectionTrigger
import requests
from datetime import datetime
class SendAlertAction(Action):
    def __init__(self, data_value, name, \*args, \*\*kwargs):
        super().__init__(\*args, \*\*kwargs)
        self.data_value = data_value
        self.name = name
    def activate(self):
        print(f"{self.name} activated")
        self.send_alert()
    def send_alert(self):
        url = "http://x.x.x.x:x/x/createAlert"
        headers = {
            "Authorization": "Basic x",
            "Content-Type": "application/json",
            "Accept": "application/json"
        }
        data = {
            "public": "",
            "fw_version": "",
            "userid": "",
            "published_at": datetime.now().isoformat(),
            "data": self.data_value,
            "event": "",
            "deviceId": "xxxxxxxxxx"
        }
        response = requests.post(url, json=data, headers=headers)
        print(f"Alert sent, status code: {response.status_code}, data sent: {self.data_value}")
\# Callback function for detection packets
def detection_callback(packet: DetectionPacket, model_name: str):
    print(f"Detections for {model_name}: {packet.img_detections}")
with OakCamera("192.168.0.10") as oak:
    color = oak.create_camera('color')
    # Configure the first Roboflow model
    model_config1 = {
        'source': 'roboflow',
        'model': 'people-falling-h8xp1/5',  # Replace with your actual model and version
        'key': 'xxxxxxxxxx'  # Replace with your actual API key
    }
    nn1 = oak.create_nn(model_config1, color)
    # Configure the second Roboflow model
    model_config2 = {
        'source': 'roboflow',
        'model': 'gesture-detection-pb99q/4',  # Update to version 4
        'key': 'xxxxxxxxxx'  # Use the same API key if applicable
    }
    nn2 = oak.create_nn(model_config2, color)
    # Define the detection trigger for 'fall' class for the first model
    trigger1 = DetectionTrigger(input=nn1, min_detections={'fall': 1}, cooldown=30)
    print("Trigger1 created")
    # Define the detection trigger for 'waving' class for the second model
    trigger2 = DetectionTrigger(input=nn2, min_detections={'waving': 1}, cooldown=30)
    print("Trigger2 created")
    # Define the custom actions to send an alert with different data values
    action1 = SendAlertAction(data_value="x1", name="Action1")
    action2 = SendAlertAction(data_value="x2", name="Action2")
    # Set up the trigger-action pairs
    oak.trigger_action(trigger=trigger1, action=action1)
    print("Trigger1 action set")
    oak.trigger_action(trigger=trigger2, action=action2)
    print("Trigger2 action set")
    # Set up callbacks to check detection packets
    oak.callback(nn1.out.main, callback=lambda packet: detection_callback(packet, "people-falling"), enable_visualizer=False)
    oak.callback(nn2.out.main, callback=lambda packet: detection_callback(packet, "gesture-detection"), enable_visualizer=False)
    # Start the camera and processing loop
    oak.start(blocking=True)

Excuse the poor formatting, the insert code function on the post reply is driving me crazy

Hi @citsystems ,
Does it work without the conditions/actions, so just reading detection results in a callback?