基于OpenVINO Model Server打造人像抠图服务器

基于OpenVINO Model Server打造人像抠图服务器
抠图服务器 OpenVINO Model Server
本质上,OpenVINO Model Server(以下简称OVMS)部署在Docker中,Java服务器程序与部署了 OVMS的Docker运⾏在同⼀个Linux服务器中,与OVMS通过REST API⽅式进⾏通信。
⼀、主要流程
1. Java服务器程序:读取并解码图⽚,获得RGB数据 -> 构造请求 -> 发送请求
2. OVMS:收到请求 -> 进⾏推理 -> 返回响应
3. Java服务器程序:收到响应 -> 处理响应,合成新图⽚并存储
⼆、OVMS搭建
https://docs.openvino.ai/latest/ovms_docs_quick_start_guide.html
根据OVMS官⽅教程⼀步步来,只需要进⾏Step 1、2、3、4,就可以实现搭Linux+Docker+OVMS,后续Steps可忽略。
如果已经搞成功过上⾯链接face-detection示例,后续理解或处理起来就简单了。使⽤新给到的模型(model.xml、model.bin、model.mapping),部署使之成功:
三、Java服务器程序如何与OVMS进⾏REST通信?
1、读取并解码图⽚,获得RGB数据
将R、G、B分量数据单独抽离出来。Java应该有丰富的第三⽅开源库,可以做到,这⾥忽略。
2、构造请求
请求报⽂体是个JSON字符串,按如下格式构造:只有⼀个 src 字段,其值是⼀个四维数组,1x3x720x1280,3是RGB的3个通道,720是图⽚⾼度,1280是图⽚宽度。⽬前⽀持固定图像尺⼨1280x720像素,可按需修改。
3、发送请求
请求URL:
http://localhost:8000/v1/model***odel/versions/1:predict
⽅法:POST上⾯的JSON作为请求的报⽂体
4、处理响应,合成新图⽚并存储
响应报⽂体也是个JSON字符串,按如下格式解析:只有⼀个 predictions 字段,其值是⼀个四维数组,1x1x720x1280,含义是alpha透明度。
然后结合原始RGB图像数据、返回的 predictions 值、抠图后填充的背景颜⾊(⽐如红、蓝)进⾏处理,⽣成新的RGB数据,最后合成新的图形,并存储。⽐如抠图后填充红⾊(RGB值为(255,0,0)),代码如下:
⽐如抠图后填充蓝⾊(RGB值为(0,0,255)),代码如下:
四、参考⽂献
https://docs.openvino.ai/latest/ovms_docs_quick_start_guide.html
https://docs.openvino.ai/latest/ovms_docs_rest_api.html#predict
https://www.tensorflow.org/tfx/serving/api_rest#specifying_input_tensors_in_row_format