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

优化Tesseract实现手机拍摄照片中数字的可靠识别

Tesseract手机照片数字识别优化指南

问题背景

我是Tesseract新手,尝试识别手机拍摄照片中的数字。目前使用tesseract、textcleaner.sh及bash脚本处理,核心脚本代码如下:

for PSM in  6 11 3
    do
        printf "CURRENT PSM is %d\n" "${PSM}"
        READ_CXX_ID=$(tesseract --psm ${PSM} "${file}" - | grep -oh "\w*0b79\w*" | tr -d '\n')
        if [ -z ${READ_CXX_ID} ]
        then
            printf "Couldn't read cxx ID for ${file} \n"
            printf "Lets check if converted file exists...\n"
            if [ ! -e "${file}.out.jpg" ]
            then
                printf "textcleaner not applied, lets create it...\n"
                # Here we will create JPG file instead of JPEG
                # So that it will not try to get CXX ID from the previous conversion
                ./textcleaner.sh -f 200 -i 1 ${file} "${file}.out.jpg"
            fi
            READ_CXX_ID=$(tesseract --psm ${PSM} "${file}.out.jpg" - | grep -oh "\w*0b79\w*" | tr -d '\n')
            if [ -z ${READ_CXX_ID} ]
            then
                printf "Even with textcleaner, ${PSM} couldn't read file..\n"
                printf "OCR ERROR , TRYING NEXT PSM...\n"

当前识别问题

已尝试调整不同PSM参数、用textcleaner预处理图像,但1000+张照片的识别成功率仅约75%。部分样本识别结果异常:

  • sample-1用--psm 1执行时提示字符过少,无法识别
  • sample-2用--psm 6执行时输出冗余内容,仅部分正确
  • sample-3用--psm 6执行时出现多余的“46”,末尾字符识别为问号而非9

环境信息

当前使用的Tesseract版本:

$  tesseract --version
tesseract 5.1.0-72-gb8b6
 leptonica-1.79.0
  libgif 5.1.4 : libjpeg 8d (libjpeg-turbo 2.0.3) : libpng 1.6.37 : libtiff 4.1.0 : zlib 1.2.11 : libwebp 0.6.1 : libopenjp2 2.3.1
 Found AVX2
 Found AVX
 Found FMA
 Found SSE4.1
 Found OpenMP 201511
 Found libarchive 3.4.0 zlib/1.2.11 liblzma/5.2.4 bz2lib/1.0.8 liblz4/1.9.2 libzstd/1.4.4
 Found libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh/0.9.3/openssl/zlib nghttp2/1.40.0 librtmp/2.3

无效尝试

试过模糊处理但无效果,操作及结果如下:

$  convert -blur 0x1 sample-1.jpeg sample-1.blurred.jpeg
$  tesseract sample-1.jpeg -
Estimating resolution as 251
x

Trying to OCR this number

$  tesseract sample-1.blurred.jpeg -
Estimating resolution as 314
¥

Trying to OCR this number

$  

优化方案

1. 必须加入自动倾斜校正

手机拍摄的照片几乎都会存在倾斜,这是影响Tesseract识别精度的核心因素之一,必须加入自动倾斜校正步骤。用ImageMagick的convert工具结合deskew功能实现:

convert ${file} -deskew 40% ${file}.deskewed.jpg

参数40%是允许的最大倾斜角度阈值,可根据实际样本调整(推荐范围30%-50%)。处理后的图像再交给textcleaner或直接用于OCR。

2. 优化图像预处理流程

当前textcleaner的参数适配性不足,调整预处理顺序和参数:

  • 先做倾斜校正,再执行textcleaner处理,避免预处理失效
  • 调整textcleaner参数:增加对比度(-c)、调整阈值(-t),示例:
./textcleaner.sh -f 200 -i 1 -c 10 -t 50 ${file}.deskewed.jpg ${file}.out.jpg
  • 低分辨率图像先放大:添加-s 2参数将图像放大2倍,提升字符清晰度

3. 优化Tesseract参数

  • 指定字符白名单:因为目标是识别字母数字组合,直接限定识别范围减少干扰:
tesseract --oem 3 --psm 6 -c tessedit_char_whitelist=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "${input_file}" -
  • 调整PSM策略:调整循环顺序,优先用--psm 6(假设单一文本块),再试--psm 8(单一单词)、--psm 10(单一字符),最后用--psm 11(稀疏文本)和--psm 3(默认)
  • 明确OEM模式:添加--oem 3确保启用LSTM引擎,这是Tesseract 5.x的核心识别引擎

4. 脚本逻辑优化

  • 预处理步骤前置:先完成倾斜校正+textcleaner处理,再执行OCR,避免重复尝试
  • 避免重复生成文件:先检查是否存在倾斜校正后的文件,再进行后续处理
  • 归档失败样本:把识别失败的文件单独移动到指定目录,后续针对性分析调整参数

5. 针对性处理异常样本

  • sample-1字符过少:改用--psm 8或--psm 10,同时确保图像放大到足够清晰
  • sample-2冗余内容:用更严格的字符白名单,或添加textcleaner的-e参数擦除小斑点干扰
  • sample-3字符错误:增加去噪步骤(convert ${file} -noise 3 ...),或调整textcleaner的滤波参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:54:15