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

openlab_4276841a 更新于 2年前

基于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

0个评论