使用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。

HW構成

SW可以在中国本土进行本地化。

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

スクリーンショット 2019-12-18 0.00.59.png

例如,接收上述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也不错。

广告
将在 10 秒后关闭
bannerAds