web-ai-toolkit
Version:
AI powered features on the web made easy
43 lines (36 loc) • 1.03 kB
text/typescript
/* eslint-disable no-async-promise-executor */
import { pipeline, env } from '@huggingface/transformers';
import { webGPUCheck } from '../../utils';
let ocr: any = undefined;
export async function runOCR(image: Blob | string, model = 'Xenova/trocr-small-printed') {
return new Promise(async (resolve, reject) => {
try {
if (!ocr) {
await loadOCR(model);
}
if (typeof image !== 'string') {
image = URL.createObjectURL(image);
}
const out = await ocr(image);
resolve(out);
}
catch(err) {
reject(err);
}
});
}
async function loadOCR(model: string): Promise<void> {
return new Promise(async (resolve) => {
if (!ocr) {
env.allowLocalModels = false;
env.useBrowserCache = false;
ocr = await pipeline('image-to-text', model || 'Xenova/trocr-small-printed', {
device: (navigator as any).ml ? 'webnn' : await webGPUCheck() ? 'webgpu' : 'wasm',
});
resolve();
}
else {
resolve();
}
});
}