You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:55:20