/
ImgProcessServlet.java
130 lines (117 loc) · 5.08 KB
/
ImgProcessServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package servlet.img;
import bean.ImgProcessBean;
import com.google.gson.Gson;
import constant.BaseConsts;
import thread.ImageRunnable;
import util.CmdUtil;
import util.ImageUtil;
import util.ToolUtil;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Created by VOYAGER on 2018/8/4.
*/
@WebServlet(urlPatterns = "/img/imgProcess")
public class ImgProcessServlet extends HttpServlet {
private Random random = new Random();
private ExecutorService executor = Executors.newCachedThreadPool();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ToolUtil.setEncode(request, response);
String url = request.getParameter("url");
int type = Integer.parseInt(request.getParameter("type"));
String imgName = System.currentTimeMillis() +
(random.nextInt(8999) + 1000) +
".jpg";
String imgPath = BaseConsts.IMG_INPUT_Path +
BaseConsts.SPLASH + imgName;
ImageUtil.clearImages();
ImageUtil.downloadImage(url, imgPath);
switch (type) {
case BaseConsts.TYPE_MODEL_WAVE:
execPython1("cd " + BaseConsts.MODEL_PATH + BaseConsts.MODEL_WAVE);
break;
case BaseConsts.TYPE_MODEL_UDNIE:
execPython1("cd " + BaseConsts.MODEL_PATH + BaseConsts.MODEL_UDNIE);
break;
case BaseConsts.TYPE_MODEL_SCREAM:
execPython1("cd " + BaseConsts.MODEL_PATH + BaseConsts.MODEL_SCREAM);
break;
case BaseConsts.TYPE_MODEL_RAIN_PRINCESS:
execPython1("cd " + BaseConsts.MODEL_PATH + BaseConsts.MODEL_RAIN_PRINCESS);
break;
case BaseConsts.TYPE_MODEL_PAPRIKA:
execLua("cd " + BaseConsts.MODEL_PATH + BaseConsts.MODEL_PAPRIKA);
break;
case BaseConsts.TYPE_MODEL_HAYAO:
execLua("cd " + BaseConsts.MODEL_PATH + BaseConsts.MODEL_HAYAO);
break;
case BaseConsts.TYPE_MODEL_SPIRITED:
execLua("cd " + BaseConsts.MODEL_PATH + BaseConsts.MODEL_SPIRITED);
break;
case BaseConsts.TYPE_MODEL_GENDER_MALE:
execPython2("cd " + BaseConsts.MODEL_PATH + BaseConsts.MODEL_GENDER_MALE);
break;
case BaseConsts.TYPE_MODEL_GENDER_FEMALE:
execPython2("cd " + BaseConsts.MODEL_PATH + BaseConsts.MODEL_GENDER_FEMALE);
break;
case BaseConsts.TYPE_MODEL_SMILE:
execPython2("cd " + BaseConsts.MODEL_PATH + BaseConsts.MODEL_SMILE);
break;
case BaseConsts.TYPE_MODEL_HAIR_BLACK:
execPython2("cd " + BaseConsts.MODEL_PATH + BaseConsts.MODEL_HAIR_BLACK);
break;
case BaseConsts.TYPE_MODEL_HAIR_BROWN:
execPython2("cd " + BaseConsts.MODEL_PATH + BaseConsts.MODEL_HAIR_BROWN);
break;
}
handleResult(imgName, response);
}
private void chmodImg(String imgName) {
CmdUtil.exec("cd " + BaseConsts.IMG_INPUT_Path + ";chmod 777 " + imgName);
}
private void execPython1(String cmd) {
CmdUtil.exec(cmd + ";python evaluate.py");
}
private void execPython2(String cmd) {
CmdUtil.exec(cmd + ";python main.py");
}
private void execLua(String cmd) {
CmdUtil.exec(cmd + ";th test.lua");
}
private void handleResult(String imgName, HttpServletResponse response) {
List<String> output;
String imgOutputPath = BaseConsts.IMG_OUTPUT_Path + BaseConsts.SPLASH + imgName;
long startTime = System.currentTimeMillis();
while (System.currentTimeMillis() - startTime <= 1000 * 60) {
output = CmdUtil.execWithOutput("find " + BaseConsts.IMG_OUTPUT_Path + " -name " + imgName);
if (output != null && !output.isEmpty() && output.get(0).equals(imgOutputPath)) {
response(response, imgOutputPath);
ImageUtil.clearImages();
break;
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void response(HttpServletResponse response, String imgOutputPath) {
String url = ImageUtil.uploadImage(imgOutputPath);
if (response != null) {
ImgProcessBean bean = new ImgProcessBean();
bean.setStatus(BaseConsts.STATUS_SUCESSED);
bean.setUrl(url);
ToolUtil.responseJson(response, new Gson().toJson(bean));
}
}
}