Azure CustomVision.ai๋ฅผ Tulip Vision๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ํฌ์คํ ์ด์ ๊ณผ ๊ทธ ์ด์์์ ์ฝ๋ ์์ด ์ฝ๊ฒ ์๊ฐ์ ๊ฒ์ฌ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์์์๋ Tulip์ผ๋ก ์๊ฐ์ ๊ฒ์ฌ๋ฅผ ์ํด Microsoft Azure์ CustomVision.ai ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํฉ๋๋ค. CustomVision.ai ์๋น์ค๋ ์๊ฐ์ ์ธ์ ์์ ์ ์ํ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ ์๋น์ค์ ๋๋ค. Tulip์ ์ฌ์ฉํ๋ฉด CustomVision.ai๊ฐ ์ ๊ณตํ๋ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ํ์ต์ ์ํ ๋ฐ์ดํฐ๋ฅผ ์์งํ ์ ์์ต๋๋ค.
์ก์ ๊ฒ์ฌ๋ ์ผ์ ์์ ์์ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. ๊ณ ํ์ง์ ์ ํ๋ง ์์ฐ ๋ผ์ธ์์ ์ถ๊ณ ๋๋๋ก ํ๊ณ , ๋ฐํ ๋ถํ๊ณผ ์ฌ์์ ์ ์ค์ด๋ฉฐ, ์ค์ ์์จ์ ๋์ด๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ ์ก์ ๊ฒ์ฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ก์ ๊ฒ์ฌ์ ํฌ์ ๋๋ ์์์ ์ธ๋ ฅ์ ์ ์ฝํ ์ ์์ด ์ ์ฒด ๋น์ฉ์ ์ ๊ฐํ๊ณ ํจ์จ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ์ ๋ ดํ ์นด๋ฉ๋ผ๋ฅผ ๊ธฐ์กด ์ปดํจํฐ์ ์ฐ๊ฒฐํ๊ณ ๊ฒ์ฌ์ฉ Tulip ์ฑ์ ๊ตฌ์ถํ๋ฉด ๋ชจ๋ ์ํฌ์คํ ์ด์ ์ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ์ก์ ๊ฒ์ฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ ์ ์กฐ๊ฑด
- ์ก์ ๊ฒ์ฌ๋ฅผ ์ํ ์นด๋ฉ๋ผ๊ฐ ์ฅ์ฐฉ๋ ์๋ ์ค์ธ Tulip Vision ์ํฌ์คํ ์ด์ . Tulip Vision ์์ ๊ฐ์ด๋๋ฅผ ๋ฐ๋ฅด์ธ์.
- CustomVision.ai์์ ์ฌ์ฉํ ๊ณ์ (๋๋ ๋๋ฉ AI๋ฅผ ์ฌ์ฉํ ์ ์์) - ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
- ์ก์ ๊ฒ์ฌ ์์ ์ ์ฌ์ฉํ ์ ํ
- ๊ฒ์ฌํ๋ ค๋ ๊ฐ ์นดํ ๊ณ ๋ฆฌ ๋ฑ๊ธ(์: "ํฉ๊ฒฉ" ๋๋ "๋ถํฉ๊ฒฉ", "๊ฒฐํจ 1", "๊ฒฐํจ 2", "๊ฒฐํจ 3" ๋ฑ)์ ๋ํ ์ต์ 30๊ฐ์ ์ด๋ฏธ์ง๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ ์ธํธ. Tulip์์ ์ก์ ๊ฒ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๋ด๋ณด๋ด๋ ค๋ฉด ๊ฐ์ด๋์ ์ง์นจ์ ๋ฐ๋ฅด์ธ์.
์ก์ ๊ฒ์ฌ ์ค์ ์์

๊ฒ์ฌ ์ด๋ฏธ์ง๋ฅผ CustomVision.ai์ ์ ๋ก๋ํ๊ธฐ
๋ฐ์ดํฐ ์ธํธ Tulip ํ ์ด๋ธ์์ "๋ฐ์ดํฐ ์ธํธ ๋ค์ด๋ก๋"๋ฅผ ํด๋ฆญํ๊ณ ์ด๋ฏธ์ง ๋ฐ ์ฃผ์์ ๋ํ ๊ด๋ จ ์ด์ ์ ํํฉ๋๋ค. ๋ฐ์ดํฐ ์ธํธ .zip ํ์ผ์ ๋ค์ด๋ก๋ํ์ฌ ์ปดํจํฐ์ ํด๋์ ์์ถ์ ํ๋๋ค. ๋ฐ์ดํฐ ์ธํธ ํ ์ด๋ธ์ ์ฃผ์์ ๋ฐ๋ผ ๊ฐ ๊ฐ์ง ๋ฒ์ฃผ๋ณ๋ก ์ฌ๋ฌ ๊ฐ์ ํ์ ํด๋๊ฐ ์์ด์ผ ํฉ๋๋ค.
Customvision.ai์์ ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ญ๋๋ค:

ํ๋ก์ ํธ ์ด๋ฆ์ ์ง์ ํ๊ณ "๋ถ๋ฅ" ํ๋ก์ ํธ ์ ํ๊ณผ "๋ฉํฐํด๋์ค(์ด๋ฏธ์ง๋น ๋จ์ผ ํ๊ทธ)"๋ฅผ ์ ํํฉ๋๋ค. ๋ถ๋ฅ๋ฅผ ์ ํํฉ๋๋ค. ์ ํ ์ต์ : (์ด ์ต์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ํ๋์ด ์์ต๋๋ค.)

"์ด๋ฏธ์ง ์ถ๊ฐ"๋ฅผ ํด๋ฆญํฉ๋๋ค.

์ปดํจํฐ์์ ์์ ์ค ํ๋์ ๋ํ ์ด๋ฏธ์ง๋ฅผ ์ ํํฉ๋๋ค. ํค๋ฆฝ ํ ์์ถ์ ํผ ๋ฐ์ดํฐ ์งํฉ์์ ๊ฐ์ ธ์จ ํ์ ํด๋์ ์๋ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์ด๋ฏธ์ง๊ฐ Customvision.ai์ ๋ก๋๋๋ฉด ๋ชจ๋ ์ด๋ฏธ์ง์ ํ ๋ฒ์ ํ๊ทธ๋ฅผ ์ ์ฉํ์ฌ ํ๋์ฉ ํ๊ทธ๋ฅผ ์ง์ ํ๋ ๋ฒ๊ฑฐ๋ก์์ ์ค์ผ ์ ์์ต๋๋ค. ํ์ฌ ๋ชจ๋ ์ด๋ฏธ์ง๊ฐ ๋์ผํ ํด๋์ค์์ ๊ฐ์ ธ์จ ๊ฒ์ด๋ฏ๋ก ๊ฐ๋ฅํฉ๋๋ค.
๋ค์ ์์์์๋ ๋ชจ๋ "์ผ๋ฐ" ํด๋์ค ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํ๊ณ ๋ชจ๋ ์ด๋ฏธ์ง์ ํ๊ทธ(ํด๋์ค)๋ฅผ ํ ๋ฒ์ ์ ์ฉํฉ๋๋ค:

๋ค๋ฅธ ํด๋์ค์ ๋ํด์๋ ๋์ผํ ์ ๋ก๋ ์์ ์ ๋ฐ๋ณตํฉ๋๋ค.
์๊ฐ์ ๊ฒ์ฌ๋ฅผ ์ํ ๋ชจ๋ธ ํ์ต ๋ฐ ๊ฒ์ํ๊ธฐ
ํ์ต์ ์ํ ๋ฐ์ดํฐ๊ฐ ์ค๋น๋๋ฉด ๋ชจ๋ธ ํ์ต์ ์งํํฉ๋๋ค. ์ค๋ฅธ์ชฝ ์๋จ์ 'ํ๋ จ' ๋ชจ๋ธ์ ํด๋ฆญํ๋ฉด ํ๋ จ ๋ํ ์์๊ฐ ์ด๋ฆฝ๋๋ค.

ํ๋ จ ๋ชจ๋๋ฅผ ์ ์ ํ๊ฒ ์ ํํฉ๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ ๋๋ก ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ๋น ๋ฅด๊ฒ ์ํ ์คํํ๋ ค๋ฉด "๋น ๋ฅธ" ์ต์ ์ ์ฌ์ฉํ์ธ์. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ต์์ ๋ถ๋ฅ ๊ฒฐ๊ณผ๋ฅผ ์ป์ผ๋ ค๋ฉด "๊ณ ๊ธ" ์ต์ ์ ์ฌ์ฉํ์ธ์.

๋ชจ๋ธ์ด ํ์ต๋๋ฉด ์ฑ๋ฅ ๋ฉํธ๋ฆญ์ ๊ฒ์ฌํ ์ ์์ ๋ฟ๋ง ์๋๋ผ API ํธ์ถ์ ํตํด ์ก์ธ์คํ ์ ์๋๋ก ๋ชจ๋ธ์ ๊ฒ์ํ ์ ์์ต๋๋ค.

ํผ๋ธ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ ๋ฆฌ์์ค๋ฅผ ์ ํํ๊ณ ๊ณ์ ์งํํฉ๋๋ค.

์ด์ ๊ฒ์๋ ๋ชจ๋ธ์ด Tulip์ ์ถ๋ก ์์ฒญ์ ์๋ฝํ ์ค๋น๊ฐ ๋์์ต๋๋ค. ๊ณง Tulip์์ ์ฐ๊ฒฐํ ๋ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก ๊ฒ์ URL์ ๋ฉ๋ชจํด ๋์ธ์.


๊ฒ์๋ ๋ชจ๋ธ์ ์ถ๋ก ์์ฒญ์ ๋ง๋ค๊ธฐ ์ํ ์์ ฏ
์ฌ์ฉ์ ์ง์ ์์ ฏ์ ์ฌ์ฉํ์ฌ Tulip์์ Azure CustomVision.ai ์๋น์ค์ ์ถ๋ก ์์ฒญ์ ์ํํ ์ ์์ต๋๋ค. ์ค์ ์์ ์ฌ์ฉ์ ์ง์ ์์ ฏ ํ์ด์ง๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.

์ ์ฌ์ฉ์ ์ง์ ์์ ฏ์ ๋ง๋ค๊ณ ๋ค์ ์ ๋ ฅ์ ์ถ๊ฐํฉ๋๋ค:

์ฝ๋ ๋ถ๋ถ์ ๋ค์์ ์ฌ์ฉํฉ๋๋ค:
HTML
<button class="button" type="button">์ด์ ์งํ ๊ฐ์ง</button>
JavaScript
์ฐธ๊ณ : ์ฌ๊ธฐ์ CustomVision.ai ๊ฒ์๋ ๋ชจ๋ธ์์ URL๊ณผ ์์ธก ํค๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค.
ํจ์ b64toblob(image) {
const byteArray = Uint8Array.from(window.atob(image), c => c.charCodeAt(0));
return new Blob([byteArray], {type: 'application/octet-stream'});
}
๋น๋๊ธฐ ํจ์ detectAnomalies() { {
let image = getValue("imageBase64String");
const url = '<<< CustomVision.ai์ URL ์ฌ์ฉ>>';
.ajax({
url: url,
type: 'post',
data: b64toblob(image),
cache:false,
processData: false,
ํค๋: {
'์์ธก ํค': '<<< ์์ธก ํค ์ฌ์ฉ >>>',
'Content-Type': 'application/octet-stream'
},
์ฑ๊ณต: (์๋ต) => {
setValue("์์ธก", response["์์ธก"]);
},
error: (err) => {
console.log(err);
},
async: false,
});
}```
CSS
.button {
background-color:
616161;
ํ
๋๋ฆฌ: none;
์์: ํฐ์
padding: 15px 32px;
ํ
์คํธ ์ ๋ ฌ: ๊ฐ์ด๋ฐ
ํ
์คํธ ์ฅ์: ์์
ํ์: ์ธ๋ผ์ธ ๋ธ๋ก;
๊ธ๊ผด ํฌ๊ธฐ: 16px;
๋๋น: 100%;
}```
์ฌ์ฉ์ ์ง์ ์์ ฏ์์ jQuery ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฑํํด์ผ ํฉ๋๋ค.
์ฌ์ฉ์ ์ง์ ์์ ฏ์ ๋ค์๊ณผ ๊ฐ์ด ํ์๋์ด์ผ ํฉ๋๋ค:

ํค๋ฆฝ ์ฑ์์ ์์ธก ์์ ฏ ์ฌ์ฉํ๊ธฐ
์ด์ ์์ ฏ์ด ์ค์ ๋์์ผ๋ฏ๋ก ์ถ๋ก ์์ฒญ์ ์คํํ ์ฑ์ ์์ ฏ์ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ฑ ๋จ๊ณ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค:

์ผ๋ฐ ๋ฒํผ์ ์ฌ์ฉํ์ฌ ์ก์ ๊ฒ์ฌ ์นด๋ฉ๋ผ์์ ์ค๋ ์ท์ ์ฐ๊ณ ๋ณ์์ ์ ์ฅํฉ๋๋ค:

"์ด์ ์งํ ๊ฐ์ง" ์ฌ์ฉ์ ์ง์ ์์ ฏ์ ์ฌ์ฉํฉ๋๋ค.

์ค๋ ์ท ์ด๋ฏธ์ง ๋ณ์๋ฅผ base64 ๋ฌธ์์ด๋ก ๋ฐ์๋ค์ด๋๋ก ์์ ฏ์ ๊ตฌ์ฑํฉ๋๋ค.

์ถ๋ ฅ์ ๋ณ์์ ํ ๋นํ์ฌ ํ๋ฉด์ ํ์ํ๊ฑฐ๋ ๋ค๋ฅธ ์ฉ๋๋ก ์ฌ์ฉํฉ๋๋ค.

์ด์ ์ฑ์์ ์๊ฐ์ ๊ฒ์ฌ๋ฅผ ์ํ ์ถ๋ก ์์ฒญ์ ์คํํ ์ค๋น๊ฐ ๋์์ต๋๋ค.
์๊ฐ์ ๊ฒ์ฌ ์ฑ ์คํํ๊ธฐ
์ฑ์ด ์ค๋น๋๋ฉด ๋ฐ์ดํฐ ์์ง์ ์ฌ์ฉํ ๊ฒ์ฌ ์นด๋ฉ๋ผ๊ฐ ์๋ ํ๋ ์ด์ด ๊ธฐ๊ธฐ์์ ์ฑ์ ์คํํฉ๋๋ค. ์กฐ๋ช , ๊ฑฐ๋ฆฌ ๋๋ ๊ฐ๋์ ์ฐจ์ด๋ก ์ธํ ์ค๋ฅ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ๋ฐ์ดํฐ ์์ง์ ์ฌ์ฉํ ๊ฒ๊ณผ ๋์ผํ ์ํฉ์ ๊ฒ์ฌ ์ถ๋ก ์ ์ฌํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ค์์ ์คํ ์ค์ธ ์๊ฐ์ ๊ฒ์ฌ ์ฑ์ ์์ ๋๋ค:



