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

Tesseract OCR法语字符识别异常及图像优化无效问题求助

解决Tesseract识别法语重音字符及字母I错误的方案

针对你遇到的法语重音字符(é、è、ê)和大小写字母I识别错误问题,可通过以下步骤优化:

1. 安装并启用法语语言包

Tesseract默认不包含法语训练数据,需手动配置:

  • 下载fra.traineddata文件,放入Tesseract安装目录下的tessdata文件夹(例:C:\Program Files\Tesseract-OCR\tessdata)
  • 调用image_to_string时指定lang='fra',强制使用法语模型识别

2. 调整Tesseract识别配置

修改自定义参数适配法语文本:

  • 保留--oem 3(混合引擎模式),将PSM模式改为--psm 3(自动页面分割,更适配多段落扫描件)
  • 添加字符白名单,限定识别范围为法语常用字符,减少误识别:
    custom_config = r'--oem 3 --psm 3 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzéèêàâôûùç0123456789.,;:!?\'"()[] '
    

3. 优化图像预处理流程

  • 避免用JPEG保存中间图像:JPEG有损压缩会丢失字符细节,改用PNG格式(或直接跳过本地保存步骤)
  • 替换二值化方式:用自适应阈值替代Otsu阈值,更适配光照不均的扫描件:
    work_img = cv2.adaptiveThreshold(filtered_img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
    
  • 简化无效预处理:当前(1,1)内核的膨胀+腐蚀操作作用有限,可根据图像质量调整内核大小或直接移除

4. 简化图像流转流程

无需将pdf2image生成的PIL图像存盘再读取,直接转为OpenCV格式,减少质量损失:

img_cv = cv2.cvtColor(np.array(img[page_number]), cv2.COLOR_RGB2BGR)

优化后的完整代码

import pytesseract
from tkinter.filedialog import askopenfilename
from pdf2image import convert_from_path
import os
import cv2
import numpy as np

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' 

filePath = askopenfilename()
img = convert_from_path(filePath, poppler_path=r'C:\poppler-0.68.0_x86\poppler-0.68.0\bin')
path, fileName = os.path.split(filePath)
fileBaseName, fileExtension = os.path.splitext(fileName)

txt = ""
# 法语识别专属配置
custom_config = r'--oem 3 --psm 3 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzéèêàâôûùç0123456789.,;:!?\'"()[] '

for page_number in range(len(img)):
    # 直接转换PIL图像为OpenCV格式
    img_cv = cv2.cvtColor(np.array(img[page_number]), cv2.COLOR_RGB2BGR)
    gray = cv2.cvtColor(img_cv, cv2.COLOR_BGR2GRAY)
    
    # 去噪+自适应阈值处理
    filtered_img = cv2.bilateralFilter(gray, 5, 75, 75)
    work_img = cv2.adaptiveThreshold(filtered_img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

    # 指定法语识别
    page_txt = pytesseract.image_to_string(work_img, lang='fra', config=custom_config)
    txt += page_txt
    print(f"Page # {page_number} - {page_txt[:50]}...")

# 保存识别结果
with open(f"{os.path.join(path, fileBaseName)}_ocr.txt", "w", encoding="utf-8") as f:
    f.write(txt)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:25:24