Python中如何实现OCR识别功能?
最近在研究图片文字识别,贵族老爷们有没有什么好使的库推荐一发啊,试着用了用 pytesseract,感觉识别效果太差了
Python中如何实现OCR识别功能?
tesseract-ocr 需要自己训练样本准确度才会高。
用Python做OCR,Tesseract是首选方案,配合pytesseract和PIL/Pillow就能快速上手。下面是完整代码示例:
# 安装依赖:pip install pytesseract Pillow
# 还需要单独安装Tesseract引擎:https://github.com/UB-Mannheim/tesseract/wiki
import pytesseract
from PIL import Image
import os
# 设置Tesseract路径(Windows需要,Linux/Mac通常不需要)
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
def basic_ocr(image_path):
"""基础OCR识别"""
try:
img = Image.open(image_path)
text = pytesseract.image_to_string(img, lang='chi_sim+eng') # 中英文混合识别
return text.strip()
except Exception as e:
return f"识别失败: {str(e)}"
def ocr_with_preprocess(image_path):
"""带预处理的OCR识别(提高准确率)"""
from PIL import ImageEnhance, ImageFilter
img = Image.open(image_path)
# 预处理步骤
img = img.convert('L') # 转灰度
img = ImageEnhance.Contrast(img).enhance(2.0) # 增强对比度
img = ImageEnhance.Sharpness(img).enhance(2.0) # 锐化
img = img.filter(ImageFilter.SHARPEN) # 再次锐化
# 自定义配置
custom_config = r'--oem 3 --psm 6'
text = pytesseract.image_to_string(img, lang='chi_sim', config=custom_config)
return text.strip()
# 使用示例
if __name__ == "__main__":
# 方法1:基础识别
result1 = basic_ocr("test.png")
print("基础识别结果:\n", result1)
# 方法2:预处理后识别
result2 = ocr_with_preprocess("test.png")
print("\n预处理后识别结果:\n", result2)
# 获取边界框信息(用于文本定位)
img = Image.open("test.png")
data = pytesseract.image_to_data(img, output_type=pytesseract.Output.DICT)
print("\n文本位置信息:", data['text'])
关键点说明:
- Tesseract安装:需要单独安装OCR引擎,Windows下注意设置
tesseract_cmd路径 - 语言包:
lang='chi_sim'用中文包,'eng'用英文,'chi_sim+eng'混合识别 - 预处理:灰度化、对比度增强、锐化能显著提升识别率
- 配置参数:
--oem 3用默认LSTM引擎,--psm 6假设为统一文本块
替代方案:
- 复杂场景用
easyocr:pip install easyocr,对中文支持更好 - 需要高精度用商业API:百度/腾讯OCR
总结建议:简单场景用Tesseract,复杂需求上easyocr。
baidu ocr 接口,最近一直用这个,5W 次 /天免费?
baidu ocr 能设计单行模式吗?
#2 #2 讲道理一天 5W 次?
有什么其他的地址吗?

什么不单行模式,只要其中某行的结果吗?如果是这样那为什么不先截出来再上传识别呢
控制台跟你的一样… 宣传页面是 500…
类似 tesseract 的 psm 7
Page segmentation modes:
0 Orientation and script detection (OSD) only.
1 Automatic page segmentation with OSD.
2 Automatic page segmentation, but no OSD, or OCR.
3 Fully automatic page segmentation, but no OSD. (Default)
4 Assume a single column of text of variable sizes.
5 Assume a single uniform block of vertically aligned text.
6 Assume a single uniform block of text.
7 Treat the image as a single text line.
我是直接下载的对应的中文训练集,就是不知道自己训练的话要如何实现呢?
大佬发个链接 0.0
谢谢啦
靠 效果确实不错 就是只有 500 次
通用识别(非高精度)应该有 5W 的,也够用
通用的只有 500 次啊,要是 5w 次的话,我就不用再找了
靠,控制台进去 5w 次,外面 500 次,醉了
我买的谷歌云提供的 vision
效果和费用怎么样
公网的话,用免费的 ocr 接口,不是特殊需求日常食用足以。
要内网使用,特殊的字符需求,数据集小的 [tesseract]( https://github.com/tesseract-ocr/tesseract) 3.05 训练好了。
数据集量够的话,可以看看深度学习的方法了:注意力+长短期记忆。
tesseract-ocr
我这边用效果不错,据说 4.x 会更好。
有个前提,图片扔给 ocr 之前需要做一些预处理,例如裁剪、对齐、颜色调整什么的,这样识别率才 ok。
之前搞直播答题外挂用的百度
请问有具体的 demo 吗,我试着用 PIL 处理,有时候处理后的效果比处理之前的好,有时候处理之后反而更不好了
tesseract-ocr 0.4 的中文识别效果好点, 我之前做的时候采用 ctpn 算法从文章把文字一行一行抠出来, 在送去识别, 经验证百度的效果更好. [:捂脸]
很便宜,月 1000 条免费,超出后每 1000 条 1.5 美元.效果不好说,没用过其他家的产品,除了手写的,其他的用谷歌很满意
tesseract-ocr 这东西需要你自己切图 + 标注, 对固定形态的文字其实效果还不错。
现在不是用神经网络来玩吗? keras 的 example 了解一下?
ctpn 可以很好的抠出横向排布的文字,接下来就是分词和识别的事了,但是 ctpn 对非水平文字效果不怎样,我最近也在研究 ocr 算法的问题,需求不能用 api (哎
那就只能研究 tesseract 了,我试试对图片做一些预处理,再试试训练一下样本数据看看效果怎么样




