Tesseract.js 实现 OCR 文字识别

举报
林欣 发表于 2025/04/14 11:32:22 2025/04/14
104 0 0
【摘要】 Tesseract.js 在识别图片中的文字时,可以获取每个文字(或单词)的精确位置信息,主要通过以下两种方式实现: 1. HOCR 输出(HTML 格式)Tesseract.js 支持生成 HOCR(HTML-based OCR) 格式的输出,其中包含每个识别元素的边界框坐标。关键字段:每个单词的 HTML 标签会包含 bbox 属性,格式为 bbox x1 y1 x2 y2,表示单词在图...

Tesseract.js 在识别图片中的文字时,可以获取每个文字(或单词)的精确位置信息,主要通过以下两种方式实现:

1. HOCR 输出(HTML 格式)

Tesseract.js 支持生成 HOCR(HTML-based OCR) 格式的输出,其中包含每个识别元素的边界框坐标。

  • 关键字段:每个单词的 HTML 标签会包含 bbox 属性,格式为 bbox x1 y1 x2 y2,表示单词在图片中的左上角坐标 (x1, y1) 和右下角坐标 (x2, y2)
  • 示例
    <span class="ocrx_word" id="word_1" title="bbox 100 200 300 250">Hello</span>
    
    这表示单词 “Hello” 的边界框从坐标 (100, 200)(300, 250)

2. 通过 ResultIterator 遍历结果

在 JavaScript 中,可以使用 ResultIterator 逐字遍历识别结果,并获取每个单词的坐标和置信度。

  • 代码示例
    import { createWorker } from 'tesseract.js';
    
    (async () => {
      const worker = await createWorker('eng'); // 加载英文模型
      await worker.loadLanguage('eng');
      await worker.initialize('eng');
    
      const result = await worker.recognize('image.png');
      const iterator = result.getIterator();
    
      iterator.forEachWord((word) => {
        const text = word.getText();
        const confidence = word.getConfidence();
        const bbox = word.getBoundingBox(); // 获取边界框 {x0, y0, x1, y1}
        console.log(`文字: ${text}, 置信度: ${confidence}, 位置: ${bbox}`);
      });
    
      await worker.terminate();
    })();
    

3. 关键参数配置

  • 设置识别模式
    使用 setPageSegMode(tesseract.PSM_SINGLE_WORD) 将每个单词作为独立块处理,提高坐标精度。
  • 启用 HOCR 输出
    通过 setTessVariable("tessedit_create_hocr", "1") 生成 HOCR 格式结果。

4. 应用场景

  • 票据识别:自动提取发票、收据中的文字及其位置。
  • 内容分析:定位社交媒体图片中的关键文字(如广告文案)。
  • 文档数字化:重建扫描文档的版式,保留文字位置信息。

5. 注意事项

  • 坐标原点:Tesseract 的坐标原点默认在图片左上角,y 轴向下延伸。
  • 图像预处理:对低质量图片(如模糊、倾斜)进行灰度化、二值化等预处理,可提升坐标精度。

如果需要进一步处理坐标数据(如可视化或映射到原始图像),可以结合 Canvas 或 OpenCV 等工具实现。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。