使用DeepStream和Akka Streams构建边缘AI服务器
晚上好!在Go和Python备受瞩目的时候,在公司内仍然固执地坚持使用Scala的是@rkyymmt@github。多样性很重要!
我想简单介绍一下今年在Edge AI的PoC项目中使用的Edge服务器所采用的技术。
家庭作业
硬件的配置如下。
深度传感器(Intel RealSense)通过Jetson Nano连接,其他相对较原始的传感器通过M5Camera的Grove连接器连接并通过Wi-Fi进行连接,将获取的数据流入Edge AI服务器的NVIDIA Jetson AGX Xavier。深度传感器的深度信息在Jetson Nano上进行了初步处理,只将检测信息发送到Xavier。

SW可以在中国本土进行本地化。
软件的组成如下:从M5摄像头的视频流使用基于GStreamer的NVIDIA DeepStream SDK进行管道处理、滤镜和AI处理,然后通过Kafka流入,并通过Alpakka和Scala进行操作。
另外,其他传感器信息则采用JSON格式,通过Akka Streams的HTTP实现Akka HTTP进行接收。

例如,接收上述JSON的Web服务器部分代码如下。
import java.io._
中略
import akka.event.Logging
final case class Value(
sensor_data: Int
)
final case class Sensor(
timestamp: String,
uid: String,
`type`: String,
values: Array[Value]
)
trait JsonSupport extends SprayJsonSupport with DefaultJsonProtocol {
implicit val valueFormat = jsonFormat1(Value)
implicit val sensorFormat = jsonFormat4(Sensor)
}
trait Service extends Directives with JsonSupport {
val route: Route = post {
extractLog { implicit log =>
entity(as[Sensor]) { sensor =>
val timestamp = sensor.timestamp
val uid = sensor.uid
val `type` = sensor.`type`
val values = sensor.values
中略
complete(StatusCodes.OK)
}
}
}
}
object Main extends Service {
implicit val system: ActorSystem = ActorSystem()
implicit val materializer: ActorMaterializer = ActorMaterializer()
def main(args: Array[String]): Unit = {
Http().bindAndHandle(route, "localhost", 8080)
}
}
最后
Go虽然不错,但Scala也不错。