ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปดํจํฐ ๋น์ ๊ธฐ๋ฅ์ ๋ํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ, Shape Detection API๋ฅผ ์์๋ณด์ธ์. ๋ธ๋ผ์ฐ์ ์์ ์ง์ ์ผ๊ตด, ๋ฐ์ฝ๋, ํ ์คํธ๋ฅผ ๊ฐ์งํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ์ ์์ต๋๋ค.
ํ๋ก ํธ์๋ Shape Detection API: ๋ธ๋ผ์ฐ์ ์์์ ์ปดํจํฐ ๋น์ ํตํฉ ๊ฐ์ด๋
์น ๋ธ๋ผ์ฐ์ ๋ ๋ ์ด์ ์ ์ ์ธ ์ฝํ ์ธ ๋ฅผ ํ์ํ๋ ๊ฒ ์ด์์ ๊ฐ๋ ฅํ ํ๋ซํผ์ผ๋ก ์งํํ๊ณ ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ธ๋ผ์ฐ์ API์ ๋ฐ์ ์ผ๋ก ์ด์ ์ฐ๋ฆฌ๋ ํด๋ผ์ด์ธํธ ์ธก์์ ์ง์ ๋ณต์กํ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฐ์ ์ค ํ๋๊ฐ ๋ฐ๋ก Shape Detection API์ ๋๋ค. ์ด ๋ธ๋ผ์ฐ์ API๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ์ด๋ฏธ์ง์ ๋น๋์ค์์ ์ผ๊ตด, ๋ฐ์ฝ๋, ํ ์คํธ๋ฅผ ํฌํจํ ๋ค์ํ ๋ชจ์์ ๊ฐ์งํ ์ ์์ต๋๋ค. ์ด๋ ๊ธฐ๋ณธ์ ์ธ ์ปดํจํฐ ๋น์ ์์ ์ ์ํด ์๋ฒ ์ธก ์ฒ๋ฆฌ์ ์์กดํ์ง ์๊ณ ๋, ์ํธ์์ฉ์ ์ด๊ณ ์ง๋ฅ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋ ๋ฌดํํ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค.
Shape Detection API๋ ๋ฌด์์ธ๊ฐ์?
Shape Detection API๋ ๋ธ๋ผ์ฐ์ ๋ด์์ ์ง์ ์ปดํจํฐ ๋น์ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ทผํ ์ ์๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด API๋ ์ธ ๊ฐ์ง ์ฃผ์ ๊ฐ์ง๊ธฐ๋ฅผ ์ ๊ณตํฉ๋๋ค:
- FaceDetector: ์ด๋ฏธ์ง์ ๋น๋์ค์์ ์ฌ๋์ ์ผ๊ตด์ ๊ฐ์งํฉ๋๋ค.
- BarcodeDetector: ๋ค์ํ ๋ฐ์ฝ๋ ํ์์ ๊ฐ์งํ๊ณ ๋์ฝ๋ฉํฉ๋๋ค.
- TextDetector: ์ด๋ฏธ์ง ๋ด์ ํ ์คํธ ์์ญ์ ๊ฐ์งํฉ๋๋ค. (์ฐธ๊ณ : ์์ง ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์ ๋๋ฆฌ ๊ตฌํ๋์ง๋ ์์์ต๋๋ค)
์ด๋ฌํ ๊ฐ์ง๊ธฐ๋ ํด๋ผ์ด์ธํธ์ ๊ธฐ๊ธฐ์์ ์ง์ ์๋ํ๋ฏ๋ก, ์ด๋ฏธ์ง๋ ๋น๋์ค ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ๋ฅผ ์ํด ์๋ฒ๋ก ๋ณด๋ผ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ๊ฐ์ธ์ ๋ณด ๋ณดํธ: ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ์์ ๊ธฐ๊ธฐ์ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค.
- ์ฑ๋ฅ: ์๋ฒ ์๋ณต์ด ์์ด ์ง์ฐ ์๊ฐ์ด ์ค์ด๋ญ๋๋ค.
- ์คํ๋ผ์ธ ๊ธฐ๋ฅ: ์ผ๋ถ ๊ตฌํ์์๋ ์คํ๋ผ์ธ ๊ฐ์ง๊ฐ ๊ฐ๋ฅํ ์ ์์ต๋๋ค.
- ์๋ฒ ๋น์ฉ ์ ๊ฐ: ๋ฐฑ์๋ ์ธํ๋ผ์ ์ฒ๋ฆฌ ๋ถํ๊ฐ ์ค์ด๋ญ๋๋ค.
๋ธ๋ผ์ฐ์ ์ง์
Shape Detection API์ ๋ํ ๋ธ๋ผ์ฐ์ ์ง์์ ์์ง ๋ฐ์ ์ค์ ๋๋ค. ํฌ๋กฌ์ด๋ ์ฃ์ง์ ๊ฐ์ ์ผ๋ถ ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ ์ด API๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, ํ์ด์ดํญ์ค๋ ์ฌํ๋ฆฌ ๊ฐ์ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์์๋ ์ง์์ด ์ ํ์ ์ด๊ฑฐ๋ ์คํ์ ๊ธฐ๋ฅ์ ํ์ฑํํด์ผ ํ ์ ์์ต๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์ ์ด API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์๋ ํญ์ ์ต์ ๋ธ๋ผ์ฐ์ ํธํ์ฑ ํ๋ฅผ ํ์ธํ์ธ์. caniuse.com๊ณผ ๊ฐ์ ์น์ฌ์ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ธฐ๋ฅ์ ํ์ฌ ์ง์ ํํฉ์ ํ์ธํ ์ ์์ต๋๋ค.
FaceDetector API ์ฌ์ฉํ๊ธฐ
FaceDetector API๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง์์ ์ผ๊ตด์ ๊ฐ์งํ๋ ์ค์ ์์ ๋ก ์์ํด ๋ณด๊ฒ ์ต๋๋ค.
๊ธฐ๋ณธ ์ผ๊ตด ๊ฐ์ง
๋ค์์ FaceDetector๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ณธ ์ฝ๋ ์ค๋ํซ์
๋๋ค:
const faceDetector = new FaceDetector();
const image = document.getElementById('myImage'); // <img> ์์๋ผ๊ณ ๊ฐ์
faceDetector.detect(image)
.then(faces => {
faces.forEach(face => {
console.log('์ผ๊ตด ๊ฐ์ง ์์น:', face.boundingBox);
// ์บ๋ฒ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๊ตด ์ฃผ์์ ์ฌ๊ฐํ์ ๊ทธ๋ฆด ์ ์์ต๋๋ค
});
})
.catch(error => {
console.error('์ผ๊ตด ๊ฐ์ง ์คํจ:', error);
});
์ค๋ช :
FaceDetectorํด๋์ค์ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.- HTML์ ์ด๋ฏธ์ง ์์(
<img>)์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. FaceDetector์detect()๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ , ์ด๋ฏธ์ง ์์๋ฅผ ์ ๋ฌํฉ๋๋ค.detect()๋ฉ์๋๋ ๊ฐ์ง๋ ๊ฐ ์ผ๊ตด์ ๋ํ๋ด๋Face๊ฐ์ฒด์ ๋ฐฐ์ด๋ก ๊ท๊ฒฐ๋๋ Promise๋ฅผ ๋ฐํํฉ๋๋ค.Face๊ฐ์ฒด์ ๋ฐฐ์ด์ ์ํํ๋ฉฐ ๊ฐ ์ผ๊ตด์ ๊ฒฝ๊ณ ์์(bounding box)๋ฅผ ์ฝ์์ ๊ธฐ๋กํฉ๋๋ค.boundingBox์์ฑ์๋ ์ผ๊ตด์ ๋๋ฌ์ธ๋ ์ฌ๊ฐํ์ ์ขํ๊ฐ ํฌํจ๋ฉ๋๋ค.- ๊ฐ์ง ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด
catch()๋ธ๋ก๋ ํฌํจํฉ๋๋ค.
์ผ๊ตด ๊ฐ์ง ์ต์ ์ฌ์ฉ์ ์ ์
FaceDetector ์์ฑ์๋ ๊ตฌ์ฑ ์ต์
์ด ํฌํจ๋ ์ ํ์ ๊ฐ์ฒด๋ฅผ ํ์ฉํฉ๋๋ค:
maxDetectedFaces: ๊ฐ์งํ ์ต๋ ์ผ๊ตด ์. ๊ธฐ๋ณธ๊ฐ์ 1์ ๋๋ค.fastMode: ๋ ๋น ๋ฅด์ง๋ง ์ ์ฌ์ ์ผ๋ก ๋ ์ ํํ ๊ฐ์ง ๋ชจ๋๋ฅผ ์ฌ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๋ถ๋ฆฌ์ธ ๊ฐ. ๊ธฐ๋ณธ๊ฐ์false์ ๋๋ค.
์์:
const faceDetector = new FaceDetector({ maxDetectedFaces: 5, fastMode: true });
๊ฐ์ง๋ ์ผ๊ตด ์ฃผ์์ ์ฌ๊ฐํ ๊ทธ๋ฆฌ๊ธฐ
๊ฐ์ง๋ ์ผ๊ตด์ ์๊ฐ์ ์ผ๋ก ๊ฐ์กฐ ํ์ํ๋ ค๋ฉด HTML5 Canvas API๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ์์ ์ฌ๊ฐํ์ ๊ทธ๋ฆด ์ ์์ต๋๋ค. ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
const canvas = document.getElementById('myCanvas');
const context = canvas.getContext('2d');
const image = document.getElementById('myImage');
faceDetector.detect(image)
.then(faces => {
faces.forEach(face => {
const { x, y, width, height } = face.boundingBox;
context.beginPath();
context.rect(x, y, width, height);
context.lineWidth = 2;
context.strokeStyle = 'red';
context.stroke();
});
})
.catch(error => {
console.error('์ผ๊ตด ๊ฐ์ง ์คํจ:', error);
});
์ค์: ์บ๋ฒ์ค ์์๊ฐ ์ด๋ฏธ์ง ์์ ์์ ์ฌ๋ฐ๋ฅด๊ฒ ์์นํด์ผ ํฉ๋๋ค.
BarcodeDetector API ์ฌ์ฉํ๊ธฐ
BarcodeDetector API๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง์ ๋น๋์ค์์ ๋ฐ์ฝ๋๋ฅผ ๊ฐ์งํ๊ณ ๋์ฝ๋ฉํ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ๋ฐ์ฝ๋ ํ์์ ์ง์ํฉ๋๋ค:
- EAN-13
- EAN-8
- UPC-A
- UPC-E
- Code 128
- Code 39
- Code 93
- Codabar
- ITF
- QR Code
- Data Matrix
- Aztec
- PDF417
๊ธฐ๋ณธ ๋ฐ์ฝ๋ ๊ฐ์ง
๋ค์์ BarcodeDetector๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์
๋๋ค:
const barcodeDetector = new BarcodeDetector();
const image = document.getElementById('myBarcodeImage');
barcodeDetector.detect(image)
.then(barcodes => {
barcodes.forEach(barcode => {
console.log('๊ฐ์ง๋ ๋ฐ์ฝ๋:', barcode.rawValue);
console.log('๋ฐ์ฝ๋ ํ์:', barcode.format);
console.log('๊ฒฝ๊ณ ์์:', barcode.boundingBox);
});
})
.catch(error => {
console.error('๋ฐ์ฝ๋ ๊ฐ์ง ์คํจ:', error);
});
์ค๋ช :
BarcodeDetectorํด๋์ค์ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.- ๋ฐ์ฝ๋๊ฐ ํฌํจ๋ ์ด๋ฏธ์ง ์์์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ์ด๋ฏธ์ง ์์๋ฅผ ์ ๋ฌํ์ฌ
detect()๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. detect()๋ฉ์๋๋DetectedBarcode๊ฐ์ฒด์ ๋ฐฐ์ด๋ก ๊ท๊ฒฐ๋๋ Promise๋ฅผ ๋ฐํํฉ๋๋ค.- ๊ฐ
DetectedBarcode๊ฐ์ฒด์๋ ๊ฐ์ง๋ ๋ฐ์ฝ๋์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค:rawValue: ๋์ฝ๋ฉ๋ ๋ฐ์ฝ๋ ๊ฐ.format: ๋ฐ์ฝ๋ ํ์ (์: 'qr_code', 'ean_13').boundingBox: ๋ฐ์ฝ๋ ๊ฒฝ๊ณ ์์์ ์ขํ.
- ์ด ์ ๋ณด๋ฅผ ์ฝ์์ ๊ธฐ๋กํฉ๋๋ค.
- ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ํฌํจํฉ๋๋ค.
๋ฐ์ฝ๋ ๊ฐ์ง ํ์ ์ฌ์ฉ์ ์ ์
BarcodeDetector ์์ฑ์์ ํ์ ํํธ์ ์ ํ์ ๋ฐฐ์ด์ ์ ๋ฌํ์ฌ ๊ฐ์งํ๋ ค๋ ๋ฐ์ฝ๋ ํ์์ ์ง์ ํ ์ ์์ต๋๋ค:
const barcodeDetector = new BarcodeDetector({ formats: ['qr_code', 'ean_13'] });
์ด๋ ๊ฒ ํ๋ฉด ๊ฐ์ง๊ฐ QR ์ฝ๋์ EAN-13 ๋ฐ์ฝ๋๋ก ์ ํ๋์ด ์ฑ๋ฅ์ด ํฅ์๋ ์ ์์ต๋๋ค.
TextDetector API ์ฌ์ฉํ๊ธฐ (์คํ์ ๊ธฐ๋ฅ)
TextDetector API๋ ์ด๋ฏธ์ง ๋ด์ ํ
์คํธ ์์ญ์ ๊ฐ์งํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด API๋ ์์ง ์คํ์ ์ด๋ฉฐ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ๊ตฌํ๋์ง ์์ ์ ์๋ค๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค. ๊ฐ์ฉ์ฑ๊ณผ ๋์์ด ์ผ๊ด๋์ง ์์ ์ ์์ต๋๋ค. ์ฌ์ฉํ๊ธฐ ์ ์ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ์ ์คํ๊ฒ ํ์ธํ์ธ์.
๊ธฐ๋ณธ ํ ์คํธ ๊ฐ์ง (์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ)
๋ค์์ TextDetector๋ฅผ *์ฌ์ฉํ ์ ์๋* ๋ฐฉ๋ฒ์ ์์์ด์ง๋ง, ์๋ํ์ง ์์ ์ ์์์ ๊ธฐ์ตํ์ธ์:
const textDetector = new TextDetector();
const image = document.getElementById('myTextImage');
textDetector.detect(image)
.then(texts => {
texts.forEach(text => {
console.log('๊ฐ์ง๋ ํ
์คํธ:', text.rawValue);
console.log('๊ฒฝ๊ณ ์์:', text.boundingBox);
});
})
.catch(error => {
console.error('ํ
์คํธ ๊ฐ์ง ์คํจ:', error);
});
TextDetector๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ๊ฐ์ง์ ์ฑ๊ณตํ๋ฉด texts ๋ฐฐ์ด์๋ ๊ฐ๊ฐ rawValue(๊ฐ์ง๋ ํ
์คํธ)์ boundingBox๋ฅผ ๊ฐ์ง DetectedText ๊ฐ์ฒด๊ฐ ํฌํจ๋ฉ๋๋ค.
๊ณ ๋ ค์ฌํญ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
- ์ฑ๋ฅ: ํด๋ผ์ด์ธํธ ์ธก ์ฒ๋ฆฌ๊ฐ ์ด๋ค ๊ฒฝ์ฐ์๋ ์ฑ๋ฅ์์ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๋ณต์กํ ์ด๋ฏธ์ง ๋ถ์์ ์ฌ์ ํ ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์๋ชจํ ์ ์์ต๋๋ค. ์ฒ๋ฆฌ ์๊ฐ์ ์ต์ํํ๊ธฐ ์ํด ์น ์ ์ก์ ๋ง๊ฒ ์ด๋ฏธ์ง์ ๋น๋์ค๋ฅผ ์ต์ ํํ์ธ์. ๋ ๋น ๋ฅด์ง๋ง ์ ์ฌ์ ์ผ๋ก ๋ ์ ํํ ๊ฐ์ง๋ฅผ ์ํด
FaceDetector์fastMode์ต์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์. - ๊ฐ์ธ์ ๋ณด ๋ณดํธ: ์ฌ์ฉ์์๊ฒ ํด๋ผ์ด์ธํธ ์ธก ์ฒ๋ฆฌ์ ๊ฐ์ธ์ ๋ณด ๋ณดํธ ์ด์ ์ ๊ฐ์กฐํ์ธ์. API๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๊ณ ์๋์ง, ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์์ ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๊ณ ์๋์ง(๋๋ ์ด ๊ฒฝ์ฐ ์ฒ๋ฆฌ๋์ง ์๋์ง)์ ๋ํด ํฌ๋ช ํ๊ฒ ๊ณต๊ฐํ์ธ์.
- ์ค๋ฅ ์ฒ๋ฆฌ: API๊ฐ ์ง์๋์ง ์๊ฑฐ๋ ๊ฐ์ง๊ฐ ์คํจํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ํญ์ ๊ฐ๋ ฅํ ์ค๋ฅ ์ฒ๋ฆฌ ๋ก์ง์ ํฌํจํ์ธ์. ์ฌ์ฉ์์๊ฒ ์ ์ตํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ์ธ์.
- ๊ธฐ๋ฅ ๊ฐ์ง: Shape Detection API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋๋์ง ํ์ธํ์ธ์:
if ('FaceDetector' in window) {
// FaceDetector๊ฐ ์ง์๋ฉ๋๋ค
} else {
console.warn('์ด ๋ธ๋ผ์ฐ์ ์์๋ FaceDetector๊ฐ ์ง์๋์ง ์์ต๋๋ค.');
// ๋์ฒด ๊ตฌํ์ ์ ๊ณตํ๊ฑฐ๋ ๊ธฐ๋ฅ์ ๋นํ์ฑํํ์ธ์
}
- ์ ๊ทผ์ฑ: Shape Detection API ์ฌ์ฉ์ ์ ๊ทผ์ฑ ์ํฅ์ ๊ณ ๋ คํ์ธ์. ์๋ฅผ ๋ค์ด, ํน์ ๊ธฐ๋ฅ์ ํ์ฑํํ๊ธฐ ์ํด ์ผ๊ตด ๊ฐ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๊ฐ์ง๋์ง ์๋ ์ฌ์ฉ์๊ฐ ํด๋น ๊ธฐ๋ฅ์ ์ ๊ทผํ ์ ์๋ ๋์ฒด ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ธ์.
- ์ค๋ฆฌ์ ๊ณ ๋ ค์ฌํญ: ์ผ๊ตด ๊ฐ์ง ๋ฐ ๊ธฐํ ์ปดํจํฐ ๋น์ ๊ธฐ์ ์ฌ์ฉ์ ์ค๋ฆฌ์ ์ํฅ์ ์ผ๋์ ๋์ธ์. ์ฐจ๋ณ์ ์ด๊ฑฐ๋ ํด๋ก์ธ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ด๋ฌํ ๊ธฐ์ ์ ์ฌ์ฉํ์ง ๋ง์ธ์. ์๋ฅผ ๋ค์ด, ํน์ ์ธ๊ตฌ ์ง๋จ์ ๋ํด ๋ถ์ ํํ๊ฑฐ๋ ๋ถ๊ณต์ ํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์๋ ์ผ๊ตด ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฌ์ ํธํฅ์ ์ธ์งํ์ธ์. ์ด๋ฌํ ํธํฅ์ ์ํํ๊ธฐ ์ํด ์ ๊ทน์ ์ผ๋ก ๋ ธ๋ ฅํ์ธ์.
์ฌ์ฉ ์ฌ๋ก ๋ฐ ์์
Shape Detection API๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์์ด ๋ค์ํ๊ณ ํฅ๋ฏธ๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค. ๋ช ๊ฐ์ง ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ด๋ฏธ์ง ๋ฐ ๋น๋์ค ํธ์ง: ์ด๋ฏธ์ง์ ๋น๋์ค์์ ์ผ๊ตด์ ์๋์ผ๋ก ๊ฐ์งํ์ฌ ํํฐ, ํจ๊ณผ ๋๋ ์์ ์์ ์ ์ ์ฉํฉ๋๋ค.
- ์ฆ๊ฐ ํ์ค(AR): ์ผ๊ตด ๊ฐ์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ์ผ๊ตด์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ค์๊ฐ์ผ๋ก ์ค๋ฒ๋ ์ดํฉ๋๋ค.
- ์ ๊ทผ์ฑ: ์ด๋ฏธ์ง ์ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ์ค๋ช ํ์ฌ ์๊ฐ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ฅผ ๋์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์น์ฌ์ดํธ๋ ์ผ๊ตด ๊ฐ์ง๋ฅผ ์ฌ์ฉํ์ฌ ์น์บ ์คํธ๋ฆผ์ ์ฌ๋์ด ์์ ๋ ์ด๋ฅผ ์๋ ค์ค ์ ์์ต๋๋ค.
- ๋ณด์: ๋ณด์ ์ธ์ฆ ๋๋ ๋ฐ์ดํฐ ์ ๋ ฅ์ ์ํด ํด๋ผ์ด์ธํธ ์ธก ๋ฐ์ฝ๋ ์ค์บ๋์ ๊ตฌํํฉ๋๋ค. ์ด๋ ํนํ ๋ชจ๋ฐ์ผ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉํ ์ ์์ต๋๋ค.
- ์ธํฐ๋ํฐ๋ธ ๊ฒ์: ์ฌ์ฉ์์ ์ผ๊ตด ํ์ ์ด๋ ์์ง์์ ๋ฐ์ํ๋ ๊ฒ์์ ๋ง๋ญ๋๋ค. ๋์ ๊น๋นก์ด๊ฑฐ๋ ๋ฏธ์ ์ง์ด ์บ๋ฆญํฐ๋ฅผ ์กฐ์ข ํ๋ ๊ฒ์์ ์์ํด ๋ณด์ธ์.
- ๋ฌธ์ ์ค์บ: ์ค์บํ ๋ฌธ์์์ ํ
์คํธ ์์ญ์ ์๋์ผ๋ก ๊ฐ์งํ์ฌ OCR(๊ดํ ๋ฌธ์ ์ธ์) ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค.
TextDetector์์ฒด๋ OCR์ ์ํํ์ง ์์ ์ ์์ง๋ง, ์ถ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ํ ์คํธ ์์ญ์ ์ฐพ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค. - ์ ์ ์๊ฑฐ๋: ์ฌ์ฉ์๊ฐ ์ค์ ๋งค์ฅ์์ ์ ํ ๋ฐ์ฝ๋๋ฅผ ์ค์บํ์ฌ ์ ์ ์๊ฑฐ๋ ์น์ฌ์ดํธ์์ ์ ์ํ๊ฒ ์ฐพ์ ์ ์๋๋ก ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๋ ๋์๊ด์์ ์ฑ ์ ๋ฐ์ฝ๋๋ฅผ ์ค์บํ์ฌ ์จ๋ผ์ธ์์ ํ๋งค๋๋ ๊ฒ์ ์ฐพ์ ์ ์์ต๋๋ค.
- ๊ต์ก: ์ผ๊ตด ๊ฐ์ง๋ฅผ ์ฌ์ฉํ์ฌ ํ์์ ์ฐธ์ฌ๋๋ฅผ ์ธก์ ํ๊ณ ๊ทธ์ ๋ฐ๋ผ ํ์ต ๊ฒฝํ์ ์กฐ์ ํ๋ ๋ํํ ํ์ต ๋๊ตฌ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ํํฐ๋ง ํ๋ก๊ทธ๋จ์ ํ์์ ์ผ๊ตด ํ์ ์ ๋ชจ๋ํฐ๋งํ์ฌ ํผ๋์ค๋ฌ์ํ๊ฑฐ๋ ์ข์ ํ๋์ง ํ๋จํ๊ณ ์ ์ ํ ๋์์ ์ ๊ณตํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ์์: ๊ธ๋ก๋ฒ ์ ์ ์๊ฑฐ๋ ํ์ฌ๋ ๋ชจ๋ฐ์ผ ์น์ฌ์ดํธ์ ๋ฐ์ฝ๋ ์ค์บ๋์ ํตํฉํ์ฌ ์ฌ๋ฌ ๊ตญ๊ฐ์ ๊ณ ๊ฐ์ด ํ์ง ์ธ์ด๋ ์ ํ ๋ช ๋ช ๊ท์น์ ๊ด๊ณ์์ด ์ ์ํ๊ฒ ์ ํ์ ์ฐพ์ ์ ์๋๋ก ํ ์ ์์ต๋๋ค. ๋ฐ์ฝ๋๋ ๋ณดํธ์ ์ธ ์๋ณ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
Shape Detection API์ ๋์
Shape Detection API๋ ๋ธ๋ผ์ฐ์ ์์ ์ปดํจํฐ ๋น์ ์์ ์ ์ํํ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง, ๊ณ ๋ คํด์ผ ํ ๋ค๋ฅธ ๋์๋ ์์ต๋๋ค:
- ์๋ฒ ์ธก ์ฒ๋ฆฌ: OpenCV๋ TensorFlow์ ๊ฐ์ ์ ์ฉ ์ปดํจํฐ ๋น์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ด๋ฏธ์ง์ ๋น๋์ค๋ฅผ ์๋ฒ๋ก ๋ณด๋ผ ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ ๋ง์ ์ ์ฐ์ฑ๊ณผ ์ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ๋ ๋ง์ ์ธํ๋ผ๊ฐ ํ์ํ๊ณ ์ง์ฐ ์๊ฐ์ ๋ฐ์์ํต๋๋ค.
- WebAssembly(Wasm): C++์ ๊ฐ์ ์ธ์ด๋ก ์์ฑ๋ ์ปดํจํฐ ๋น์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ WebAssembly๋ก ์ปดํ์ผํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ์คํํ ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ค์ดํฐ๋ธ์ ๊ฐ๊น์ด ์ฑ๋ฅ์ ์ ๊ณตํ์ง๋ง ๋ ๋ง์ ๊ธฐ์ ์ ๋ฌธ ์ง์์ด ํ์ํ๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ๋ค์ด๋ก๋ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํฌ ์ ์์ต๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: tracking.js๋ face-api.js์ ๊ฐ์ ์ฌ๋ฌ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ปดํจํฐ ๋น์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ WebAssembly๋ณด๋ค ์ฌ์ฉํ๊ธฐ ์ฌ์ธ ์ ์์ง๋ง ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์์ต๋๋ค.
๊ฒฐ๋ก
ํ๋ก ํธ์๋ Shape Detection API๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปดํจํฐ ๋น์ ๊ธฐ๋ฅ์ ๋์ ํ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ํด๋ผ์ด์ธํธ ์ธก ์ฒ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ณ , ์ฌ์ฉ์ ๊ฐ์ธ์ ๋ณด๋ฅผ ๋ณดํธํ๋ฉฐ, ์๋ฒ ๋น์ฉ์ ์ ๊ฐํ ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์ง์์ด ์์ง ๋ฐ์ ์ค์ด์ง๋ง, ์ด API๋ ๋ณต์กํ ์์ ์ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ์ํํ ์ ์๋ ์น ๊ฐ๋ฐ์ ๋ฏธ๋๋ฅผ ์ฟ๋ณผ ์ ์๊ฒ ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์ง์์ด ๊ฐ์ ๋๊ณ API๊ฐ ์ฑ์ํด์ง์ ๋ฐ๋ผ ์ด ๊ธฐ์ ์ ๋์ฑ ํ์ ์ ์ด๊ณ ํฅ๋ฏธ๋ก์ด ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค. API๋ฅผ ์คํํ๊ณ , ๊ทธ ๊ฐ๋ฅ์ฑ์ ํ์ํ๋ฉฐ, ์น์ ๋ฏธ๋๋ฅผ ํ์ฑํ๊ธฐ ์ํด ๊ทธ ๋ฐ์ ์ ๊ธฐ์ฌํ์ธ์.
์ปดํจํฐ ๋น์ ๊ธฐ์ ์ ์ฌ์ฉํ ๋๋ ํญ์ ์ค๋ฆฌ์ ๊ณ ๋ ค์ฌํญ๊ณผ ์ฌ์ฉ์ ๊ฐ์ธ์ ๋ณด ๋ณดํธ๋ฅผ ์ต์ฐ์ ์ผ๋ก ์๊ฐํด์ผ ํฉ๋๋ค.