UNPKG

image-dataset

Version:

Tool to build image dataset: collect, classify, review

93 lines (92 loc) 2.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const browser_1 = require("tensorflow-helpers/browser"); async function loadModels(args) { let baseModel = await (0, browser_1.loadImageModel)({ url: '/saved_models/base_model', cacheUrl: 'indexeddb://base_model', }); browser_1.tf.browser.toPixels; let classifierModel = await (0, browser_1.loadImageClassifierModel)({ baseModel, modelUrl: '/saved_models/classifier_model', cacheUrl: 'indexeddb://classifier_model', checkForUpdates: true, classNames: args.classNames, }); return classifierModel; } async function benchmark() { console.log('[benchmark] start'); console.log('[benchmark] loading labels...'); let labels; { let res = await fetch('/benchmark/labels'); let json = await res.json(); labels = json.labels; console.log({ labels }); } console.log('[benchmark] loading images...'); let images = []; { let res = await fetch('/benchmark/images'); let json = await res.json(); for (let url of json.images) { let image = new Image(); await new Promise((resolve, reject) => { image.src = url; image.onload = resolve; image.onerror = () => { reject(`Failed to load image: ${url}`); }; }); images.push(image); } console.log({ images }); } console.log('[benchmark] loading models...'); let classifierModel = await loadModels({ classNames: labels }); console.log({ classifierModel }); console.log('[benchmark] warm up model...'); let n = 5; let i = 0; for (let image of images) { let result = await classifierModel.classifyImage(image); i++; document.body.textContent = `warm up ${i}/${n} images`; if (i >= 5) { break; } } console.log('[benchmark] classifying images...'); document.body.textContent = `classifying ${images.length} images...`; n = images.length; i = 0; let startTime = performance.now(); for (let image of images) { let result = await classifierModel.classifyImage(image); i++; } let endTime = performance.now(); let duration = endTime - startTime; let seconds = duration / 1000; document.body.innerHTML = /* html */ ` <p>classified ${n} images</p> <p>total time used: ${seconds}s</p> <p>images per second: ${n / seconds}</p> <p>ms per image: ${duration / n}</p> `; return { images_count: n, total_seconds_used: seconds, images_per_second: n / seconds, ms_per_image: duration / n, }; } Object.assign(window, { loadModels, tf: browser_1.tf, cropAndResizeImageTensor: browser_1.cropAndResizeImageTensor, toTensor3D: browser_1.toTensor3D, benchmark, });