Showing
11 changed files
with
89 additions
and
180 deletions
... | @@ -5,8 +5,8 @@ var path = require('path'); | ... | @@ -5,8 +5,8 @@ var path = require('path'); |
5 | var cookieParser = require('cookie-parser'); | 5 | var cookieParser = require('cookie-parser'); |
6 | var logger = require('morgan'); | 6 | var logger = require('morgan'); |
7 | var fs = require('fs') | 7 | var fs = require('fs') |
8 | -var AWS = require('aws-sdk'); | 8 | +var AWS = require('aws-sdk'); // AWS 의 서비스를 이용하기 위해 사용 |
9 | - | 9 | +const { Rekognition } = require('aws-sdk'); |
10 | 10 | ||
11 | // 이미지를 저장할 버킷 이름 | 11 | // 이미지를 저장할 버킷 이름 |
12 | var bucketName = "kindofyourdogimage"; | 12 | var bucketName = "kindofyourdogimage"; |
... | @@ -15,98 +15,14 @@ var bucketRegion = 'ap-northeast-2'; | ... | @@ -15,98 +15,14 @@ var bucketRegion = 'ap-northeast-2'; |
15 | // access key | 15 | // access key |
16 | var accessId= 'your_accessId'; | 16 | var accessId= 'your_accessId'; |
17 | // access secret key | 17 | // access secret key |
18 | -var secretKey = 'your_secretKey'; | 18 | +var secretKey = 'yout_secretKey'; |
19 | // AWS Cognito 인증 | 19 | // AWS Cognito 인증 |
20 | -//var identityPoolId = "ap-northeast-2:7cba9a17-588b-40d6-8c70-eb8ba4d573be"; | ||
21 | - | ||
22 | - | ||
23 | -// AWS의 config 정보를 Update해준다 -> 이용자가 S3 버킷에 접근 가능하다 | ||
24 | -/* | ||
25 | -AWS.config.update({ | ||
26 | - region:bucketRegion, | ||
27 | - credentials:new AWS.CognitoIdentityCredentials({ | ||
28 | - IdentityPoolId:identityPoolId, | ||
29 | - }) | ||
30 | -}) | ||
31 | -*/ | ||
32 | AWS.config.update({ | 20 | AWS.config.update({ |
33 | region:bucketRegion, | 21 | region:bucketRegion, |
34 | accessKeyId:accessId, | 22 | accessKeyId:accessId, |
35 | secretAccessKey:secretKey | 23 | secretAccessKey:secretKey |
36 | }); | 24 | }); |
37 | 25 | ||
38 | -// 내가 사용할 S3 | ||
39 | -var s3 = new AWS.S3({ | ||
40 | - apiVersion: "2006-03-01", | ||
41 | - params: {Bucket: bucketName} | ||
42 | -}); | ||
43 | - | ||
44 | -const fileName = 'puppy.jpg'; | ||
45 | - | ||
46 | -// 파일 업로드 | ||
47 | -const uploadFile = (fileName) => { | ||
48 | - const fileContent = fs.readFileSync(fileName); | ||
49 | - const params = { | ||
50 | - Bucket: bucketName, | ||
51 | - Key: fileName, // File name you want to save as in S3 | ||
52 | - Body: fileContent } | ||
53 | -; | ||
54 | - s3.upload(params, function(err, data) { | ||
55 | - if (err) { throw err; } | ||
56 | - console.log(`File uploaded successfully. ${data.Location}`); | ||
57 | - }); | ||
58 | -}; | ||
59 | -uploadFile(fileName); | ||
60 | - | ||
61 | -/* | ||
62 | -// rekognition 객체 | ||
63 | -const client = new AWS.Rekognition(); | ||
64 | - | ||
65 | -const params = { | ||
66 | - "Image": { | ||
67 | - "S3Object": { | ||
68 | - "Bucket": bucketName, | ||
69 | - "Name": fileName | ||
70 | - } | ||
71 | - }, | ||
72 | - "MaxLabels": 10, | ||
73 | - "MinConfidence": 75 | ||
74 | -} | ||
75 | - | ||
76 | - | ||
77 | - | ||
78 | -// 이미지 분석하기 | ||
79 | -client.detectLabels(params, function(err, response) { | ||
80 | - if (err) { | ||
81 | - console.log(err, err.stack); // an error occurred | ||
82 | - } else { | ||
83 | - console.log(`Detected labels for: ${photo}`) | ||
84 | - response.Labels.forEach(label => { | ||
85 | - console.log(`Label: ${label.Name}`) | ||
86 | - console.log(`Confidence: ${label.Confidence}`) | ||
87 | - console.log("Instances:") | ||
88 | - label.Instances.forEach(instance => { | ||
89 | - let box = instance.BoundingBox | ||
90 | - console.log(" Bounding box:") | ||
91 | - console.log(` Top: ${box.Top}`) | ||
92 | - console.log(` Left: ${box.Left}`) | ||
93 | - console.log(` Width: ${box.Width}`) | ||
94 | - console.log(` Height: ${box.Height}`) | ||
95 | - console.log(` Confidence: ${instance.Confidence}`) | ||
96 | - }) | ||
97 | - console.log("Parents:") | ||
98 | - label.Parents.forEach(parent => { | ||
99 | - console.log(` ${parent.Name}`) | ||
100 | - }) | ||
101 | - console.log("------------") | ||
102 | - console.log("") | ||
103 | - }) // for response.labels | ||
104 | - } // if | ||
105 | -}); | ||
106 | -*/ | ||
107 | - | ||
108 | -var indexRouter = require('./routes/index'); | ||
109 | -var usersRouter = require('./routes/users'); | ||
110 | // image업로드 시 해당 route기능 사용 | 26 | // image업로드 시 해당 route기능 사용 |
111 | 27 | ||
112 | var app = express(); | 28 | var app = express(); |
... | @@ -121,90 +37,75 @@ app.use(express.urlencoded({ extended: false })); | ... | @@ -121,90 +37,75 @@ app.use(express.urlencoded({ extended: false })); |
121 | app.use(cookieParser()); | 37 | app.use(cookieParser()); |
122 | app.use(express.static(path.join(__dirname, 'public'))); | 38 | app.use(express.static(path.join(__dirname, 'public'))); |
123 | 39 | ||
124 | -app.use('/', indexRouter); | ||
125 | -app.use('/users', usersRouter); | ||
126 | 40 | ||
127 | // image 올리는 화면 | 41 | // image 올리는 화면 |
128 | -app.get('/form', function(req, res){ | 42 | +app.get('/', function(req, res){ |
129 | - var output = ` | 43 | + res.render('index'); |
130 | - <html> | ||
131 | - <body> | ||
132 | - <form enctype="multipart/form-data" method="post" action="upload_receiver"> | ||
133 | - <input type="file" name="userfile"> | ||
134 | - <input type="submit"> | ||
135 | - </form> | ||
136 | - </body> | ||
137 | - </html> | ||
138 | - `; | ||
139 | - res.send(output); | ||
140 | - console.log(output); | ||
141 | }); | 44 | }); |
142 | 45 | ||
143 | // image를 받았을 때 | 46 | // image를 받았을 때 |
144 | app.post('/upload_receiver', function(req,res){ | 47 | app.post('/upload_receiver', function(req,res){ |
48 | + //rekognition 객체 | ||
49 | + | ||
50 | + var dogKind = ""; | ||
51 | + //req 받아옴 | ||
145 | var form = new formidable.IncomingForm(); | 52 | var form = new formidable.IncomingForm(); |
146 | - console.log(form); | ||
147 | - const client = new AWS.Rekognition(); | ||
148 | - | ||
149 | - const params = { | ||
150 | - "Image": { | ||
151 | - "S3Object": { | ||
152 | - "Bucket": bucketName, | ||
153 | - "Name": fileName | ||
154 | - } | ||
155 | - }, | ||
156 | - "MaxLabels": 10, | ||
157 | - "MinConfidence": 75 | ||
158 | - } | ||
159 | - | ||
160 | - // 이미지 분석하기 | ||
161 | - client.detectLabels(params, function(err, response) { | ||
162 | - if (err) { | ||
163 | - console.log(err, err.stack); // an error occurred | ||
164 | - } else { | ||
165 | - console.log(`Detected labels for: ${form.name}`) | ||
166 | - response.Labels.forEach(label => { | ||
167 | - console.log(`Label: ${label.Name}`) | ||
168 | - console.log(`Confidence: ${label.Confidence}`) | ||
169 | - console.log("Instances:") | ||
170 | - label.Instances.forEach(instance => { | ||
171 | - let box = instance.BoundingBox | ||
172 | - console.log(" Bounding box:") | ||
173 | - console.log(` Top: ${box.Top}`) | ||
174 | - console.log(` Left: ${box.Left}`) | ||
175 | - console.log(` Width: ${box.Width}`) | ||
176 | - console.log(` Height: ${box.Height}`) | ||
177 | - console.log(` Confidence: ${instance.Confidence}`) | ||
178 | - }) | ||
179 | - console.log("Parents:") | ||
180 | - label.Parents.forEach(parent => { | ||
181 | - console.log(` ${parent.Name}`) | ||
182 | - }) | ||
183 | - console.log("------------") | ||
184 | - console.log("") | ||
185 | - }) // for response.labels | ||
186 | - } // if | ||
187 | - }); | ||
188 | 53 | ||
189 | - // S3에 upload해주기 | 54 | + //form을 종류별로 파싱함 |
190 | form.parse(req, function(err, fields, files){ | 55 | form.parse(req, function(err, fields, files){ |
56 | + //s3객체를 만듦 | ||
191 | var s3 = new AWS.S3(); | 57 | var s3 = new AWS.S3(); |
58 | + //s3에 저장할 형식을 만듦 | ||
192 | var params = { | 59 | var params = { |
193 | Bucket:bucketName, | 60 | Bucket:bucketName, |
194 | ACL:'public-read', | 61 | ACL:'public-read', |
195 | Key:files.userfile.name, | 62 | Key:files.userfile.name, |
196 | Body: require('fs').createReadStream(files.userfile.path) | 63 | Body: require('fs').createReadStream(files.userfile.path) |
197 | } | 64 | } |
65 | + console.log(files.userfile.name); | ||
66 | + //s3에 저장함 | ||
198 | s3.upload(params, function(err, data){ | 67 | s3.upload(params, function(err, data){ |
199 | var result=''; | 68 | var result=''; |
200 | if(err) | 69 | if(err) |
201 | result = 'Fail'; | 70 | result = 'Fail'; |
202 | - else | 71 | + else{ |
72 | + params = { | ||
73 | + "Image": { | ||
74 | + "S3Object": { | ||
75 | + "Bucket": bucketName, | ||
76 | + "Name": files.userfile.name | ||
77 | + } | ||
78 | + }, | ||
79 | + "MaxLabels": 10, | ||
80 | + "MinConfidence": 75 | ||
81 | + }; | ||
82 | + | ||
83 | + | ||
84 | + // rekogition으로 데이터 분석 | ||
85 | + | ||
86 | + var client = new Rekognition(); | ||
87 | + | ||
88 | + client.detectLabels(params, function(err, response) { | ||
89 | + console.log(params); | ||
90 | + response.Labels.some(label => { | ||
91 | + if(label.Parents.length > 4 && label.Name != 'Puppy') { | ||
92 | + console.log(label.Name); | ||
93 | + dogKind = label.Name; | ||
94 | + console.log(dogKind); | ||
95 | + res.render('kind',{dogKind:dogKind}); | ||
96 | + return true; | ||
97 | + } | ||
98 | + }); | ||
99 | + | ||
100 | + }); | ||
203 | result = `<img src="${data.Location}>`; | 101 | result = `<img src="${data.Location}>`; |
204 | - res.send(`<html><body>${result}</body></html`) | 102 | + console.log(result); |
103 | + } | ||
205 | }); | 104 | }); |
206 | - console.log(err, fields,files); | 105 | + |
207 | }); | 106 | }); |
107 | + | ||
108 | + //console.log(err, fields,files) | ||
208 | }); | 109 | }); |
209 | 110 | ||
210 | // catch 404 and forward to error handler | 111 | // catch 404 and forward to error handler | ... | ... |
images/logo.png
0 → 100644
2.26 KB
images/screenshot.png
0 → 100644
6.2 KB
package-lock.json
0 → 100644
This diff is collapsed. Click to expand it.
routes/index.js
deleted
100644 → 0
routes/users.js
deleted
100644 → 0
1 | <!DOCTYPE html> | 1 | <!DOCTYPE html> |
2 | <html> | 2 | <html> |
3 | <head> | 3 | <head> |
4 | - <!-- **DO THIS**: --> | 4 | + <title>KindOfYourDog</title> |
5 | - <!-- Replace SDK_VERSION_NUMBER with the current SDK version number --> | 5 | + <meta charset="utf-8" /> |
6 | - <script src="https://sdk.amazonaws.com/js/aws-sdk-SDK_VERSION_NUMBER.js"></script> | 6 | + <link rel="stylesheet" href="stylesheets/style.css"> |
7 | - <script src="./app.js"></script> | ||
8 | - <script> | ||
9 | - function getHtml(template) { | ||
10 | - return template.join('\n'); | ||
11 | - } | ||
12 | - listAlbums(); | ||
13 | - </script> | ||
14 | </head> | 7 | </head> |
15 | <body> | 8 | <body> |
16 | - <h1>My Photo Albums App</h1> | 9 | + <h1>Kind of Your Dog</h1> |
17 | - <div id="app"></div> | 10 | + <div> |
11 | + <img src = "puppy.jpg"> | ||
12 | + | ||
13 | + </div> | ||
14 | + <div> | ||
15 | + <form enctype="multipart/form-data" method="post" action="upload_receiver"> | ||
16 | + <input type="file" accept="image/*" name="userfile"> | ||
17 | + <input type="submit"> | ||
18 | + </form> | ||
19 | + </div> | ||
20 | + <div> | ||
21 | + <h2>이 개의 종류는</h2> | ||
22 | + </div> | ||
18 | </body> | 23 | </body> |
19 | -</html> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
24 | +</html> | ... | ... |
views/kind.ejs
0 → 100644
1 | +<!DOCTYPE html> | ||
2 | +<html> | ||
3 | + <head> | ||
4 | + <title>KindOfYourDog</title> | ||
5 | + <meta charset="utf-8" /> | ||
6 | + <link rel="stylesheet" href="stylesheets/style.css"> | ||
7 | + </head> | ||
8 | + <body> | ||
9 | + <h1>Kind of Your Dog</h1> | ||
10 | + <div> | ||
11 | + <form enctype="multipart/form-data" method="post" action="upload_receiver"> | ||
12 | + <input type="file" accept="image/*" name="userfile" id="userfile" > | ||
13 | + <input type="submit"> | ||
14 | + </form> | ||
15 | + </div> | ||
16 | + <div> | ||
17 | + <h2>이 개의 종류는</h2> | ||
18 | + <h3><%=dogKind%></h3> | ||
19 | + </div> | ||
20 | + </body> | ||
21 | +</html> |
views/puppy.jpg
0 → 100644
29.7 KB
-
Please register or login to post a comment