Instascan: ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” QR ์ฝ”๋“œ๋งŒ ๋””์ฝ”๋”ฉํ•ฉ๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2017๋…„ 07์›” 14์ผ  ยท  8์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: schmich/instascan

QR ์ฝ”๋“œ๋ฅผ ์Šค์บ”ํ•˜๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ ๋ฐ”์ฝ”๋“œ ํ˜•์‹์˜ ๋””์ฝ”๋”ฉ์„ ์ง€์›ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ํŠนํžˆ Data Matrix ์ฝ”๋“œ ๋””์ฝ”๋”ฉ์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์‹  ๋ฐ์ดํ„ฐ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๋””์ฝ”๋”ฉํ•˜๋„๋ก ํ•ต์‹ฌ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ZXing._decode_any ๋กœ QR ์ฝ”๋“œ๋Š” ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€๋งŒ ๋ฐ”์ฝ”๋“œ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค Runtime.functionPointers[index] is not a function

๋ชจ๋“  8 ๋Œ“๊ธ€

๋‹ต๋ณ€์ด ๋Šฆ์–ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ณต์‹์ ์œผ๋กœ QR ์ฝ”๋“œ ์ด์™ธ์˜ ๋‹ค๋ฅธ ๊ฒƒ์„ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ ๋™์ผํ•œ ํ”„๋ ˆ์ž„์—์„œ ์—ฌ๋Ÿฌ ํ˜•์‹๊ณผ ์—ฌ๋Ÿฌ ์ฝ”๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•ต์‹ฌ์€ ์•ฝ๊ฐ„์˜ ํ”„๋ž‘์ผ„์Šˆํƒ€์ธ์ž…๋‹ˆ๋‹ค. ZXing Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜ C++ ํฌํŠธ ์— ๋Œ€ํ•œ Emscripten JavaScript ๋นŒ๋“œ ์— ์˜ํ•ด ๊ตฌ๋™๋ฉ๋‹ˆ๋‹ค.

Emscripten ์˜ˆ์ œ ๋ฅผ ๋ณด๋ฉด ZXing._decode_qr (์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉ)์™€ ZXing._decode_any ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ZXing์€ Data Matrix ๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ZXing._decode_any ๋Š” QR ์ฝ”๋“œ, ๋ฐ”์ฝ”๋“œ, Data Matrix, Aztec ๋“ฑ์„ ์ธ์‹ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ํ˜ธ์ถœ์€ scanner.js ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ํ…Œ์ŠคํŠธํ•  ์‹œ๊ฐ„์ด ์—†์ง€๋งŒ ์‹œ๋„ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ž‘์Šต๋‹ˆ๋‹ค.

๊ดœ์ฐฎ์€. ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ์ฐธ๊ณ  ์‚ฌํ•ญ: ๋ฐ๋ชจ ์›น ์‚ฌ์ดํŠธ๊ฐ€ ์ž‘๋™์„ ๋ฉˆ์ถ˜ ์ด์œ ๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ Error: Cannot access video stream (DevicesNotFoundError). ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

screen shot 2017-07-18 at 14 27 16

๊ธฐ๋ณธ์ ์œผ๋กœ ์นด๋ฉ”๋ผ ์•ก์„ธ์Šค๊ฐ€ ์ฐจ๋‹จ๋˜์–ด ์žˆ๊ฑฐ๋‚˜ ๊ณผ๊ฑฐ์— ๋ฐ๋ชจ ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ฐจ๋‹จํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฐ๋ชจ ์‚ฌ์ดํŠธ๋ฅผ ์ฒ˜์Œ ๋ฐฉ๋ฌธํ•  ๋•Œ ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

screen shot 2017-07-18 at 7 02 49 am

์นด๋ฉ”๋ผ ์•ก์„ธ์Šค๊ฐ€ ํ—ˆ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

screen shot 2017-07-18 at 7 04 24 am

https://github.com/schmich/instascan/blob/master/src/scanner.js#L145 ํ–‰์—์„œ ZXing._decode_qr ๋ฅผ ZXing._decode_any ๋กœ ๋ฐ”๊ฟ€ ๋•Œ ๋ชจ๋“  ํ˜•์‹์ด ์ง€์›๋˜๋ฏ€๋กœ ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋‹ค์‹œ ๋ณด๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๋‹ค๋ฅธ ํ˜•์‹์„ ๋ชจ๋‘ ์ง์ ‘ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์‹์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ๋ง์„ค์—ฌ์ง€์ง€๋งŒ, ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋ง์”€๋“œ๋ฆฌ์ง€๋งŒ ์•ž์œผ๋กœ๋Š” ํ™•์‹คํžˆ ์ง€์›ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ด๊ฒƒ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด #61์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

instascan.min.js๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ•์†Œ๋œ ๋ฐ”์ฝ”๋“œ๋ฅผ ์Šค์บ”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๊นŒ?
u._decode_qr(this.decodeCallback) ์„ u._decode_any(this.decodeCallback) ๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.
QR์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ž‘๋™ํ•˜์ง€๋งŒ ๋ฐ”์ฝ”๋“œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ZXing._decode_any ๋กœ QR ์ฝ”๋“œ๋Š” ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€๋งŒ ๋ฐ”์ฝ”๋“œ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค Runtime.functionPointers[index] is not a function

@eggyyy ์™€ ๋™์ผํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰