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)