上一次分享,大家可能对paddleseg的人像分割效果记忆犹新。最近抽时间学习了一下它的demo,然后基于http协议进行了重构,将本地的调用发布成http, 这样跨语言就比较轻量级的调用。先贴一个源码截图,
基本流程说明一下:初始化Predictor对象---》加载背景图片(红,蓝,白)---》合成新的图片
梳理清楚之后,我重新整理了整个代码逻辑,将核心方法进行了组装。
A:最外层的HTTP封装
seg方法就是完成对外的人像图片提取及背景色替换,并以base64串返回。其中get_img是获取本地上传图片流,同时路径参数增加背景色填充。最后调用server.segimage(img,bgcolor_type)的核心方法完成处理
B:本地上传流到服务器流的转换
C:服务器流的处理及背景参数处理
首先将流通过np转换成mat,bgtype目前支持红,蓝,白底。读取相应路径的背景图片,也转换成mat。最后打包塞给run方法,最后返回是一个合成后的mat。这里要提一下numpy_to_base64,它主要是将mat转换成base64,这样异构语言也能很方便的进行解析。
D:主函数声明
这里算是有点面像对象的意思,最后通过天生面像对像的JAVA语言来调用。
大功告成,python的确实简约强大。