Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2度もゼロから書き直して、やっとブラウザでぬるぬる動くAIに辿り着いた話

 2度もゼロから書き直して、やっとブラウザでぬるぬる動くAIに辿り着いた話

Avatar for Tomohiro Inoue

Tomohiro Inoue

June 05, 2025
Tweet

Other Decks in Programming

Transcript

  1. AI࣮૷2ճ໨ in TypeScript TypeScript ͰΞϓϦʹ௚઀࣮૷ OpenCV.js ͱ͍͏ը૾ॲཧϥΠϒϥϦΛ࢖༻ <script src="opencv.js" type="text/javascript"></script>

    // cv.Mat ͱ͍͏ܗࣜͰը૾Λѻ͏ function processImage(image: cv.Mat): cv.Mat { // RGB -> നࠇը૾ʹม׵ let grayImage = new cv.Mat(); cv.cvtColor(image, grayImage, cv.COLOR_RGBA2GRAY); // 2ഒʹ֦େ let largeImage = new cv.Mat(); const largeImageSize = new cv.Size(grayImage.cols * 2, grayImage.rows * 2); cv.resize(grayImage, largeImage, largeImageSize, 0, 0, cv.INTER_LINEAR); return largeImage; }
  2. OpenCV.js Ͳ͏ͩͬͨʁ ΊͪΌͪ͘ΌϝϞϦϦʔΫͨ͠ OpenCV.js ͸ϝϞϦΛखಈͰղ์͠ͳ͍ͱ͍͚ͳ͍... // cv.Mat ͱ͍͏ܗࣜͰը૾Λѻ͏ function processImage(image:

    cv.Mat): cv.Mat { // RGB -> നࠇը૾ʹม׵ let grayImage = new cv.Mat(); cv.cvtColor(image, grayImage, cv.COLOR_RGBA2GRAY); // 2ഒʹ֦େ let largeImage = new cv.Mat(); const largeImageSize = new cv.Size(grayImage.cols * 2, grayImage.rows * 2); cv.resize(grayImage, largeImage, largeImageSize, 0, 0, cv.INTER_LINEAR); grayImage.delete(); return largeImage; } Delete Λ๨ΕΔͱϝϞϦʹ࢒Γଓ͚Δ
  3. OpenCV.jsɺͳΜͰͦΜͳ࢓༷ͳͷ...ʁʢ2/3ʣ OpenCV.js ͕ WebAssembly (Wasm) Λ࢖͍ͬͯΔ͔Β Wasm Ͱ֬อ͞ΕͨϝϞϦ͸ TS ͷ

    GC ͷର৅֎ let image = new cv.Mat(); cv::Mat* image = new cv::Mat(); TypeScript ଆͷॲཧ Wasm ଆͷॲཧ TypeScript ͷϝϞϦ Wasm ͷϝϞϦ image ͷϙΠϯλ image σʔλ delete Λݺͼ๨Εͨ৔߹
  4. OpenCV.jsɺͳΜͰͦΜͳ࢓༷ͳͷ...ʁʢ3/3ʣ OpenCV.js ͕ WebAssembly (Wasm) Λ࢖͍ͬͯΔ͔Β Wasm Ͱ֬อ͞ΕͨϝϞϦ͸ TS ͷ

    GC ͷର৅֎ let image = new cv.Mat(); image.delete(); cv::Mat* image = new cv::Mat(); delete image; TypeScript ଆͷॲཧ Wasm ଆͷॲཧ TypeScript ͷϝϞϦ Wasm ͷϝϞϦ image ͷϙΠϯλ image σʔλ delete ΛݺΜͩ৔߹
  5. AI࣮૷3ճ໨ in C++ ͷ݁຤ Wasm ࡞ͬͯΈͯͲ͏ͩͬͨʁ • ϝϞϦϦʔΫ͕ى͜Γʹ͘͘ͳͬͨ
 
 


    • େن໛σʔλͰϝτϦΫεऔΕΔΑ͏ʹͳͬͨͷͰAIਫ਼౓վળ΋ޮ཰Խͨ͠ const labelChecker = new LabelChecker(); const result = labelChecker.check(image); result.delete(); labelChecker.delete();
  6. ͍͞͝ʹ ·ͱΊ • Wasm Λ࢖͏࣌͸ delete ͕ඞཁ͔Ͳ͏͔͔֬ΊΑ͏ • ϒϥ΢βͰಈ͘ AI

    Λࣗࣾ։ൃ͢ΔͳΒ Wasm ʹ͢Δͷ͸݁ߏΞϦͳબ୒ࢶ ແࣄ׬੒ͯ͠νʔϜͰϩϒελʔΛ৯΂ͨ࣌ͷҰຕ