如何用JavaScript旋转图片读竖排数字?求支持横竖文本的OCR API
一、用JavaScript自动旋转图片适配Tesseract OCR
要让Tesseract识别竖排数字,可通过Canvas API在前端自动将图片顺时针旋转90度,把竖排内容转为横排后再识别。以下是具体实现代码,可直接集成到现有Demo中:
// 异步旋转图片函数(顺时针90度) async function rotateImageClockwise(imageUrl) { const img = new Image(); img.crossOrigin = 'anonymous'; // 处理跨域图片加载问题 await new Promise(resolve => { img.onload = resolve; img.src = imageUrl; }); const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); // 旋转后画布宽高互换(原图片的高变宽,宽变高) canvas.width = img.height; canvas.height = img.width; // 坐标系变换:平移到中心→旋转90度→平移回原位置 ctx.translate(canvas.width / 2, canvas.height / 2); ctx.rotate(Math.PI / 2); ctx.translate(-img.width / 2, -img.height / 2); ctx.drawImage(img, 0, 0); // 将旋转后的画布转为Base64格式图片,供Tesseract识别 return canvas.toDataURL('image/jpeg'); } // 结合现有Tesseract逻辑使用 async function runOCR() { const defaultImage = 'https://i.ibb.co/jLhP6d2/all-deides-num.jpg'; const rotatedImage = await rotateImageClockwise(defaultImage); const worker = Tesseract.create(); // 识别旋转后的图片 const { data: { text } } = await worker.recognize(rotatedImage); console.log('识别结果:', text); worker.terminate(); // 释放资源 } // 调用执行 runOCR();
这段代码会自动处理图片旋转,无需手动操作,旋转后的图片可被Tesseract正常识别竖排转横排的数字。
二、支持横排+竖排文本识别的OCR替代方案
如果不想通过旋转图片适配,可直接选择原生支持多方向文本识别的OCR服务,常用选项包括:
- Google Cloud Vision API:自动检测文本方向,支持横排、竖排及任意角度的文本识别,准确率高,支持多语言。
- AWS Textract:专注文档场景的OCR服务,可识别不同方向的文本,同时支持表格、表单内容提取。
- 百度智能云OCR:国内服务商,提供多方向文本检测能力,有免费调用额度,集成流程简单。
- Tesseract参数优化(可选):若不想更换第三方API,可尝试调整Tesseract的页面分割模式参数(
tessedit_pageseg_mode),比如设置为11(自动检测文本区域与方向),但对竖排文本的识别稳定性不如旋转图片或专业API:
const { data: { text } } = await worker.recognize(defaultImage, 'eng', { tessedit_pageseg_mode: 11 });
内容的提问来源于stack exchange,提问作者Buzz Su
相关产品推荐
相关产品推荐

