基于OpenVINO的“semantic-segmentation-adas”模型,能够较为精确的分割出天空;使用OpenCV的seamlessClone等函数,实现天空的无缝替换;基于Django实现网络化部署。三者结合,实现并部署“天空替换”模型。
目前服务已经上线:打开地址:http://81.68.242.86:8000/upload 就可以体验,手机端和PC端都可以。虽然界面比较简陋,速度也比较慢,但是基本可用。总的来说,openvino自带的这个模型本来是用于道路分割的,不是专用的,能够出一定效果,但是有些时候不精确;再加上后期处理,还有粗糙的地方。但本文最为重要的是证明工具链的可行,探索一条道路,这个是有价值的。
OpenVINO Model Server的服务化部署——step1(OpenVINO™ Model Server Quickstart)
https://www.cnblogs.com/jsxyhelu/p/13796161.html
OpenVINO Model Server的服务化部署——step2(天空分割模型)
https://www.cnblogs.com/jsxyhelu/p/13829051.html
OpenVINO Model Server的服务化部署——step3(django服务构建)
https://www.cnblogs.com/jsxyhelu/p/13878335.html
OpenVINO Model Server的服务化部署——step4(实现天空替换)
https://www.cnblogs.com/jsxyhelu/p/13894565.html
===========================================================================
// 2019年11月30日
#include "pch.h"
#include "cv_helper.h"
using namespace cv;
using namespace std;
int main()
{
Mat matSrc = imread("E:\未来项目\天空替换(天空分割)\测试图片\测试图片\sky14.jpg");
Mat matCloud = imread("E:\未来项目\你的名字滤镜\算法实验\算法实验\sky1.png");
Mat matMask = imread("E:\未来项目\天空替换(天空分割)\skyInBlue.png",0);
matMask = (matMask == 124);
//统一按照matSrc的大小进行缩放
resize(matCloud, matCloud, matSrc.size());
resize(matMask, matMask, matSrc.size());
Point center = Point (matMask.cols / 2, matMask.rows / 2);
//Mat normal_clone;
//cartoonifyImage(matCloud, matCloud);
Mat normal_clone;
seamlessClone(matCloud, matSrc, matMask, center, normal_clone, MIXED_CLONE);
cv::waitKey();
}