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

如何使用Java版Tesseract从图片中识别提取粗体文本

基于Java + Tesseract实现图片粗体文本提取方案

实现原理

Tesseract默认仅输出纯文本内容,要筛选粗体文本需要开启hOCR格式输出,该格式会附带每个文本块的字体属性(含字重信息),我们只需要解析hOCR内容筛选字重符合粗体标准的片段即可。

前置依赖

本地环境

  • 安装Tesseract OCR 4.x及以上版本,确保已加载对应语言的训练数据

Java项目依赖

以Maven为例,引入Tess4J(Tesseract的Java封装库):

<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>5.8.0</version>
</dependency>

核心实现步骤

  • 初始化Tesseract实例,开启hOCR输出和字体信息返回配置
TessBaseAPI api = new TessBaseAPI();
// 替换为你的tessdata目录路径
api.init("你的tessdata目录路径", "eng");
// 开启hOCR输出,同时返回字体信息
api.setHocr(true);
api.setVariable("hocr_font_info", "1");
  • 加载待识别图片,执行识别获取hOCR内容
File imageFile = new File("待识别图片路径");
BufferedImage image = ImageIO.read(imageFile);
api.setImage(image);
// 获取hOCR格式的XML结果
String hocrContent = api.getHOCRText(0);
api.end();
  • 解析hOCR内容,筛选粗体文本
    hOCR中每个文本行的class='ocrx_word'节点会携带title属性,其中font-weight字段对应字重,字重≥700即为粗体,你可以用Jsoup等XML解析库筛选符合条件的节点文本:
Document doc = Jsoup.parse(hocrContent);
Elements words = doc.select(".ocrx_word");
StringBuilder boldText = new StringBuilder();
for (Element word : words) {
    String title = word.attr("title");
    // 提取font-weight数值
    Pattern pattern = Pattern.compile("font-weight (\\d+)");
    Matcher matcher = pattern.matcher(title);
    if (matcher.find()) {
        int weight = Integer.parseInt(matcher.group(1));
        if (weight >= 700) {
            boldText.append(word.text()).append(" ");
        }
    }
}
// 输出筛选后的粗体文本,示例场景下会得到 "Thanksgiving"
System.out.println(boldText.toString().trim());

优化提示

如果识别场景中字体信息返回准确率低,可以提前对图片做预处理:先二值化后统计文本连通域的笔画宽度,粗体文本的笔画宽度比普通文本高30%以上,筛选对应区域后再做识别,可以大幅提升粗体提取的准确率。

内容的提问来源于stack exchange,提问作者k shiva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:15:07