add Teachable Machine skeleton code (get model by Teachable Machine)
Showing
4 changed files
with
468 additions
and
2 deletions
.gitignore
0 → 100644
1 | +/node_modules/ | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
package-lock.json
0 → 100644
1 | +{ | ||
2 | + "name": "2020-02-oss-termproject", | ||
3 | + "version": "0.0.0", | ||
4 | + "lockfileVersion": 1, | ||
5 | + "requires": true, | ||
6 | + "dependencies": { | ||
7 | + "accepts": { | ||
8 | + "version": "1.3.7", | ||
9 | + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", | ||
10 | + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", | ||
11 | + "requires": { | ||
12 | + "mime-types": "~2.1.24", | ||
13 | + "negotiator": "0.6.2" | ||
14 | + } | ||
15 | + }, | ||
16 | + "array-flatten": { | ||
17 | + "version": "1.1.1", | ||
18 | + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", | ||
19 | + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" | ||
20 | + }, | ||
21 | + "basic-auth": { | ||
22 | + "version": "2.0.1", | ||
23 | + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", | ||
24 | + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", | ||
25 | + "requires": { | ||
26 | + "safe-buffer": "5.1.2" | ||
27 | + } | ||
28 | + }, | ||
29 | + "body-parser": { | ||
30 | + "version": "1.18.3", | ||
31 | + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", | ||
32 | + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", | ||
33 | + "requires": { | ||
34 | + "bytes": "3.0.0", | ||
35 | + "content-type": "~1.0.4", | ||
36 | + "debug": "2.6.9", | ||
37 | + "depd": "~1.1.2", | ||
38 | + "http-errors": "~1.6.3", | ||
39 | + "iconv-lite": "0.4.23", | ||
40 | + "on-finished": "~2.3.0", | ||
41 | + "qs": "6.5.2", | ||
42 | + "raw-body": "2.3.3", | ||
43 | + "type-is": "~1.6.16" | ||
44 | + } | ||
45 | + }, | ||
46 | + "bytes": { | ||
47 | + "version": "3.0.0", | ||
48 | + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", | ||
49 | + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" | ||
50 | + }, | ||
51 | + "content-disposition": { | ||
52 | + "version": "0.5.2", | ||
53 | + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", | ||
54 | + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" | ||
55 | + }, | ||
56 | + "content-type": { | ||
57 | + "version": "1.0.4", | ||
58 | + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", | ||
59 | + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" | ||
60 | + }, | ||
61 | + "cookie": { | ||
62 | + "version": "0.4.0", | ||
63 | + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", | ||
64 | + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" | ||
65 | + }, | ||
66 | + "cookie-parser": { | ||
67 | + "version": "1.4.5", | ||
68 | + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz", | ||
69 | + "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==", | ||
70 | + "requires": { | ||
71 | + "cookie": "0.4.0", | ||
72 | + "cookie-signature": "1.0.6" | ||
73 | + } | ||
74 | + }, | ||
75 | + "cookie-signature": { | ||
76 | + "version": "1.0.6", | ||
77 | + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", | ||
78 | + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" | ||
79 | + }, | ||
80 | + "debug": { | ||
81 | + "version": "2.6.9", | ||
82 | + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", | ||
83 | + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", | ||
84 | + "requires": { | ||
85 | + "ms": "2.0.0" | ||
86 | + } | ||
87 | + }, | ||
88 | + "depd": { | ||
89 | + "version": "1.1.2", | ||
90 | + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", | ||
91 | + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" | ||
92 | + }, | ||
93 | + "destroy": { | ||
94 | + "version": "1.0.4", | ||
95 | + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", | ||
96 | + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" | ||
97 | + }, | ||
98 | + "ee-first": { | ||
99 | + "version": "1.1.1", | ||
100 | + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", | ||
101 | + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" | ||
102 | + }, | ||
103 | + "ejs": { | ||
104 | + "version": "2.6.2", | ||
105 | + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.2.tgz", | ||
106 | + "integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==" | ||
107 | + }, | ||
108 | + "encodeurl": { | ||
109 | + "version": "1.0.2", | ||
110 | + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", | ||
111 | + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" | ||
112 | + }, | ||
113 | + "escape-html": { | ||
114 | + "version": "1.0.3", | ||
115 | + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", | ||
116 | + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" | ||
117 | + }, | ||
118 | + "etag": { | ||
119 | + "version": "1.8.1", | ||
120 | + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", | ||
121 | + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" | ||
122 | + }, | ||
123 | + "express": { | ||
124 | + "version": "4.16.4", | ||
125 | + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", | ||
126 | + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", | ||
127 | + "requires": { | ||
128 | + "accepts": "~1.3.5", | ||
129 | + "array-flatten": "1.1.1", | ||
130 | + "body-parser": "1.18.3", | ||
131 | + "content-disposition": "0.5.2", | ||
132 | + "content-type": "~1.0.4", | ||
133 | + "cookie": "0.3.1", | ||
134 | + "cookie-signature": "1.0.6", | ||
135 | + "debug": "2.6.9", | ||
136 | + "depd": "~1.1.2", | ||
137 | + "encodeurl": "~1.0.2", | ||
138 | + "escape-html": "~1.0.3", | ||
139 | + "etag": "~1.8.1", | ||
140 | + "finalhandler": "1.1.1", | ||
141 | + "fresh": "0.5.2", | ||
142 | + "merge-descriptors": "1.0.1", | ||
143 | + "methods": "~1.1.2", | ||
144 | + "on-finished": "~2.3.0", | ||
145 | + "parseurl": "~1.3.2", | ||
146 | + "path-to-regexp": "0.1.7", | ||
147 | + "proxy-addr": "~2.0.4", | ||
148 | + "qs": "6.5.2", | ||
149 | + "range-parser": "~1.2.0", | ||
150 | + "safe-buffer": "5.1.2", | ||
151 | + "send": "0.16.2", | ||
152 | + "serve-static": "1.13.2", | ||
153 | + "setprototypeof": "1.1.0", | ||
154 | + "statuses": "~1.4.0", | ||
155 | + "type-is": "~1.6.16", | ||
156 | + "utils-merge": "1.0.1", | ||
157 | + "vary": "~1.1.2" | ||
158 | + }, | ||
159 | + "dependencies": { | ||
160 | + "cookie": { | ||
161 | + "version": "0.3.1", | ||
162 | + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", | ||
163 | + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" | ||
164 | + } | ||
165 | + } | ||
166 | + }, | ||
167 | + "finalhandler": { | ||
168 | + "version": "1.1.1", | ||
169 | + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", | ||
170 | + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", | ||
171 | + "requires": { | ||
172 | + "debug": "2.6.9", | ||
173 | + "encodeurl": "~1.0.2", | ||
174 | + "escape-html": "~1.0.3", | ||
175 | + "on-finished": "~2.3.0", | ||
176 | + "parseurl": "~1.3.2", | ||
177 | + "statuses": "~1.4.0", | ||
178 | + "unpipe": "~1.0.0" | ||
179 | + } | ||
180 | + }, | ||
181 | + "forwarded": { | ||
182 | + "version": "0.1.2", | ||
183 | + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", | ||
184 | + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" | ||
185 | + }, | ||
186 | + "fresh": { | ||
187 | + "version": "0.5.2", | ||
188 | + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", | ||
189 | + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" | ||
190 | + }, | ||
191 | + "http-errors": { | ||
192 | + "version": "1.6.3", | ||
193 | + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", | ||
194 | + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", | ||
195 | + "requires": { | ||
196 | + "depd": "~1.1.2", | ||
197 | + "inherits": "2.0.3", | ||
198 | + "setprototypeof": "1.1.0", | ||
199 | + "statuses": ">= 1.4.0 < 2" | ||
200 | + } | ||
201 | + }, | ||
202 | + "iconv-lite": { | ||
203 | + "version": "0.4.23", | ||
204 | + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", | ||
205 | + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", | ||
206 | + "requires": { | ||
207 | + "safer-buffer": ">= 2.1.2 < 3" | ||
208 | + } | ||
209 | + }, | ||
210 | + "inherits": { | ||
211 | + "version": "2.0.3", | ||
212 | + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", | ||
213 | + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" | ||
214 | + }, | ||
215 | + "ipaddr.js": { | ||
216 | + "version": "1.9.1", | ||
217 | + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", | ||
218 | + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" | ||
219 | + }, | ||
220 | + "media-typer": { | ||
221 | + "version": "0.3.0", | ||
222 | + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", | ||
223 | + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" | ||
224 | + }, | ||
225 | + "merge-descriptors": { | ||
226 | + "version": "1.0.1", | ||
227 | + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", | ||
228 | + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" | ||
229 | + }, | ||
230 | + "methods": { | ||
231 | + "version": "1.1.2", | ||
232 | + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", | ||
233 | + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" | ||
234 | + }, | ||
235 | + "mime": { | ||
236 | + "version": "1.4.1", | ||
237 | + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", | ||
238 | + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" | ||
239 | + }, | ||
240 | + "mime-db": { | ||
241 | + "version": "1.44.0", | ||
242 | + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", | ||
243 | + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" | ||
244 | + }, | ||
245 | + "mime-types": { | ||
246 | + "version": "2.1.27", | ||
247 | + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", | ||
248 | + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", | ||
249 | + "requires": { | ||
250 | + "mime-db": "1.44.0" | ||
251 | + } | ||
252 | + }, | ||
253 | + "morgan": { | ||
254 | + "version": "1.9.1", | ||
255 | + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", | ||
256 | + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", | ||
257 | + "requires": { | ||
258 | + "basic-auth": "~2.0.0", | ||
259 | + "debug": "2.6.9", | ||
260 | + "depd": "~1.1.2", | ||
261 | + "on-finished": "~2.3.0", | ||
262 | + "on-headers": "~1.0.1" | ||
263 | + } | ||
264 | + }, | ||
265 | + "ms": { | ||
266 | + "version": "2.0.0", | ||
267 | + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | ||
268 | + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | ||
269 | + }, | ||
270 | + "negotiator": { | ||
271 | + "version": "0.6.2", | ||
272 | + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", | ||
273 | + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" | ||
274 | + }, | ||
275 | + "on-finished": { | ||
276 | + "version": "2.3.0", | ||
277 | + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", | ||
278 | + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", | ||
279 | + "requires": { | ||
280 | + "ee-first": "1.1.1" | ||
281 | + } | ||
282 | + }, | ||
283 | + "on-headers": { | ||
284 | + "version": "1.0.2", | ||
285 | + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", | ||
286 | + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" | ||
287 | + }, | ||
288 | + "parseurl": { | ||
289 | + "version": "1.3.3", | ||
290 | + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", | ||
291 | + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" | ||
292 | + }, | ||
293 | + "path-to-regexp": { | ||
294 | + "version": "0.1.7", | ||
295 | + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", | ||
296 | + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" | ||
297 | + }, | ||
298 | + "proxy-addr": { | ||
299 | + "version": "2.0.6", | ||
300 | + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", | ||
301 | + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", | ||
302 | + "requires": { | ||
303 | + "forwarded": "~0.1.2", | ||
304 | + "ipaddr.js": "1.9.1" | ||
305 | + } | ||
306 | + }, | ||
307 | + "qs": { | ||
308 | + "version": "6.5.2", | ||
309 | + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", | ||
310 | + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" | ||
311 | + }, | ||
312 | + "range-parser": { | ||
313 | + "version": "1.2.1", | ||
314 | + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", | ||
315 | + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" | ||
316 | + }, | ||
317 | + "raw-body": { | ||
318 | + "version": "2.3.3", | ||
319 | + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", | ||
320 | + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", | ||
321 | + "requires": { | ||
322 | + "bytes": "3.0.0", | ||
323 | + "http-errors": "1.6.3", | ||
324 | + "iconv-lite": "0.4.23", | ||
325 | + "unpipe": "1.0.0" | ||
326 | + } | ||
327 | + }, | ||
328 | + "safe-buffer": { | ||
329 | + "version": "5.1.2", | ||
330 | + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", | ||
331 | + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" | ||
332 | + }, | ||
333 | + "safer-buffer": { | ||
334 | + "version": "2.1.2", | ||
335 | + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", | ||
336 | + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" | ||
337 | + }, | ||
338 | + "send": { | ||
339 | + "version": "0.16.2", | ||
340 | + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", | ||
341 | + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", | ||
342 | + "requires": { | ||
343 | + "debug": "2.6.9", | ||
344 | + "depd": "~1.1.2", | ||
345 | + "destroy": "~1.0.4", | ||
346 | + "encodeurl": "~1.0.2", | ||
347 | + "escape-html": "~1.0.3", | ||
348 | + "etag": "~1.8.1", | ||
349 | + "fresh": "0.5.2", | ||
350 | + "http-errors": "~1.6.2", | ||
351 | + "mime": "1.4.1", | ||
352 | + "ms": "2.0.0", | ||
353 | + "on-finished": "~2.3.0", | ||
354 | + "range-parser": "~1.2.0", | ||
355 | + "statuses": "~1.4.0" | ||
356 | + } | ||
357 | + }, | ||
358 | + "serve-static": { | ||
359 | + "version": "1.13.2", | ||
360 | + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", | ||
361 | + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", | ||
362 | + "requires": { | ||
363 | + "encodeurl": "~1.0.2", | ||
364 | + "escape-html": "~1.0.3", | ||
365 | + "parseurl": "~1.3.2", | ||
366 | + "send": "0.16.2" | ||
367 | + } | ||
368 | + }, | ||
369 | + "setprototypeof": { | ||
370 | + "version": "1.1.0", | ||
371 | + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", | ||
372 | + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" | ||
373 | + }, | ||
374 | + "statuses": { | ||
375 | + "version": "1.4.0", | ||
376 | + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", | ||
377 | + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" | ||
378 | + }, | ||
379 | + "type-is": { | ||
380 | + "version": "1.6.18", | ||
381 | + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", | ||
382 | + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", | ||
383 | + "requires": { | ||
384 | + "media-typer": "0.3.0", | ||
385 | + "mime-types": "~2.1.24" | ||
386 | + } | ||
387 | + }, | ||
388 | + "unpipe": { | ||
389 | + "version": "1.0.0", | ||
390 | + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", | ||
391 | + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" | ||
392 | + }, | ||
393 | + "utils-merge": { | ||
394 | + "version": "1.0.1", | ||
395 | + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", | ||
396 | + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" | ||
397 | + }, | ||
398 | + "vary": { | ||
399 | + "version": "1.1.2", | ||
400 | + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", | ||
401 | + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" | ||
402 | + } | ||
403 | + } | ||
404 | +} |
... | @@ -6,4 +6,4 @@ router.get('/', function(req, res, next) { | ... | @@ -6,4 +6,4 @@ router.get('/', function(req, res, next) { |
6 | res.render('index', { title: 'Express' }); | 6 | res.render('index', { title: 'Express' }); |
7 | }); | 7 | }); |
8 | 8 | ||
9 | -module.exports = router; | 9 | +module.exports = router; |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -7,5 +7,66 @@ | ... | @@ -7,5 +7,66 @@ |
7 | <body> | 7 | <body> |
8 | <h1><%= title %></h1> | 8 | <h1><%= title %></h1> |
9 | <p>Welcome to <%= title %></p> | 9 | <p>Welcome to <%= title %></p> |
10 | + | ||
11 | + <!--https://teachablemachine.withgoogle.com/ 를 통해 학습시키고 얻은 스켈레톤 코드 --> | ||
12 | + <div>Teachable Machine Image Model</div> | ||
13 | + <button type="button" onclick="init()">Start</button> | ||
14 | + <div id="webcam-container"></div> | ||
15 | + <div id="label-container"></div> | ||
16 | + <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.3.1/dist/tf.min.js"></script> | ||
17 | + <script src="https://cdn.jsdelivr.net/npm/@teachablemachine/image@0.8/dist/teachablemachine-image.min.js"></script> | ||
18 | + <script type="text/javascript"> | ||
19 | + // More API functions here: | ||
20 | + // https://github.com/googlecreativelab/teachablemachine-community/tree/master/libraries/image | ||
21 | + | ||
22 | + // the link to your model provided by Teachable Machine export panel | ||
23 | + const URL = "https://teachablemachine.withgoogle.com/models/2QtWMcVET/"; | ||
24 | + | ||
25 | + let model, webcam, labelContainer, maxPredictions; | ||
26 | + | ||
27 | + // Load the image model and setup the webcam | ||
28 | + async function init() { | ||
29 | + const modelURL = URL + "model.json"; | ||
30 | + const metadataURL = URL + "metadata.json"; | ||
31 | + | ||
32 | + // load the model and metadata | ||
33 | + // Refer to tmImage.loadFromFiles() in the API to support files from a file picker | ||
34 | + // or files from your local hard drive | ||
35 | + // Note: the pose library adds "tmImage" object to your window (window.tmImage) | ||
36 | + model = await tmImage.load(modelURL, metadataURL); | ||
37 | + maxPredictions = model.getTotalClasses(); | ||
38 | + | ||
39 | + // Convenience function to setup a webcam | ||
40 | + const flip = true; // whether to flip the webcam | ||
41 | + webcam = new tmImage.Webcam(200, 200, flip); // width, height, flip | ||
42 | + await webcam.setup(); // request access to the webcam | ||
43 | + await webcam.play(); | ||
44 | + window.requestAnimationFrame(loop); | ||
45 | + | ||
46 | + // append elements to the DOM | ||
47 | + document.getElementById("webcam-container").appendChild(webcam.canvas); | ||
48 | + labelContainer = document.getElementById("label-container"); | ||
49 | + for (let i = 0; i < maxPredictions; i++) { // and class labels | ||
50 | + labelContainer.appendChild(document.createElement("div")); | ||
51 | + } | ||
52 | + } | ||
53 | + | ||
54 | + async function loop() { | ||
55 | + webcam.update(); // update the webcam frame | ||
56 | + await predict(); | ||
57 | + window.requestAnimationFrame(loop); | ||
58 | + } | ||
59 | + | ||
60 | + // run the webcam image through the image model | ||
61 | + async function predict() { | ||
62 | + // predict can take in an image, video or canvas html element | ||
63 | + const prediction = await model.predict(webcam.canvas); | ||
64 | + for (let i = 0; i < maxPredictions; i++) { | ||
65 | + const classPrediction = | ||
66 | + prediction[i].className + ": " + prediction[i].probability.toFixed(2); | ||
67 | + labelContainer.childNodes[i].innerHTML = classPrediction; | ||
68 | + } | ||
69 | + } | ||
70 | + </script> | ||
10 | </body> | 71 | </body> |
11 | -</html> | 72 | +</html> |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment