박준혁

기본 기능 구현 완성

얼굴인식
감정인식
감정에 따른 코멘트
1 -<!DOCTYPE html>
2 -<html>
3 -
4 -<head>
5 - <link rel='stylesheet' href='/stylesheets/style.css' />
6 - <meta charset="utf-8">
7 - <meta http-equiv="X-UA-Compatible" content="IE=edge">
8 - <meta name="viewport" content="width=device-width, initial-scale=1">
9 - <title>애인 감정 분석</title>
10 -
11 - <!-- 부트스트랩 -->
12 - <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
13 -</head>
14 -
15 -<body>
16 - <nav class="navbar navbar-inverse navbar-fixed-top">
17 - <div class="container">
18 - <div class="navbar-header">
19 - <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
20 - <span class="sr-only">Toggle navigation</span>
21 - <span class="icon-bar"></span>
22 - <span class="icon-bar"></span>
23 - <span class="icon-bar"></span>
24 - </button>
25 - <a class="navbar-brand" href="#">애인이랑 싸웠냐?</a>
26 - </div>
27 - <div id="navbar" class="navbar-collapse collapse">
28 - <!-- <form class="navbar-form navbar-right">
29 - <div class="form-group">
30 - <input type="text" placeholder="Email" class="form-control">
31 - </div>
32 - <div class="form-group">
33 - <input type="password" placeholder="Password" class="form-control">
34 - </div>
35 - <button type="submit" class="btn btn-success">Sign in</button>
36 - </form> -->
37 - </div>
38 - <!--/.navbar-collapse -->
39 - </div>
40 - </nav>
41 -
42 - <!-- Main jumbotron for a primary marketing message or call to action -->
43 - <div class="jumbotron">
44 - <div class="container">
45 - <h1>와서 애인 기분이나 알고가</h1>
46 - <p>싸운 후 애인 사진을 주면 내가 다 해결해줄게 </p>
47 - <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more &raquo;</a></p>
48 - </div>
49 - </div>
50 -
51 - <div class="container">
52 - <!-- Example row of columns -->
53 - <div class="row">
54 - <div class="col-md-4">
55 - <h2>Heading</h2>
56 - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
57 - <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>
58 - </div>
59 - <div class="col-md-4">
60 - <h2>Heading</h2>
61 - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
62 - <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>
63 - </div>
64 - <div class="col-md-4">
65 - <h2>Heading</h2>
66 - <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
67 - <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>
68 - </div>
69 - </div>
70 -
71 - <hr>
72 -
73 - <footer>
74 - <p>&copy; KHU Uni OpenSource 2017-2</p>
75 - </footer>
76 - </div>
77 - <!-- /container -->
78 - <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
79 - <!-- 모든 컴파일된 플러그인을 포함합니다 (아래), 원하지 않는다면 필요한 각각의 파일을 포함하세요 -->
80 - <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
81 -</body>
82 -
83 -</html>
...\ No newline at end of file ...\ No newline at end of file
1 var express = require('express'); 1 var express = require('express');
2 var app = express(); 2 var app = express();
3 +app.use(express.static('uploads'));
3 var request = require('request'); 4 var request = require('request');
4 var bodyParser = require('body-parser'); 5 var bodyParser = require('body-parser');
5 var multer = require('multer'); 6 var multer = require('multer');
...@@ -30,9 +31,12 @@ app.get('/upload', function(req, res){ ...@@ -30,9 +31,12 @@ app.get('/upload', function(req, res){
30 var client_id = 'ImMhCEh5tBaGslxupoyz'; 31 var client_id = 'ImMhCEh5tBaGslxupoyz';
31 var client_secret = 'SyWnZc01_I'; 32 var client_secret = 'SyWnZc01_I';
32 var fs = require('fs'); 33 var fs = require('fs');
34 +var imgfilename = '/';
33 app.post('/faceemotions', upload.single('userfile'), function (req, res) { 35 app.post('/faceemotions', upload.single('userfile'), function (req, res) {
34 //var api_url = 'https://openapi.naver.com/v1/vision/celebrity'; // 유명인 인식 36 //var api_url = 'https://openapi.naver.com/v1/vision/celebrity'; // 유명인 인식
35 var api_url = 'https://openapi.naver.com/v1/vision/face'; // 얼굴 감지 37 var api_url = 'https://openapi.naver.com/v1/vision/face'; // 얼굴 감지
38 +
39 + imgfilename += req.file.filename;
36 var filename = req.file.filename; 40 var filename = req.file.filename;
37 41
38 var _formData = { 42 var _formData = {
...@@ -46,7 +50,7 @@ app.post('/faceemotions', upload.single('userfile'), function (req, res) { ...@@ -46,7 +50,7 @@ app.post('/faceemotions', upload.single('userfile'), function (req, res) {
46 _req.pipe(fs.createWriteStream('./json/faceInfor.json')); 50 _req.pipe(fs.createWriteStream('./json/faceInfor.json'));
47 }); 51 });
48 console.log('request.head:'+ request.head ); 52 console.log('request.head:'+ request.head );
49 - //파일로 출력 응답시간 1초해야 함 53 + //파일로 출력 응답시간 1초해야 함 나중에 고쳐야할듯
50 res.send("<meta http-equiv='refresh' content='1;url=/answer'>"); 54 res.send("<meta http-equiv='refresh' content='1;url=/answer'>");
51 }); 55 });
52 56
...@@ -63,19 +67,60 @@ app.get('/', function(req, res){ ...@@ -63,19 +67,60 @@ app.get('/', function(req, res){
63 67
64 }); 68 });
65 69
66 -app.get('/template', function(req, res){ 70 +// app.get('/template', function(req, res){
67 - res.render('temp'); 71 +// res.render('temp', {time:Date(), title:'Jade'});
68 -}); 72 +// });
69 73
70 app.get('/answer', function(req, res){ 74 app.get('/answer', function(req, res){
71 // //res.send(req.query.emotion); 75 // //res.send(req.query.emotion);
72 var data = fs.readFileSync('./json/faceInfor.json'); 76 var data = fs.readFileSync('./json/faceInfor.json');
73 var faceInforJson = JSON.parse(data); 77 var faceInforJson = JSON.parse(data);
74 console.log('JSON 내용: ' + faceInforJson.faces[0].emotion.value); 78 console.log('JSON 내용: ' + faceInforJson.faces[0].emotion.value);
75 - // //var emotion = faceInforJson.faces[0].emotion.value; 79 + var emotion = faceInforJson.faces[0].emotion.value;
76 - res.send('완료'); 80 + var emotionKr;
81 + var answerToUser;
82 + if(emotion === 'angry'){
83 + emotionKr = '야 니 애인 화남';
84 + answerToUser = '가서 빨리 손이 발이 될 때까지 싹싹 빌어라';
85 + } else if(emotion === 'disgust'){
86 + emotionKr = '야 너 역겹단다';
87 + answerToUser = '이건 답이 없다 역겁다는데 어떡해 헤어질 준비 ㄱㄱ';
88 + }
89 + else if(emotion === 'fear'){
90 + emotionKr = '너가 이젠 무섭다는데?';
91 + answerToUser = '혹시 때렸냐? 쓰레기네 이거 빨리 헤어져줘라';
92 + }
93 + else if(emotion === 'laugh'){
94 + emotionKr = '야 니 애인 웃는다';
95 + answerToUser = '너무 화나서 웃음밖에 안나오나본데? 빨리 가서 싹싹 빌어라';
96 + }
97 + else if(emotion === 'neutral'){
98 + emotionKr = '야 니애인 정색한다 정색';
99 + answerToUser = '그래도 사랑 싸움에 정색정도는 뭐... 가서 가볍게 애교 부려주자';
100 + }
101 + else if(emotion === 'sad'){
102 + emotionKr = '야 운다 울어...';
103 + answerToUser = '가서 안아줘라 언넝';
104 + }
105 + else if(emotion === 'surprise'){
106 + emotionKr = '너란 놈한테 놀랐대';
107 + answerToUser = '이렇게까지 쓰레기인줄 몰랐다는데? 헤어질 준비 ㄱㄱ';
108 + }
109 + else if(emotion === 'smile'){
110 + emotionKr = '니 애인 즉당히 웃는데?';
111 + answerToUser = '너가 맘에 안들지만 참고있나봐 가서 빨리 풀어주자';
112 + }
113 + else if(emotion === 'talking'){
114 + emotionKr = '야 니 애인 랩한다';
115 + answerToUser = '차라리 저렇게 너한테 다 털어놓는게 좋은거야 두 귀 열고 들어줘 빨리';
116 + }
117 + res.render('answer', {emotion:emotionKr, answer:answerToUser, imgfilename:imgfilename});
77 }); 118 });
78 119
120 +// app.get('/img', function(req, res){
121 +// res.send('<img src="/joy_sad.jpg">');
122 +// });
123 +
79 app.listen(3000, function () { 124 app.listen(3000, function () {
80 console.log('Connected 3000!'); 125 console.log('Connected 3000!');
81 }); 126 });
......
...@@ -46,38 +46,16 @@ ...@@ -46,38 +46,16 @@
46 <p>싸운 후 애인 사진을 주면 내가 다 해결해줄게 </p> 46 <p>싸운 후 애인 사진을 주면 내가 다 해결해줄게 </p>
47 <!-- <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more &raquo;</a></p> --> 47 <!-- <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more &raquo;</a></p> -->
48 <form action="faceemotions" method="post" enctype="multipart/form-data"> 48 <form action="faceemotions" method="post" enctype="multipart/form-data">
49 - <input type="file" name="userfile">
50 - <input class="btn btn-primary btn-lg" type="submit">
51 - </form>
52 - </div>
53 - </div>
54 -
55 - <div class="container">
56 - <!-- Example row of columns -->
57 - <div class="row">
58 - <div class="col-md-4">
59 - <h2>Heading</h2>
60 - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
61 - <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>
62 - </div>
63 <div class="col-md-4"> 49 <div class="col-md-4">
64 - <h2>Heading</h2> 50 + <input type="file" name="userfile">
65 - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
66 - <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>
67 </div> 51 </div>
68 <div class="col-md-4"> 52 <div class="col-md-4">
69 - <h2>Heading</h2> 53 + <input class="btn btn-primary btn-lg" type="submit">
70 - <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
71 - <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>
72 </div> 54 </div>
55 + </form>
73 </div> 56 </div>
74 -
75 - <hr>
76 -
77 - <footer>
78 - <p>&copy; KHU Uni OpenSource 2017-2</p>
79 - </footer>
80 </div> 57 </div>
58 +
81 <!-- /container --> 59 <!-- /container -->
82 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> 60 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
83 <!-- 모든 컴파일된 플러그인을 포함합니다 (아래), 원하지 않는다면 필요한 각각의 파일을 포함하세요 --> 61 <!-- 모든 컴파일된 플러그인을 포함합니다 (아래), 원하지 않는다면 필요한 각각의 파일을 포함하세요 -->
......
1 -{"info":{"size":{"width":540,"height":810},"faceCount":1},"faces":[{"roi":{"x":208,"y":139,"width":147,"height":147},"landmark":{"leftEye":{"x":246,"y":180},"rightEye":{"x":319,"y":163},"nose":{"x":294,"y":212},"leftMouth":{"x":265,"y":246},"rightMouth":{"x":330,"y":227}},"gender":{"value":"female","confidence":0.999985},"age":{"value":"21~25","confidence":0.443677},"emotion":{"value":"laugh","confidence":0.841533},"pose":{"value":"frontal_face","confidence":0.999054}}]}
...\ No newline at end of file ...\ No newline at end of file
1 +{"info":{"size":{"width":699,"height":400},"faceCount":1},"faces":[{"roi":{"x":329,"y":40,"width":129,"height":129},"landmark":{"leftEye":{"x":371,"y":73},"rightEye":{"x":429,"y":74},"nose":{"x":407,"y":105},"leftMouth":{"x":368,"y":140},"rightMouth":{"x":423,"y":142}},"gender":{"value":"female","confidence":0.999934},"age":{"value":"16~20","confidence":0.252679},"emotion":{"value":"sad","confidence":1.0},"pose":{"value":"frontal_face","confidence":0.999559}}]}
...\ No newline at end of file ...\ No newline at end of file
......
1 +doctype html
2 +html
3 + head
4 + link(rel='stylesheet', href='/stylesheets/style.css')
5 + meta(charset='utf-8')
6 + meta(http-equiv='X-UA-Compatible', content='IE=edge')
7 + meta(name='viewport', content='width=device-width, initial-scale=1')
8 + title 애인 감정 분석
9 + // 부트스트랩
10 + link(rel='stylesheet', href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css')
11 + body
12 + nav.navbar.navbar-inverse.navbar-fixed-top
13 + .container
14 + .navbar-header
15 + button.navbar-toggle.collapsed(type='button', data-toggle='collapse', data-target='#navbar', aria-expanded='false', aria-controls='navbar')
16 + span.sr-only Toggle navigation
17 + span.icon-bar
18 + span.icon-bar
19 + span.icon-bar
20 + a.navbar-brand(href='#') 애인이랑 싸웠냐?
21 + #navbar.navbar-collapse.collapse
22 + //
23 + <form class="navbar-form navbar-right">
24 + <div class="form-group">
25 + <input type="text" placeholder="Email" class="form-control">
26 + </div>
27 + <div class="form-group">
28 + <input type="password" placeholder="Password" class="form-control">
29 + </div>
30 + <button type="submit" class="btn btn-success">Sign in</button>
31 + </form>
32 + // /.navbar-collapse
33 + // Main jumbotron for a primary marketing message or call to action
34 + .jumbotron
35 + .container
36 + h1 와서 애인 기분이나 알고가
37 + p 싸운 후 애인 사진을 주면 내가 다 해결해줄게
38 + // <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more &raquo;</a></p>
39 + form(action='faceemotions', method='post', enctype='multipart/form-data')
40 + .col-md-4
41 + input(type='file', name='userfile')
42 + .col-md-4
43 + input.btn.btn-primary.btn-lg(type='submit')
44 + .col-md-4
45 + img(src= imgfilename)
46 + .container
47 + // Example row of columns
48 + .row
49 + .col-md-4
50 + h2 니 애인 기분
51 + p
52 + div= emotion
53 + p
54 +
55 + .col-md-4
56 + h2 해결책
57 + p
58 + div= answer
59 + p
60 +
61 + hr
62 + footer
63 + p © KHU Uni OpenSource 2017-2
64 + // /container
65 + script(src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js')
66 + // 모든 컴파일된 플러그인을 포함합니다 (아래), 원하지 않는다면 필요한 각각의 파일을 포함하세요
67 + script(src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js')
1 html 1 html
2 - head
3 - meta(charset='utf-8')
4 - body
5 - h1 hello jade
6 - ul
7 - -for(var i=0; i<5; i++)
8 - li coding
9 - eatate= temp;
...\ No newline at end of file ...\ No newline at end of file
2 + head
3 + title= title
4 + body
5 + h1 Hello Jade
6 + ul
7 + -for(var i=0; i<5; i++)
8 + li coding
9 + div= time
...\ No newline at end of file ...\ No newline at end of file
......