PythonOCR文字识别教程_Tesseract与图像预处理案例

OCR识别核心是图像预处理而非调参:先灰度化与自适应二值化,再开运算去噪,接着倾斜校正,最后缩放至300 DPI;中文需指定lang='chi_sim'并配置tessdata,PSM模式按场景选用。

用 Python 做 OCR 识别,核心是让图像“更适合被 Tesseract 看懂”——不是靠调高参数,而是把图片先处理干净。Tesseract 本身不擅长处理模糊、倾斜、低对比度或带噪点的图,所以预处理比换模型更关键。

安装与基础配置

Tesseract 需要系统级安装(不只是 pip),Python 端用 pytesseract 调用:

  • macOS:用 brew install tesseract,再 pip install pytesseract opencv-python numpy
  • Windows:去 UB-Mannheim 官网 下安装包,勾选添加到 PATH;之后 pip 安装同上
  • 验证是否成功:import pytesseract; print(pytesseract.get_tesseract_version())
  • 中文识别必须指定语言:lang='chi_sim'(简体)或 'chi_tra'(繁体),需提前下载对应训练数据(tessdata 仓库)并放入 Tesseract 的 tessdata 目录

图像预处理四步法

多数识别失败,问题出在输入图像。以下四步按顺序做,每步解决一类常见干扰:

  • 灰度化 + 二值化:去掉颜色干扰,突出文字区域。推荐用 OpenCV 的自适应阈值(cv2.adaptiveThreshold),比全局阈值更适应光照不均的图
  • 去噪 & 细化:用形态学操作(如 cv2.morphologyEx 中的开运算)清除散点噪点;对细字体可加 cv2.ximgproc.thinning(需 opencv-contrib-python)
  • 倾斜校正:检测文字行角度,用仿射变换旋转。简单方法是霍夫线检测后取中位角;也可用 skimage.transform.rotate 配合投影法粗估
  • 分辨率提升:Tesseract 推荐 300 DPI。若原图太小,用 cv2.resize 放大(插值选 cv2.INTER_CUBIC),但别过度放大,否则边缘发虚

实战代码片段(含注释)

以下是一个端到端可运行的精简流程,处理一张扫描件截图:

Red Panda AI

AI文本生成图像

下载

import cv2
import numpy as np
import pytesseract

def preprocess(img_path): img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)

自适应二值化

binary = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
# 开运算去噪
kernel = np.ones((2,2), np.uint8)
cleaned = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)
# 放大至 300 DPI 等效尺寸(假设原始为 72 DPI,放大 ~4.2x)
h, w = cleaned.shape
resized = cv2.resize(cleaned, (int(w*4.2), int(h*4.2)), interpolation=cv2.INTER_CUBIC)
return resized

img_pre = preprocess("receipt.jpg")
text = pytesseract.image_to_string(img_pre, lang='chi_sim', config='--psm 6')
print(text.strip())

注意:--psm 6 表示“假设为单块均匀文本”,适合常规文档;表格或混排内容可试 --psm 4(分段)或 --psm 1(自动页面分割)

避坑提醒

这些细节不处理,准确率会断崖下跌:

  • Tesseract 对阴影、水印、底纹极度敏感——预处理时先用 cv2.inpaint 或背景建模抹掉大面积灰斑
  • 中文标点(如《》【】)识别率偏低,可在后处理中用正则替换近似字符(如 “〈” → “《”)
  • 小字号(<10px)或手写体建议换专用模型(PaddleOCR、EasyOCR),Tesseract 不是万能的
  • 识别结果含大量空行或乱码?大概率是二值化阈值不合适,改用 Otsu 法(cv2.threshold(..., cv2.THRESH_OTSU))自动寻优

相关推荐:

谷歌为“我的广告中心”新增 AI 生成标记,可识别 AI 制作广告

7 月 10 日消息,谷歌昨天宣布为“My Ad Center”(注:我的广告中心)增加 AI 生成标记,用户可在此查看 Google 搜索、Google Discover 和 YouTube 展示的广告是否由 AI 生成或编辑。据介绍,用户只需要点击广告右边的三点菜单或信息按钮,就能查看广告是否由 AI 制作,还可以在此屏蔽或举报广告。谷歌表示,以后使用自家 AI 工具生成的广告,都会在投放时主...

能直接用公开 Instagram 帖子生成图像,Meta 新 AI 功能被“骂”到下线

7 月 11 日消息,据《综艺(Variety)》杂志今天(11 日)报道,Meta 将下线利用公开 Instagram 账号生成图像的 AI 功能。由于默认允许系统引用公开内容、账号持有人需要主动选择退出,推出后数日内持续遭到批评,好莱坞多家艺人经纪公司也表达了不满。Meta 发言人在声明中说:“本周早些时候,我们宣布,用户可以在 Meta AI 中 @提及公开 Instagram 账号,并将账...

微软工程师揭秘:Win95 靠“名字”识别安装程序

7 月 8 日消息,据微软资深工程师雷蒙德 · 陈当地时间 7 月 7 日在微软官网发文介绍,虽然 Windows 95 本身已经具备拦截存在缺陷的第三方安装程序、防止其降级系统组件的能力,但随之而来还有一个难题:系统该如何识别安装程序或安装文件正在运行。注意到,为解决这一问题,微软采用了一套十分简易的启发式判定机制,核心逻辑是通过文件名“猜测”程序是否为安装程序。判定规则很简单:如果正在运行的程...

字节发布多模态图像创作模型 Seedream 5.0 Pro:复杂信息可视化、交互式精准编辑

7 月 8 日消息,字节跳动今日宣布,正式发布多模态图像创作模型 Seedream 5.0 Pro。据介绍,相比之前版本,Seedream 5.0 Pro 在图文匹配、结构合理性、文字渲染与画面美感等基础能力上全面提升:复杂信息可视化:将数据、概念与密集文字准确转化为专业排版,直接用于高信息密度的内容生产。▲ Prompt:生成一张《新手观鸟入门指南》自然科普信息图,采用清新配色的网格排版,展示 ...

小米米家冰箱推送 OTA 升级:新增临期 / 过期提醒、低温食材预处理模式等

感谢网友 顺势而为 的线索投递! 6 月 27 日消息,小米集团大家电部总经理单联瑜宣布,米家冰箱 OTA 升级今天起陆续推送。整理如下:升级「食材管理」新增语音录入自定义食材:支持米家 App 内语音添加食材可识别食材名称、储存位置、存储期新增手动录入自定义食材:支持米家 App 内手动添加自定义食材支持添加图片、名称、储存位置、存储期新增食材状态可视化:基于食材存储周期,以颜色区分最佳赏味期、...

389 元 3D 人脸识别 + 智能猫眼:德施曼龙霆 A3F 智能门锁破冰新低

德施曼旗下:龙霆 A3F 智能门锁日常 799 元,支持 3D 人脸识别 + 智能猫眼。今日实付 512 元,下单后联系客服立打 8 折返现 + 晒单返 20 元,折合仅需 389 元。先领 9 折券:点此领券京东龙霆 A3F 智能门锁支持智能猫眼券后 512 元领 100 元券目前宝贝主图有“限量抢 8 折”提示,可放心下单。如无此提示,活动大概率已结束,请咨询客服。质保三年,今日下单送一年,一...

66铃声怎么一键识别本地视频里的BGM

真正“一键识别本地视频BGM”的闭环方案是曲多多App离线识别:支持iOS/Android端直读相册视频,音频指纹本地生成并加密上传比对,无需上传原始文件,开启“忽略人声”后8–12秒出结果,含试听、下载及波形定位跳转功能。 你想从手机里存着的本地视频中快速揪出那段让人上头的BGM,但又不想上传到网站、不希望音频流经第三方服务器,更不想手动剪开视频再拖进识别工具——这时候你需要的是真正“一键识别本...

iPhone 17面容识别快吗 iPhone 17 Face ID识别速度提升

iPhone 17 Face ID识别速度提升约15%,通过算法优化、双模注册、注视感知动态校准及自适应学习实现“拿起即开”,暗光、戴镜、口罩等场景下稳定在0.3秒内。 iPhone 17 的 Face ID 识别速度确实更快了——不是小修小补,而是实打实的提速。根据 iOS 26.5 Beta 3(2026年4月发布)的官方优化说明,Face ID 识别效率整体提升约 15%;而更早的 iOS ...