该项目是一个 Show Case,展示如何借助 WebAssembly 技术,实时解析视频流,并将每一帧的图片调用深度学习模型,判断该帧中是否存在食物。
项目使用的相关技术:
- 流式计算框架是使用YoMo Streaming Serverless Framework构建
- Streaming Serverless Function 中通过 WasmEdge引入 WebAssembly,运行深度学习模型
- 深度学习模型来自于TensorFlow Hub 上 Google 训练的aiy/vision/classifier/food_V1
该Show Case的价值:
- 更快的网络:YoMo 的低时延传输使得计算机视觉AI可以被推至就近数据中心处理
- 更好的安全:在软件沙箱 WasmEdge 中处理外部用户提交的代码,保障安全
- 更低的Overhead:与 Docker 等流行的应用程序容器相比,WebAssembly 提供了更高级别的抽象,可以即时启动
- 为边缘计算优化:YoMo 配合高性能、轻量级的 Wasm 虚拟机,适合资源受限的边缘设备
$ git clone https://github.com/yomorun/yomo-wasmedge-tensorflow.git
$ curl -fsSL "https://get.yomo.run" | sh
$ yomo version
YoMo CLI version: v1.13.0
更多YoMo相关问题可参考YoMo文档
wget -qO- https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash -s -- -e all -p /usr/local
安装视频和图片处理依赖组件:
$ sudo apt-get update
$ sudo apt-get install -y ffmpeg libjpeg-dev libpng-dev
如何开发一个 serverless app?请参考官方例子:Create your serverless app,这里为集成 WasmEdge-tensorflow提供了一个例子 app.go。简单描述步骤如下:
-
拉取依赖包:
$ cd flow $ go get -u github.com/second-state/WasmEdge-go/wasmedge
-
下载训练好的模型文件 lite-model_aiy_vision_classifier_food_V1_1.tflite,并放置在目录
rust_mobilenet_food/src
中:$ wget 'https://storage.googleapis.com/tfhub-lite-models/google/lite-model/aiy/vision/classifier/food_V1/1.tflite' -O ./rust_mobilenet_food/src/lite-model_aiy_vision_classifier_food_V1_1.tflite
-
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh $ export PATH=$PATH:$HOME/.cargo/bin $ rustc --version
-
安装 wasm32-wasi target
$ rustup target add wasm32-wasi
-
编译 wasm 文件
$ cd rust_mobilenet_food $ cargo build --release --target wasm32-wasi # The output WASM will be `target/wasm32-wasi/release/rust_mobilenet_food_lib.wasm`. $ cd ..
-
拷贝编译好的 wasm 文件
$ cp rust_mobilenet_food/target/wasm32-wasi/release/rust_mobilenet_food_lib.wasm .
-
可选: 将 wasm文件编译为 AOT 模式
wasmedgec rust_mobilenet_food_lib.wasm rust_mobilenet_food_lib.so
$ yomo serve -c ./zipper/config.yaml
$ cd flow
$ go run -tags tensorflow,image app.go
下载文件
示例视频: hot-dog.mp4,
并保存至 source
目录:
$ wget -P source 'https://github.com/yomorun/yomo-wasmedge-tensorflow/releases/download/v0.2.0/hot-dog.mp4'
然后运行:
$ go run ./source/main.go ./source/hot-dog.mp4