Showing
5 changed files
with
621 additions
and
193 deletions
1 | const express = require('express'); | 1 | const express = require('express'); |
2 | const fs = require('fs'); | 2 | const fs = require('fs'); |
3 | -const { | 3 | +const ffmpeg = require('ffmpeg'); |
4 | - cv, | 4 | +const request = require('request') |
5 | - getDataFilePath, | ||
6 | - drawBlueRect, | ||
7 | - drawGreenRect | ||
8 | -} = require('./utils'); | ||
9 | - | ||
10 | -const openCV = require('opencv4nodejs'); | ||
11 | 5 | ||
12 | const router = express.Router(); | 6 | const router = express.Router(); |
13 | - | 7 | +const path = require('path'); |
14 | //================================================================ | 8 | //================================================================ |
15 | 9 | ||
16 | router.post('/videoResult', function (req, res) { | 10 | router.post('/videoResult', function (req, res) { |
17 | 11 | ||
18 | try { | 12 | try { |
19 | - let preview = req.body[0].preview; | 13 | + let preview = req.body[0].preview; |
20 | - | 14 | + |
21 | - str = preview.replace(/^data:(.*?);base64,/, ""); | 15 | + str = preview.replace(/^data:(.*?);base64,/, ""); |
22 | - str = str.replace(/ /g, '+'); | 16 | + str = str.replace(/ /g, '+'); |
23 | - | 17 | + |
18 | + | ||
19 | + fs.writeFileSync(`./data/temp.mp4`, str, 'base64', function (err) { | ||
20 | + if (err) throw err; | ||
21 | + console.log("video saved"); | ||
22 | + return; | ||
23 | + }) | ||
24 | + | ||
25 | + let process = new ffmpeg(`./data/temp.mp4`); | ||
26 | + | ||
27 | + | ||
28 | + detectedImgFile = "test.jpg"; // null로 바꿀 것 | ||
29 | + process.then(function (video) { | ||
30 | + video.fnExtractFrameToJPG(__dirname + "/data", | ||
31 | + { | ||
32 | + every_n_seconds: 1, | ||
33 | + file_name: 'frame_%s' | ||
34 | + }, function (error, files) { | ||
35 | + if (!error) | ||
36 | + console.log('###1 Frames =>' + files); | ||
37 | + console.log("###2 갯수 => " + files.length) | ||
38 | + | ||
39 | + | ||
40 | + console.log("###3 첫번째 파일 => " + files[0]); // 마지막 파일은 영상임 | ||
41 | + let base64str = base64_encode(files[0]); | ||
42 | + console.log("###4 base64str => " + base64str); | ||
43 | + console.log("##### for") | ||
44 | + for(var i=0;i<files.length-1;i++){ | ||
45 | + request.post({ | ||
46 | + url: 'http://101.101.210.73/process', | ||
47 | + form: { | ||
48 | + 'data': base64_encode(files[0]) | ||
49 | + }, | ||
50 | + json: true | ||
51 | + }, (err, response, body) => { | ||
52 | + console.log(body) | ||
53 | + }) | ||
54 | + } | ||
55 | + /** | ||
56 | + * TODO | ||
57 | + * 반복문돌면서 각 프레임 파이썬 api 요청하고 응답받아서 | ||
58 | + * 하나라도 true나오면 프론트에 감지된 이미지파일주소 응답 | ||
59 | + */ | ||
60 | + detectedImgFile=null; | ||
61 | + } | ||
62 | + ) | ||
63 | + }) | ||
24 | 64 | ||
25 | - fs.writeFile(`./data/temp.mp4`, str, 'base64', function (err) { | ||
26 | - if (err) throw err; | ||
27 | - console.log("saved"); | ||
28 | - const vCap = new openCV.VideoCapture('./data/temp.mp4') | ||
29 | - const delay = 1000; | ||
30 | - let done = false; | ||
31 | - let cnt = 0; | ||
32 | - while (!done) { | ||
33 | - let frame = vCap.read(); | ||
34 | - cv.imwrite('./data/' + cnt + '.jpg'); | ||
35 | - cnt++; | ||
36 | - if (frame.empty) { | ||
37 | - vCap.reset(); | ||
38 | - frame = vCap.read(); | ||
39 | - } | ||
40 | - } | ||
41 | - }); | ||
42 | } catch (err) { | 65 | } catch (err) { |
43 | - console.log("err : " + err); | 66 | + console.error(err); |
44 | } | 67 | } |
45 | 68 | ||
46 | - return res.json({ data: 'myData' }); | 69 | + return res.json({ data: detectedImgFile }); |
47 | }); | 70 | }); |
48 | 71 | ||
49 | -//================================================================ | 72 | +function base64_encode(file) { |
50 | - | 73 | + // read binary data |
51 | -// router.post('/faceRecognition', function (req, res) { | 74 | + var bitmap = fs.readFileSync(file); |
52 | - | 75 | + // convert binary data to base64 encoded string |
53 | -// try { | 76 | + return new Buffer(bitmap).toString('base64'); |
54 | -// let preview = req.body[0].preview; | ||
55 | - | ||
56 | -// str = preview.replace(/^data:(.*?);base64,/, ""); | ||
57 | -// str = str.replace(/ /g, '+'); | ||
58 | - | ||
59 | -// // 임시파일 저장 | ||
60 | -// fs.writeFile(`./data/temp.jpg`, str, 'base64', function (err) { | ||
61 | -// if (err) throw err; | ||
62 | -// console.log("saved"); | ||
63 | -// detectFaceAndEyes('./data/temp.jpg'); | ||
64 | -// }); | ||
65 | - | ||
66 | - | ||
67 | - | ||
68 | -// } catch (err) { | ||
69 | -// console.log('err: ' + err); | ||
70 | -// } | ||
71 | - | ||
72 | -// return res.json({ data: 'myData' }); | ||
73 | -// }); | ||
74 | - | ||
75 | -//================================================================ | ||
76 | - | ||
77 | -function base64encode(plaintext) { | ||
78 | - return Buffer.from(plaintext, "utf8").toString('base64'); | ||
79 | -} | ||
80 | - | ||
81 | -function base64decode(base64text) { | ||
82 | - console.log(base64text.length); | ||
83 | - return Buffer.from(base64text, 'base64').toString('utf8'); | ||
84 | } | 77 | } |
85 | 78 | ||
86 | -// function detectFaceAndEyes(filePath) { | ||
87 | -// const image = cv.imread(filePath); | ||
88 | -// const faceClassifier = new cv.CascadeClassifier(cv.HAAR_FRONTALFACE_DEFAULT); | ||
89 | -// const eyeClassifier = new cv.CascadeClassifier(cv.HAAR_EYE); | ||
90 | - | ||
91 | -// // detect faces | ||
92 | -// const faceResult = faceClassifier.detectMultiScale(image.bgrToGray()); | ||
93 | - | ||
94 | -// if (!faceResult.objects.length) { | ||
95 | -// throw new Error('No faces detected!'); | ||
96 | -// } | ||
97 | - | ||
98 | -// const sortByNumDetections = result => result.numDetections | ||
99 | -// .map((num, idx) => ({ num, idx })) | ||
100 | -// .sort(((n0, n1) => n1.num - n0.num)) | ||
101 | -// .map(({ idx }) => idx); | ||
102 | - | ||
103 | -// // get best result | ||
104 | -// const faceRect = faceResult.objects[sortByNumDetections(faceResult)[0]]; | ||
105 | -// console.log('faceRects:', faceResult.objects); | ||
106 | -// console.log('confidences:', faceResult.numDetections); | ||
107 | - | ||
108 | -// // detect eyes | ||
109 | -// const faceRegion = image.getRegion(faceRect); | ||
110 | -// const eyeResult = eyeClassifier.detectMultiScale(faceRegion); | ||
111 | -// console.log('eyeRects:', eyeResult.objects); | ||
112 | -// console.log('confidences:', eyeResult.numDetections); | ||
113 | - | ||
114 | -// // get best result | ||
115 | -// const eyeRects = sortByNumDetections(eyeResult) | ||
116 | -// .slice(0, 2) | ||
117 | -// .map(idx => eyeResult.objects[idx]); | ||
118 | - | ||
119 | - | ||
120 | -// // draw face detection | ||
121 | -// drawBlueRect(image, faceRect); | ||
122 | - | ||
123 | -// // draw eyes detection in face region | ||
124 | -// eyeRects.forEach(eyeRect => drawGreenRect(faceRegion, eyeRect)); | ||
125 | - | ||
126 | -// cv.imwrite(`./data/temp2.jpg`, image); | ||
127 | -// } | ||
128 | - | ||
129 | module.exports = router; | 79 | module.exports = router; |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | { | 1 | { |
2 | - "requires": true, | 2 | + "name": "back-end", |
3 | + "version": "1.0.0", | ||
3 | "lockfileVersion": 1, | 4 | "lockfileVersion": 1, |
5 | + "requires": true, | ||
4 | "dependencies": { | 6 | "dependencies": { |
7 | + "@types/node": { | ||
8 | + "version": "14.0.14", | ||
9 | + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.14.tgz", | ||
10 | + "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==", | ||
11 | + "optional": true | ||
12 | + }, | ||
5 | "accepts": { | 13 | "accepts": { |
6 | "version": "1.3.7", | 14 | "version": "1.3.7", |
7 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", | 15 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", |
... | @@ -11,11 +19,77 @@ | ... | @@ -11,11 +19,77 @@ |
11 | "negotiator": "0.6.2" | 19 | "negotiator": "0.6.2" |
12 | } | 20 | } |
13 | }, | 21 | }, |
22 | + "ajv": { | ||
23 | + "version": "6.12.2", | ||
24 | + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", | ||
25 | + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", | ||
26 | + "requires": { | ||
27 | + "fast-deep-equal": "^3.1.1", | ||
28 | + "fast-json-stable-stringify": "^2.0.0", | ||
29 | + "json-schema-traverse": "^0.4.1", | ||
30 | + "uri-js": "^4.2.2" | ||
31 | + } | ||
32 | + }, | ||
33 | + "ansi-regex": { | ||
34 | + "version": "2.1.1", | ||
35 | + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", | ||
36 | + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" | ||
37 | + }, | ||
38 | + "aproba": { | ||
39 | + "version": "1.2.0", | ||
40 | + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", | ||
41 | + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" | ||
42 | + }, | ||
43 | + "are-we-there-yet": { | ||
44 | + "version": "1.1.5", | ||
45 | + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", | ||
46 | + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", | ||
47 | + "requires": { | ||
48 | + "delegates": "^1.0.0", | ||
49 | + "readable-stream": "^2.0.6" | ||
50 | + } | ||
51 | + }, | ||
14 | "array-flatten": { | 52 | "array-flatten": { |
15 | "version": "1.1.1", | 53 | "version": "1.1.1", |
16 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", | 54 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", |
17 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" | 55 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" |
18 | }, | 56 | }, |
57 | + "asn1": { | ||
58 | + "version": "0.2.4", | ||
59 | + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", | ||
60 | + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", | ||
61 | + "requires": { | ||
62 | + "safer-buffer": "~2.1.0" | ||
63 | + } | ||
64 | + }, | ||
65 | + "assert-plus": { | ||
66 | + "version": "1.0.0", | ||
67 | + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", | ||
68 | + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" | ||
69 | + }, | ||
70 | + "asynckit": { | ||
71 | + "version": "0.4.0", | ||
72 | + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", | ||
73 | + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" | ||
74 | + }, | ||
75 | + "aws-sign2": { | ||
76 | + "version": "0.7.0", | ||
77 | + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", | ||
78 | + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" | ||
79 | + }, | ||
80 | + "aws4": { | ||
81 | + "version": "1.10.0", | ||
82 | + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", | ||
83 | + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" | ||
84 | + }, | ||
85 | + "bcrypt-pbkdf": { | ||
86 | + "version": "1.0.2", | ||
87 | + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", | ||
88 | + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", | ||
89 | + "requires": { | ||
90 | + "tweetnacl": "^0.14.3" | ||
91 | + } | ||
92 | + }, | ||
19 | "body-parser": { | 93 | "body-parser": { |
20 | "version": "1.19.0", | 94 | "version": "1.19.0", |
21 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", | 95 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", |
... | @@ -38,6 +112,29 @@ | ... | @@ -38,6 +112,29 @@ |
38 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", | 112 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", |
39 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" | 113 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" |
40 | }, | 114 | }, |
115 | + "caseless": { | ||
116 | + "version": "0.12.0", | ||
117 | + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", | ||
118 | + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" | ||
119 | + }, | ||
120 | + "code-point-at": { | ||
121 | + "version": "1.1.0", | ||
122 | + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", | ||
123 | + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" | ||
124 | + }, | ||
125 | + "combined-stream": { | ||
126 | + "version": "1.0.8", | ||
127 | + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", | ||
128 | + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", | ||
129 | + "requires": { | ||
130 | + "delayed-stream": "~1.0.0" | ||
131 | + } | ||
132 | + }, | ||
133 | + "console-control-strings": { | ||
134 | + "version": "1.1.0", | ||
135 | + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", | ||
136 | + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" | ||
137 | + }, | ||
41 | "content-disposition": { | 138 | "content-disposition": { |
42 | "version": "0.5.3", | 139 | "version": "0.5.3", |
43 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", | 140 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", |
... | @@ -61,6 +158,11 @@ | ... | @@ -61,6 +158,11 @@ |
61 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", | 158 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", |
62 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" | 159 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" |
63 | }, | 160 | }, |
161 | + "core-util-is": { | ||
162 | + "version": "1.0.2", | ||
163 | + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", | ||
164 | + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" | ||
165 | + }, | ||
64 | "cors": { | 166 | "cors": { |
65 | "version": "2.8.5", | 167 | "version": "2.8.5", |
66 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", | 168 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", |
... | @@ -70,6 +172,14 @@ | ... | @@ -70,6 +172,14 @@ |
70 | "vary": "^1" | 172 | "vary": "^1" |
71 | } | 173 | } |
72 | }, | 174 | }, |
175 | + "dashdash": { | ||
176 | + "version": "1.14.1", | ||
177 | + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", | ||
178 | + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", | ||
179 | + "requires": { | ||
180 | + "assert-plus": "^1.0.0" | ||
181 | + } | ||
182 | + }, | ||
73 | "debug": { | 183 | "debug": { |
74 | "version": "2.6.9", | 184 | "version": "2.6.9", |
75 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", | 185 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", |
... | @@ -78,6 +188,16 @@ | ... | @@ -78,6 +188,16 @@ |
78 | "ms": "2.0.0" | 188 | "ms": "2.0.0" |
79 | } | 189 | } |
80 | }, | 190 | }, |
191 | + "delayed-stream": { | ||
192 | + "version": "1.0.0", | ||
193 | + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", | ||
194 | + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" | ||
195 | + }, | ||
196 | + "delegates": { | ||
197 | + "version": "1.0.0", | ||
198 | + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", | ||
199 | + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" | ||
200 | + }, | ||
81 | "depd": { | 201 | "depd": { |
82 | "version": "1.1.2", | 202 | "version": "1.1.2", |
83 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", | 203 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", |
... | @@ -88,6 +208,15 @@ | ... | @@ -88,6 +208,15 @@ |
88 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", | 208 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", |
89 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" | 209 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" |
90 | }, | 210 | }, |
211 | + "ecc-jsbn": { | ||
212 | + "version": "0.1.2", | ||
213 | + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", | ||
214 | + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", | ||
215 | + "requires": { | ||
216 | + "jsbn": "~0.1.0", | ||
217 | + "safer-buffer": "^2.1.0" | ||
218 | + } | ||
219 | + }, | ||
91 | "ee-first": { | 220 | "ee-first": { |
92 | "version": "1.1.1", | 221 | "version": "1.1.1", |
93 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", | 222 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", |
... | @@ -145,6 +274,34 @@ | ... | @@ -145,6 +274,34 @@ |
145 | "vary": "~1.1.2" | 274 | "vary": "~1.1.2" |
146 | } | 275 | } |
147 | }, | 276 | }, |
277 | + "extend": { | ||
278 | + "version": "3.0.2", | ||
279 | + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", | ||
280 | + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" | ||
281 | + }, | ||
282 | + "extsprintf": { | ||
283 | + "version": "1.3.0", | ||
284 | + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", | ||
285 | + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" | ||
286 | + }, | ||
287 | + "fast-deep-equal": { | ||
288 | + "version": "3.1.3", | ||
289 | + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", | ||
290 | + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" | ||
291 | + }, | ||
292 | + "fast-json-stable-stringify": { | ||
293 | + "version": "2.1.0", | ||
294 | + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", | ||
295 | + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" | ||
296 | + }, | ||
297 | + "ffmpeg": { | ||
298 | + "version": "0.0.4", | ||
299 | + "resolved": "https://registry.npmjs.org/ffmpeg/-/ffmpeg-0.0.4.tgz", | ||
300 | + "integrity": "sha1-HEYN+OfaUSf2LO70v6BsWciWMMs=", | ||
301 | + "requires": { | ||
302 | + "when": ">= 0.0.1" | ||
303 | + } | ||
304 | + }, | ||
148 | "finalhandler": { | 305 | "finalhandler": { |
149 | "version": "1.1.2", | 306 | "version": "1.1.2", |
150 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", | 307 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", |
... | @@ -159,6 +316,21 @@ | ... | @@ -159,6 +316,21 @@ |
159 | "unpipe": "~1.0.0" | 316 | "unpipe": "~1.0.0" |
160 | } | 317 | } |
161 | }, | 318 | }, |
319 | + "forever-agent": { | ||
320 | + "version": "0.6.1", | ||
321 | + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", | ||
322 | + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" | ||
323 | + }, | ||
324 | + "form-data": { | ||
325 | + "version": "2.3.3", | ||
326 | + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", | ||
327 | + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", | ||
328 | + "requires": { | ||
329 | + "asynckit": "^0.4.0", | ||
330 | + "combined-stream": "^1.0.6", | ||
331 | + "mime-types": "^2.1.12" | ||
332 | + } | ||
333 | + }, | ||
162 | "forwarded": { | 334 | "forwarded": { |
163 | "version": "0.1.2", | 335 | "version": "0.1.2", |
164 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", | 336 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", |
... | @@ -169,6 +341,48 @@ | ... | @@ -169,6 +341,48 @@ |
169 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", | 341 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", |
170 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" | 342 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" |
171 | }, | 343 | }, |
344 | + "gauge": { | ||
345 | + "version": "2.7.4", | ||
346 | + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", | ||
347 | + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", | ||
348 | + "requires": { | ||
349 | + "aproba": "^1.0.3", | ||
350 | + "console-control-strings": "^1.0.0", | ||
351 | + "has-unicode": "^2.0.0", | ||
352 | + "object-assign": "^4.1.0", | ||
353 | + "signal-exit": "^3.0.0", | ||
354 | + "string-width": "^1.0.1", | ||
355 | + "strip-ansi": "^3.0.1", | ||
356 | + "wide-align": "^1.1.0" | ||
357 | + } | ||
358 | + }, | ||
359 | + "getpass": { | ||
360 | + "version": "0.1.7", | ||
361 | + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", | ||
362 | + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", | ||
363 | + "requires": { | ||
364 | + "assert-plus": "^1.0.0" | ||
365 | + } | ||
366 | + }, | ||
367 | + "har-schema": { | ||
368 | + "version": "2.0.0", | ||
369 | + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", | ||
370 | + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" | ||
371 | + }, | ||
372 | + "har-validator": { | ||
373 | + "version": "5.1.3", | ||
374 | + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", | ||
375 | + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", | ||
376 | + "requires": { | ||
377 | + "ajv": "^6.5.5", | ||
378 | + "har-schema": "^2.0.0" | ||
379 | + } | ||
380 | + }, | ||
381 | + "has-unicode": { | ||
382 | + "version": "2.0.1", | ||
383 | + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", | ||
384 | + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" | ||
385 | + }, | ||
172 | "http-errors": { | 386 | "http-errors": { |
173 | "version": "1.7.2", | 387 | "version": "1.7.2", |
174 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", | 388 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", |
... | @@ -181,6 +395,16 @@ | ... | @@ -181,6 +395,16 @@ |
181 | "toidentifier": "1.0.0" | 395 | "toidentifier": "1.0.0" |
182 | } | 396 | } |
183 | }, | 397 | }, |
398 | + "http-signature": { | ||
399 | + "version": "1.2.0", | ||
400 | + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", | ||
401 | + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", | ||
402 | + "requires": { | ||
403 | + "assert-plus": "^1.0.0", | ||
404 | + "jsprim": "^1.2.2", | ||
405 | + "sshpk": "^1.7.0" | ||
406 | + } | ||
407 | + }, | ||
184 | "iconv-lite": { | 408 | "iconv-lite": { |
185 | "version": "0.4.24", | 409 | "version": "0.4.24", |
186 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", | 410 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", |
... | @@ -199,6 +423,60 @@ | ... | @@ -199,6 +423,60 @@ |
199 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", | 423 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", |
200 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" | 424 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" |
201 | }, | 425 | }, |
426 | + "is-fullwidth-code-point": { | ||
427 | + "version": "1.0.0", | ||
428 | + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", | ||
429 | + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", | ||
430 | + "requires": { | ||
431 | + "number-is-nan": "^1.0.0" | ||
432 | + } | ||
433 | + }, | ||
434 | + "is-typedarray": { | ||
435 | + "version": "1.0.0", | ||
436 | + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", | ||
437 | + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" | ||
438 | + }, | ||
439 | + "isarray": { | ||
440 | + "version": "1.0.0", | ||
441 | + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", | ||
442 | + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" | ||
443 | + }, | ||
444 | + "isstream": { | ||
445 | + "version": "0.1.2", | ||
446 | + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", | ||
447 | + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" | ||
448 | + }, | ||
449 | + "jsbn": { | ||
450 | + "version": "0.1.1", | ||
451 | + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", | ||
452 | + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" | ||
453 | + }, | ||
454 | + "json-schema": { | ||
455 | + "version": "0.2.3", | ||
456 | + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", | ||
457 | + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" | ||
458 | + }, | ||
459 | + "json-schema-traverse": { | ||
460 | + "version": "0.4.1", | ||
461 | + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", | ||
462 | + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" | ||
463 | + }, | ||
464 | + "json-stringify-safe": { | ||
465 | + "version": "5.0.1", | ||
466 | + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", | ||
467 | + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" | ||
468 | + }, | ||
469 | + "jsprim": { | ||
470 | + "version": "1.4.1", | ||
471 | + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", | ||
472 | + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", | ||
473 | + "requires": { | ||
474 | + "assert-plus": "1.0.0", | ||
475 | + "extsprintf": "1.3.0", | ||
476 | + "json-schema": "0.2.3", | ||
477 | + "verror": "1.10.0" | ||
478 | + } | ||
479 | + }, | ||
202 | "media-typer": { | 480 | "media-typer": { |
203 | "version": "0.3.0", | 481 | "version": "0.3.0", |
204 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", | 482 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", |
... | @@ -237,11 +515,45 @@ | ... | @@ -237,11 +515,45 @@ |
237 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | 515 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", |
238 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | 516 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" |
239 | }, | 517 | }, |
518 | + "nan": { | ||
519 | + "version": "2.14.1", | ||
520 | + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", | ||
521 | + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" | ||
522 | + }, | ||
523 | + "native-node-utils": { | ||
524 | + "version": "0.2.7", | ||
525 | + "resolved": "https://registry.npmjs.org/native-node-utils/-/native-node-utils-0.2.7.tgz", | ||
526 | + "integrity": "sha512-61v0G3uVxWlXHppSZGwZi+ZEIgGUKI8QvEkEJLb1GVePI7P8SBe+G747z+QMXSt4TxfgbVZP0DyobbRKYVIjdw==", | ||
527 | + "requires": { | ||
528 | + "nan": "^2.13.2" | ||
529 | + } | ||
530 | + }, | ||
240 | "negotiator": { | 531 | "negotiator": { |
241 | "version": "0.6.2", | 532 | "version": "0.6.2", |
242 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", | 533 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", |
243 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" | 534 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" |
244 | }, | 535 | }, |
536 | + "npmlog": { | ||
537 | + "version": "4.1.2", | ||
538 | + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", | ||
539 | + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", | ||
540 | + "requires": { | ||
541 | + "are-we-there-yet": "~1.1.2", | ||
542 | + "console-control-strings": "~1.1.0", | ||
543 | + "gauge": "~2.7.3", | ||
544 | + "set-blocking": "~2.0.0" | ||
545 | + } | ||
546 | + }, | ||
547 | + "number-is-nan": { | ||
548 | + "version": "1.0.1", | ||
549 | + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", | ||
550 | + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" | ||
551 | + }, | ||
552 | + "oauth-sign": { | ||
553 | + "version": "0.9.0", | ||
554 | + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", | ||
555 | + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" | ||
556 | + }, | ||
245 | "object-assign": { | 557 | "object-assign": { |
246 | "version": "4.1.1", | 558 | "version": "4.1.1", |
247 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", | 559 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", |
... | @@ -255,16 +567,60 @@ | ... | @@ -255,16 +567,60 @@ |
255 | "ee-first": "1.1.1" | 567 | "ee-first": "1.1.1" |
256 | } | 568 | } |
257 | }, | 569 | }, |
570 | + "opencv-build": { | ||
571 | + "version": "0.1.9", | ||
572 | + "resolved": "https://registry.npmjs.org/opencv-build/-/opencv-build-0.1.9.tgz", | ||
573 | + "integrity": "sha512-tgT/bnJAcYROen9yaPynfK98IMl62mPSgMLmTx41911m5bczlq21xtE5r+UWLB/xEo/0hKk6tl5zHyxV/JS5Rg==", | ||
574 | + "requires": { | ||
575 | + "npmlog": "^4.1.2" | ||
576 | + } | ||
577 | + }, | ||
578 | + "opencv4nodejs": { | ||
579 | + "version": "5.6.0", | ||
580 | + "resolved": "https://registry.npmjs.org/opencv4nodejs/-/opencv4nodejs-5.6.0.tgz", | ||
581 | + "integrity": "sha512-JvcT1hb2JUCdntcVABgD9Gprr+gkXBe+jhHKvrr0Ug51y087K4ybm0vHBQVzI2ei1aJxEc9tNknPL9rpyx5Xuw==", | ||
582 | + "requires": { | ||
583 | + "@types/node": ">6", | ||
584 | + "nan": "^2.14.0", | ||
585 | + "native-node-utils": "^0.2.7", | ||
586 | + "npmlog": "^4.1.2", | ||
587 | + "opencv-build": "^0.1.9" | ||
588 | + } | ||
589 | + }, | ||
258 | "parseurl": { | 590 | "parseurl": { |
259 | "version": "1.3.3", | 591 | "version": "1.3.3", |
260 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", | 592 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", |
261 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" | 593 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" |
262 | }, | 594 | }, |
595 | + "path": { | ||
596 | + "version": "0.12.7", | ||
597 | + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", | ||
598 | + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", | ||
599 | + "requires": { | ||
600 | + "process": "^0.11.1", | ||
601 | + "util": "^0.10.3" | ||
602 | + } | ||
603 | + }, | ||
263 | "path-to-regexp": { | 604 | "path-to-regexp": { |
264 | "version": "0.1.7", | 605 | "version": "0.1.7", |
265 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", | 606 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", |
266 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" | 607 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" |
267 | }, | 608 | }, |
609 | + "performance-now": { | ||
610 | + "version": "2.1.0", | ||
611 | + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", | ||
612 | + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" | ||
613 | + }, | ||
614 | + "process": { | ||
615 | + "version": "0.11.10", | ||
616 | + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", | ||
617 | + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" | ||
618 | + }, | ||
619 | + "process-nextick-args": { | ||
620 | + "version": "2.0.1", | ||
621 | + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", | ||
622 | + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" | ||
623 | + }, | ||
268 | "proxy-addr": { | 624 | "proxy-addr": { |
269 | "version": "2.0.6", | 625 | "version": "2.0.6", |
270 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", | 626 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", |
... | @@ -274,6 +630,16 @@ | ... | @@ -274,6 +630,16 @@ |
274 | "ipaddr.js": "1.9.1" | 630 | "ipaddr.js": "1.9.1" |
275 | } | 631 | } |
276 | }, | 632 | }, |
633 | + "psl": { | ||
634 | + "version": "1.8.0", | ||
635 | + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", | ||
636 | + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" | ||
637 | + }, | ||
638 | + "punycode": { | ||
639 | + "version": "2.1.1", | ||
640 | + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", | ||
641 | + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" | ||
642 | + }, | ||
277 | "qs": { | 643 | "qs": { |
278 | "version": "6.7.0", | 644 | "version": "6.7.0", |
279 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", | 645 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", |
... | @@ -295,6 +661,54 @@ | ... | @@ -295,6 +661,54 @@ |
295 | "unpipe": "1.0.0" | 661 | "unpipe": "1.0.0" |
296 | } | 662 | } |
297 | }, | 663 | }, |
664 | + "readable-stream": { | ||
665 | + "version": "2.3.7", | ||
666 | + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", | ||
667 | + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", | ||
668 | + "requires": { | ||
669 | + "core-util-is": "~1.0.0", | ||
670 | + "inherits": "~2.0.3", | ||
671 | + "isarray": "~1.0.0", | ||
672 | + "process-nextick-args": "~2.0.0", | ||
673 | + "safe-buffer": "~5.1.1", | ||
674 | + "string_decoder": "~1.1.1", | ||
675 | + "util-deprecate": "~1.0.1" | ||
676 | + } | ||
677 | + }, | ||
678 | + "request": { | ||
679 | + "version": "2.88.2", | ||
680 | + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", | ||
681 | + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", | ||
682 | + "requires": { | ||
683 | + "aws-sign2": "~0.7.0", | ||
684 | + "aws4": "^1.8.0", | ||
685 | + "caseless": "~0.12.0", | ||
686 | + "combined-stream": "~1.0.6", | ||
687 | + "extend": "~3.0.2", | ||
688 | + "forever-agent": "~0.6.1", | ||
689 | + "form-data": "~2.3.2", | ||
690 | + "har-validator": "~5.1.3", | ||
691 | + "http-signature": "~1.2.0", | ||
692 | + "is-typedarray": "~1.0.0", | ||
693 | + "isstream": "~0.1.2", | ||
694 | + "json-stringify-safe": "~5.0.1", | ||
695 | + "mime-types": "~2.1.19", | ||
696 | + "oauth-sign": "~0.9.0", | ||
697 | + "performance-now": "^2.1.0", | ||
698 | + "qs": "~6.5.2", | ||
699 | + "safe-buffer": "^5.1.2", | ||
700 | + "tough-cookie": "~2.5.0", | ||
701 | + "tunnel-agent": "^0.6.0", | ||
702 | + "uuid": "^3.3.2" | ||
703 | + }, | ||
704 | + "dependencies": { | ||
705 | + "qs": { | ||
706 | + "version": "6.5.2", | ||
707 | + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", | ||
708 | + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" | ||
709 | + } | ||
710 | + } | ||
711 | + }, | ||
298 | "safe-buffer": { | 712 | "safe-buffer": { |
299 | "version": "5.1.2", | 713 | "version": "5.1.2", |
300 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", | 714 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", |
... | @@ -343,21 +757,95 @@ | ... | @@ -343,21 +757,95 @@ |
343 | "send": "0.17.1" | 757 | "send": "0.17.1" |
344 | } | 758 | } |
345 | }, | 759 | }, |
760 | + "set-blocking": { | ||
761 | + "version": "2.0.0", | ||
762 | + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", | ||
763 | + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" | ||
764 | + }, | ||
346 | "setprototypeof": { | 765 | "setprototypeof": { |
347 | "version": "1.1.1", | 766 | "version": "1.1.1", |
348 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", | 767 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", |
349 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" | 768 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" |
350 | }, | 769 | }, |
770 | + "signal-exit": { | ||
771 | + "version": "3.0.3", | ||
772 | + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", | ||
773 | + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" | ||
774 | + }, | ||
775 | + "sshpk": { | ||
776 | + "version": "1.16.1", | ||
777 | + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", | ||
778 | + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", | ||
779 | + "requires": { | ||
780 | + "asn1": "~0.2.3", | ||
781 | + "assert-plus": "^1.0.0", | ||
782 | + "bcrypt-pbkdf": "^1.0.0", | ||
783 | + "dashdash": "^1.12.0", | ||
784 | + "ecc-jsbn": "~0.1.1", | ||
785 | + "getpass": "^0.1.1", | ||
786 | + "jsbn": "~0.1.0", | ||
787 | + "safer-buffer": "^2.0.2", | ||
788 | + "tweetnacl": "~0.14.0" | ||
789 | + } | ||
790 | + }, | ||
351 | "statuses": { | 791 | "statuses": { |
352 | "version": "1.5.0", | 792 | "version": "1.5.0", |
353 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", | 793 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", |
354 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" | 794 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" |
355 | }, | 795 | }, |
796 | + "string-width": { | ||
797 | + "version": "1.0.2", | ||
798 | + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", | ||
799 | + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", | ||
800 | + "requires": { | ||
801 | + "code-point-at": "^1.0.0", | ||
802 | + "is-fullwidth-code-point": "^1.0.0", | ||
803 | + "strip-ansi": "^3.0.0" | ||
804 | + } | ||
805 | + }, | ||
806 | + "string_decoder": { | ||
807 | + "version": "1.1.1", | ||
808 | + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", | ||
809 | + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", | ||
810 | + "requires": { | ||
811 | + "safe-buffer": "~5.1.0" | ||
812 | + } | ||
813 | + }, | ||
814 | + "strip-ansi": { | ||
815 | + "version": "3.0.1", | ||
816 | + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", | ||
817 | + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", | ||
818 | + "requires": { | ||
819 | + "ansi-regex": "^2.0.0" | ||
820 | + } | ||
821 | + }, | ||
356 | "toidentifier": { | 822 | "toidentifier": { |
357 | "version": "1.0.0", | 823 | "version": "1.0.0", |
358 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", | 824 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", |
359 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" | 825 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" |
360 | }, | 826 | }, |
827 | + "tough-cookie": { | ||
828 | + "version": "2.5.0", | ||
829 | + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", | ||
830 | + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", | ||
831 | + "requires": { | ||
832 | + "psl": "^1.1.28", | ||
833 | + "punycode": "^2.1.1" | ||
834 | + } | ||
835 | + }, | ||
836 | + "tunnel-agent": { | ||
837 | + "version": "0.6.0", | ||
838 | + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", | ||
839 | + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", | ||
840 | + "requires": { | ||
841 | + "safe-buffer": "^5.0.1" | ||
842 | + } | ||
843 | + }, | ||
844 | + "tweetnacl": { | ||
845 | + "version": "0.14.5", | ||
846 | + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", | ||
847 | + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" | ||
848 | + }, | ||
361 | "type-is": { | 849 | "type-is": { |
362 | "version": "1.6.18", | 850 | "version": "1.6.18", |
363 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", | 851 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", |
... | @@ -372,15 +860,64 @@ | ... | @@ -372,15 +860,64 @@ |
372 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", | 860 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", |
373 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" | 861 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" |
374 | }, | 862 | }, |
863 | + "uri-js": { | ||
864 | + "version": "4.2.2", | ||
865 | + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", | ||
866 | + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", | ||
867 | + "requires": { | ||
868 | + "punycode": "^2.1.0" | ||
869 | + } | ||
870 | + }, | ||
871 | + "util": { | ||
872 | + "version": "0.10.4", | ||
873 | + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", | ||
874 | + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", | ||
875 | + "requires": { | ||
876 | + "inherits": "2.0.3" | ||
877 | + } | ||
878 | + }, | ||
879 | + "util-deprecate": { | ||
880 | + "version": "1.0.2", | ||
881 | + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", | ||
882 | + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" | ||
883 | + }, | ||
375 | "utils-merge": { | 884 | "utils-merge": { |
376 | "version": "1.0.1", | 885 | "version": "1.0.1", |
377 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", | 886 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", |
378 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" | 887 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" |
379 | }, | 888 | }, |
889 | + "uuid": { | ||
890 | + "version": "3.4.0", | ||
891 | + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", | ||
892 | + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" | ||
893 | + }, | ||
380 | "vary": { | 894 | "vary": { |
381 | "version": "1.1.2", | 895 | "version": "1.1.2", |
382 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", | 896 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", |
383 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" | 897 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" |
898 | + }, | ||
899 | + "verror": { | ||
900 | + "version": "1.10.0", | ||
901 | + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", | ||
902 | + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", | ||
903 | + "requires": { | ||
904 | + "assert-plus": "^1.0.0", | ||
905 | + "core-util-is": "1.0.2", | ||
906 | + "extsprintf": "^1.2.0" | ||
907 | + } | ||
908 | + }, | ||
909 | + "when": { | ||
910 | + "version": "3.7.8", | ||
911 | + "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", | ||
912 | + "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=" | ||
913 | + }, | ||
914 | + "wide-align": { | ||
915 | + "version": "1.1.3", | ||
916 | + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", | ||
917 | + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", | ||
918 | + "requires": { | ||
919 | + "string-width": "^1.0.2 || 2" | ||
920 | + } | ||
384 | } | 921 | } |
385 | } | 922 | } |
386 | } | 923 | } | ... | ... |
Back-end/package.json
0 → 100644
1 | +{ | ||
2 | + "name": "back-end", | ||
3 | + "version": "1.0.0", | ||
4 | + "description": "", | ||
5 | + "main": "apiRouter.js", | ||
6 | + "scripts": { | ||
7 | + "test": "echo \"Error: no test specified\" && exit 1", | ||
8 | + "start": "node server.js" | ||
9 | + }, | ||
10 | + "author": "", | ||
11 | + "license": "ISC", | ||
12 | + "dependencies": { | ||
13 | + "body-parser": "^1.19.0", | ||
14 | + "cors": "^2.8.5", | ||
15 | + "express": "^4.17.1", | ||
16 | + "ffmpeg": "0.0.4", | ||
17 | + "opencv4nodejs": "^5.6.0", | ||
18 | + "path": "^0.12.7", | ||
19 | + "request": "^2.88.2" | ||
20 | + } | ||
21 | +} |
... | @@ -12,5 +12,5 @@ app.use(bodyParser.urlencoded({limit: '100mb', extended: true})); | ... | @@ -12,5 +12,5 @@ app.use(bodyParser.urlencoded({limit: '100mb', extended: true})); |
12 | app.use(bodyParser()); | 12 | app.use(bodyParser()); |
13 | app.use('/api', api); | 13 | app.use('/api', api); |
14 | 14 | ||
15 | -const port = 3002; | 15 | +const port = 3003; |
16 | app.listen(port, () => console.log(`노드서버 시작 : ${port}`)); | 16 | app.listen(port, () => console.log(`노드서버 시작 : ${port}`)); | ... | ... |
Back-end/utils.js
deleted
100644 → 0
1 | -const path = require('path'); | ||
2 | -const cv = require('opencv4nodejs'); | ||
3 | - | ||
4 | -exports.cv = cv; | ||
5 | - | ||
6 | -const dataPath = path.resolve(__dirname, './data'); | ||
7 | -exports.dataPath = dataPath; | ||
8 | -exports.getDataFilePath = fileName => { | ||
9 | - let targetPath = path.resolve(dataPath, fileName); | ||
10 | - return targetPath; | ||
11 | -} | ||
12 | - | ||
13 | -const grabFrames = (videoFile, delay, onFrame) => { | ||
14 | - const cap = new cv.VideoCapture(videoFile); | ||
15 | - let done = false; | ||
16 | - const intvl = setInterval(() => { | ||
17 | - let frame = cap.read(); | ||
18 | - // loop back to start on end of stream reached | ||
19 | - if (frame.empty) { | ||
20 | - cap.reset(); | ||
21 | - frame = cap.read(); | ||
22 | - } | ||
23 | - onFrame(frame); | ||
24 | - | ||
25 | - const key = cv.waitKey(delay); | ||
26 | - done = key !== -1 && key !== 255; | ||
27 | - if (done) { | ||
28 | - clearInterval(intvl); | ||
29 | - console.log('Key pressed, exiting.'); | ||
30 | - } | ||
31 | - }, 0); | ||
32 | -}; | ||
33 | -exports.grabFrames = grabFrames; | ||
34 | - | ||
35 | -exports.runVideoDetection = (src, detect) => { | ||
36 | - grabFrames(src, 1, frame => { | ||
37 | - detect(frame); | ||
38 | - }); | ||
39 | -}; | ||
40 | - | ||
41 | -exports.drawRectAroundBlobs = (binaryImg, dstImg, minPxSize, fixedRectWidth) => { | ||
42 | - const { | ||
43 | - centroids, | ||
44 | - stats | ||
45 | - } = binaryImg.connectedComponentsWithStats(); | ||
46 | - | ||
47 | - // pretend label 0 is background | ||
48 | - for (let label = 1; label < centroids.rows; label += 1) { | ||
49 | - const [x1, y1] = [stats.at(label, cv.CC_STAT_LEFT), stats.at(label, cv.CC_STAT_TOP)]; | ||
50 | - const [x2, y2] = [ | ||
51 | - x1 + (fixedRectWidth || stats.at(label, cv.CC_STAT_WIDTH)), | ||
52 | - y1 + (fixedRectWidth || stats.at(label, cv.CC_STAT_HEIGHT)) | ||
53 | - ]; | ||
54 | - const size = stats.at(label, cv.CC_STAT_AREA); | ||
55 | - const blue = new cv.Vec(255, 0, 0); | ||
56 | - if (minPxSize < size) { | ||
57 | - dstImg.drawRectangle( | ||
58 | - new cv.Point(x1, y1), | ||
59 | - new cv.Point(x2, y2), | ||
60 | - { color: blue, thickness: 2 } | ||
61 | - ); | ||
62 | - } | ||
63 | - } | ||
64 | -}; | ||
65 | - | ||
66 | -const drawRect = (image, rect, color, opts = { thickness: 2 }) => | ||
67 | - image.drawRectangle( | ||
68 | - rect, | ||
69 | - color, | ||
70 | - opts.thickness, | ||
71 | - cv.LINE_8 | ||
72 | - ); | ||
73 | - | ||
74 | -exports.drawRect = drawRect; | ||
75 | -exports.drawBlueRect = (image, rect, opts = { thickness: 2 }) => | ||
76 | - drawRect(image, rect, new cv.Vec(255, 0, 0), opts); | ||
77 | -exports.drawGreenRect = (image, rect, opts = { thickness: 2 }) => | ||
78 | - drawRect(image, rect, new cv.Vec(0, 255, 0), opts); | ||
79 | -exports.drawRedRect = (image, rect, opts = { thickness: 2 }) => | ||
80 | - drawRect(image, rect, new cv.Vec(0, 0, 255), opts); | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment