跳到内容


将触发器添加到 CodeProject.AI 服务器

对数据进行 AI 推理操作以获取关于数据形式或内容预测是一回事,但最终目标是能够根据这些预测采取行动。

通常,这是通过 API 完成的。例如,客户端应用程序将图像发送到对象检测或分类模块,并根据服务器的响应,该客户端将采取(或不采取)适当的行动。

但是,有时你只是想要一些简单的操作,比如调用脚本或 shell 命令。为此,你可以使用触发器。

触发器定义在 /Server/FrontEnd/triggers.json 文件中。一个例子是

JSON
{
  "Queue"                     : "objectdetection_queue",
  "PredictionsCollectionName" : "predictions",
  "PropertyName"              : "label",
  "PropertyValue"             : "car",
  "PropertyComparison"        : "equals",
  "Confidence"                : 0.5,
  "ConfidenceComparison"      : "greaterthan",
  "PlatformTasks" : {
    "Windows" : { 
      "Command": "cmd",
      "Args": "/c echo Hi Windows. I see a car",
      "Type": "Command"
    },
    "Linux" : {
      "Command": "bash",
      "Args": "echo Hi Linux. I see a car",
      "Type": "Command"
    },
    "LinuxArm64" : {
      "Command": "bash",
      "Args": "echo Hi Linux. I see a car",
      "Type": "Command" 
    },
    "macOS" : {
      "Command": "zsh",
      "Args": "echo Hi Linux. I see a car",
      "Type": "Command"
    },
  }
}

当发生推理时,AI 模块的响应会通过与请求放置在同一队列返回到服务器。可以单独监视每个队列,以避免不必要的处理。

当收到响应时,将检查该响应的有效负载,以查看是否满足任何触发条件。触发条件如下

条件 解释
队列 要监视的队列
属性名称 (PropertyName) 要检查的响应中的属性名称
属性值 (PropertyValue) 要检查的响应中属性的值。
属性比较 (PropertyComparison) 属性值比较方法。这是用于将 PropertyValue 与响应中 PropertyName 属性的值进行比较的操作。有关比较类型,请参见下文。
预测集合名称 (PredictionsCollectionName) 如果指定,系统将查找具有此名称的集合,并对该集合中的每个对象应用 PropertyName / PropertyValue 检查,而不是在响应对象的根目录查找属性 PropertyName
置信度 (Confidence) 要与推理返回的置信度分数进行比较的置信度值
置信度比较 (ConfidenceComparison) 置信度比较方法。这是用于将 Confidence 值与推理返回的置信度分数进行比较的操作
平台任务 (PlatformTasks) 根据平台执行的一组任务。参见下文

比较方法可以是以下之一

  • Equals
  • 小于 (LessThan)
  • 小于或等于 (LessThanOrEquals)
  • 大于
  • 大于或等于 (GreaterThanOrEquals)
  • 不等于 (NotEquals)

假设我们想要监视名为 objectdetection_queue 的队列,并且我们有兴趣发现标签为 'car' 且置信度至少为 80% 的结果。这将转换为

JSON
{
  "Queue"                     : "objectdetection_queue",
  "PropertyName"              : "label",
  "PropertyValue"             : "car",
  "PropertyComparison"        : "equals",
  "Confidence"                : 0.8,
  "ConfidenceComparison"      : "greaterthanorequals",
  ...
}
但是,假设我们的对象检测模块返回一个它找到的对象的集合,位于 predictions 集合中。该集合中的每个项目都有一个标签和置信度。我们只需提供一个 PredictionsCollectionName

JSON
{
  "Queue"                     : "objectdetection_queue",
  "PredictionsCollectionName" : "predictions",
  "PropertyName"              : "label",
  "PropertyValue"             : "car",
  "PropertyComparison"        : "equals",
  "Confidence"                : 0.8,
  "ConfidenceComparison"      : "greaterthanorequals",
  ...
}

如果给定队列的触发条件得到满足,则将执行给定平台的任务。任务列在 PlatformTasks 集合下,每个平台都有其自己的条目。

JSON
{
  "Queue"                     : "objectdetection_queue",
  "PredictionsCollectionName" : "predictions",
  "PropertyName"              : "label",
  "PropertyValue"             : "car",
  "PropertyComparison"        : "equals",
  "Confidence"                : 0.8,
  "ConfidenceComparison"      : "greaterthanorequals",

  "PlatformTasks" : {
    "Windows" : { 
      "Command": "cmd",
      "Args": "/c echo Hi Windows. I see a car",
      "Type": "Command"
    },
    "Linux" : {
      "Command": "bash",
      "Args": "echo Hi Linux. I see a car",
      "Type": "Command"
    }
  }
}

支持的平台是

  • Windows
  • WindowsArm64
  • Linux
  • LinuxArm64
  • MacOS
  • MacOSArm64
任务属性 (Task Property) 解释
命令 要在给定平台上执行的命令
参数 (Args) 要提供给该命令的参数
类型 命令类型。目前仅支持 "Command"

© . All rights reserved.