本文目录导读:

我来介绍几种编写简易OCR脚本的方法,从简单到复杂:
使用Tesseract(最简单,适合中文)
安装依赖
# macOS brew install tesseract brew install tesseract-lang # 中文语言包 # Ubuntu/Debian sudo apt-get install tesseract-ocr sudo apt-get install tesseract-ocr-chi-sim # 简体中文包 # Windows 下载安装包:https://github.com/UB-Mannheim/tesseract/wiki
Python脚本示例
import pytesseract
from PIL import Image
import cv2
import numpy as np
def simple_ocr(image_path):
# 读取图片
img = cv2.imread(image_path)
# 预处理(提高识别率)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# OCR识别
text = pytesseract.image_to_string(
thresh,
lang='chi_sim+eng', # 中英文混合
config='--psm 6' # 假设为统一的文本块
)
return text.strip()
# 使用示例
result = simple_ocr('image.png')
print(result)
使用百度OCR API(需要API Key)
import requests
import base64
def baidu_ocr(image_path):
# 获取access_token
client_id = '你的API Key'
client_secret = '你的Secret Key'
token_url = 'https://aip.baidubce.com/oauth/2.0/token'
params = {
'grant_type': 'client_credentials',
'client_id': client_id,
'client_secret': client_secret
}
response = requests.post(token_url, params=params)
access_token = response.json().get('access_token')
# OCR识别
with open(image_path, 'rb') as f:
image_data = base64.b64encode(f.read()).decode('utf-8')
ocr_url = f'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token={access_token}'
data = {
'image': image_data,
'language_type': 'CHN_ENG' # 中英文混合
}
response = requests.post(ocr_url, data=data)
result = response.json()
# 提取文本
if 'words_result' in result:
text = '\n'.join([item['words'] for item in result['words_result']])
return text
return ''
# 使用示例
result = baidu_ocr('image.png')
print(result)
使用EasyOCR(支持多种语言)
import easyocr
def easy_ocr(image_path):
# 创建OCR对象
reader = easyocr.Reader(['ch_sim', 'en']) # 中英文
# 识别图片
result = reader.readtext(image_path)
# 提取文本
text = '\n'.join([item[1] for item in result])
return text
# 使用示例
result = easy_ocr('image.png')
print(result)
完整的GUI界面(使用tkinter)
import tkinter as tk
from tkinter import filedialog, messagebox
import pytesseract
from PIL import Image, ImageTk
import cv2
import numpy as np
class OCRApp:
def __init__(self, root):
self.root = root
self.root.title("简易OCR工具")
self.root.geometry("800x600")
# 界面元素
self.setup_ui()
def setup_ui(self):
# 选择文件按钮
self.btn_select = tk.Button(
self.root,
text="选择图片",
command=self.select_image
)
self.btn_select.pack(pady=10)
# 图片预览
self.image_label = tk.Label(self.root, text="图片预览区域")
self.image_label.pack(pady=10)
# 识别结果
self.result_text = tk.Text(self.root, height=10, width=80)
self.result_text.pack(pady=10)
# 识别按钮
self.btn_ocr = tk.Button(
self.root,
text="开始识别",
command=self.perform_ocr
)
self.btn_ocr.pack(pady=10)
def select_image(self):
file_path = filedialog.askopenfilename(
filetypes=[("Image files", "*.png *.jpg *.jpeg *.bmp")]
)
if file_path:
self.image_path = file_path
# 显示缩略图
img = Image.open(file_path)
img.thumbnail((400, 300))
photo = ImageTk.PhotoImage(img)
self.image_label.config(image=photo)
self.image_label.image = photo
def perform_ocr(self):
if hasattr(self, 'image_path'):
try:
# 读取图片并OCR
img = cv2.imread(self.image_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
text = pytesseract.image_to_string(
thresh,
lang='chi_sim+eng'
)
# 显示结果
self.result_text.delete(1.0, tk.END)
self.result_text.insert(1.0, text.strip())
except Exception as e:
messagebox.showerror("错误", str(e))
else:
messagebox.showwarning("提示", "请先选择图片")
# 运行应用
if __name__ == "__main__":
root = tk.Tk()
app = OCRApp(root)
root.mainloop()
命令行工具版本
# ocr_cli.py
import argparse
import pytesseract
from PIL import Image
def main():
parser = argparse.ArgumentParser(description='简易OCR工具')
parser.add_argument('image', help='图片文件路径')
parser.add_argument('--lang', default='chi_sim+eng', help='识别语言')
parser.add_argument('--output', help='输出文件路径')
args = parser.parse_args()
# 执行OCR
text = pytesseract.image_to_string(
Image.open(args.image),
lang=args.lang
)
if args.output:
with open(args.output, 'w', encoding='utf-8') as f:
f.write(text)
print(f"结果已保存到: {args.output}")
else:
print(text)
if __name__ == '__main__':
main()
使用命令行:
python ocr_cli.py image.png --lang chi_sim+eng --output result.txt
安装依赖
# 基本依赖 pip install pillow opencv-python pip install pytesseract # 需要先安装Tesseract pip install easyocr # EasyOCR方式 pip install requests # API方式
优化建议
-
图片预处理:
- 转换为灰度图
- 二值化处理
- 去噪点
- 倾斜校正
-
提高识别率:
- 裁剪图片,只保留文字区域
- 调整对比度和亮度
- 使用适当的PSM模式
-
错误处理:
- 添加异常捕获
- 验证输入图片
- 处理编码问题
选择哪种方法取决于你的具体需求:
- 本地简单使用:Tesseract
- 需要高精度:百度OCR API
- 多语言支持:EasyOCR
- 批量处理:命令行版本
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播