TesseractJS无法识别非0/90度对齐文本,已开自动旋转仍无效
TesseractJS无法识别倾斜/倒转文本的解决方案
针对你遇到的问题——即使开启PSM.AUTO_OSD仍无法识别倾斜或从下到上排列的文本,可通过以下几个方向调整:
1. 优化页面分割模式(PSM)
PSM.AUTO_OSD虽集成了方向检测,但对极端倾斜或倒转文本的支持有限,建议换用更针对性的模式:
PSM.SPARSE_TEXT_OSD:适配零散、非连续的倾斜文本,同时保留方向检测功能PSM.RAW_LINE:直接识别单条文本线,适合已知文本为单行但倾斜的场景
修改参数示例:
await newWorker.setParameters({ tessedit_pageseg_mode: PSM.SPARSE_TEXT_OSD, tessedit_do_osd: 1, // 明确启用方向检测模块 });
2. 增加图像预处理步骤
Tesseract内置预处理能力有限,提前对图像做灰度化、对比度增强、降噪,能大幅提升极端场景下的识别率。以下是用Jimp库预处理的示例:
先安装依赖:
npm install jimp
再修改代码:
import Jimp from 'jimp'; // 图像预处理函数 async function preprocessImage(base64Url: string) { const image = await Jimp.read(base64Url); return image .greyscale() // 转灰度减少颜色干扰 .contrast(0.3) // 提高文本与背景对比度 .normalize() // 归一化像素值 .getBase64Async(Jimp.MIME_PNG); } const extractText = async (base64Url: string) => { if (worker) { const processedImg = await preprocessImage(base64Url); const ret = await worker.recognize(processedImg); // 可查看OSD检测的旋转角度,确认是否需要手动调整 console.log("检测到的旋转角度:", ret.data.osd?.rotation); return ret.data.text; } }
3. 手动处理倒转文本
如果是从下到上的倒转文本,Tesseract的OSD可能无法完全识别,可尝试手动旋转180度后再识别:
async function rotateImage180(base64Url: string) { const image = await Jimp.read(base64Url); return image.rotate(180).getBase64Async(Jimp.MIME_PNG); } // 识别时尝试原图像+旋转后图像的双重识别 const extractText = async (base64Url: string) => { if (worker) { const processedImg = await preprocessImage(base64Url); const rotatedImg = await rotateImage180(processedImg); const [ret1, ret2] = await Promise.all([ worker.recognize(processedImg), worker.recognize(rotatedImg) ]); // 返回非空的识别结果 return ret1.data.text || ret2.data.text; } }
4. 检查语言包兼容性
确保你使用的语言包支持垂直/特殊方向的文本识别,比如中文需使用chi_sim或chi_tra的完整语言包,避免使用精简版。
内容的提问来源于stack exchange,提问作者Adi
相关产品推荐
相关产品推荐

