ppu-paddle-ocr
Version:
Lightweight, probably the fastest PaddleOCR SDK in TypeScript. Runs anywhere JavaScript runs: Node.js, Bun, Deno, mobile react-native, web browsers, and browser extensions. Docker & CLI supported. The official SDK is browser-only. Accurate text detection
1 lines • 1.67 kB
JavaScript
import{MIN_CROP_WIDTH}from"./ctc.js";export async function preprocessImage(cropCanvas,targetHeight,imageProcessor,createCanvasProcessor){let originalWidth=cropCanvas.width;let originalHeight=cropCanvas.height;if(originalHeight===0||originalWidth===0){throw new Error(`Crop dimensions are zero: ${originalWidth}x${originalHeight}`)}let aspectRatio=originalWidth/originalHeight;let resizedWidth=Math.max(MIN_CROP_WIDTH,Math.round(targetHeight*aspectRatio));if(imageProcessor){let imgProcessor=new imageProcessor.ImageProcessor(cropCanvas);try{imgProcessor.resize({width:resizedWidth,height:targetHeight});let imageTensor=createImageTensorFromCanvas(imgProcessor.toCanvas(),resizedWidth,targetHeight);return{imageTensor,tensorWidth:resizedWidth,tensorHeight:targetHeight}}finally{imgProcessor.destroy()}}let processor=createCanvasProcessor(cropCanvas).resize({width:resizedWidth,height:targetHeight});let imageTensor=createImageTensor(processor,resizedWidth,targetHeight);return{imageTensor,tensorWidth:resizedWidth,tensorHeight:targetHeight}}export function createImageTensor(processor,width,height){let canvas=processor.toCanvas();return createImageTensorFromCanvas(canvas,width,height)}export function createImageTensorFromCanvas(canvas,width,height){let ctx=canvas.getContext("2d");let imageData=ctx.getImageData(0,0,width,height);let pixelData=imageData.data;let channelSize=height*width;let imageTensor=new Float32Array(3*channelSize);let INV_127_5=1/127.5;for(let i=0,p=0;i<channelSize;i++,p+=4){imageTensor[i]=(pixelData[p]??0)*INV_127_5-1}imageTensor.copyWithin(channelSize,0,channelSize);imageTensor.copyWithin(channelSize*2,0,channelSize);return imageTensor}