DeepSeek-OCR 使用
DeepSeek-OCR 是一个强大的光学字符识别(OCR)模型,能够准确识别图像中的文字内容,支持多种语言和复杂场景。
概述
DeepSeek-OCR 具有以下特点:
- 高精度文字识别
- 多语言支持
- 复杂场景适应性强
- 支持手写体识别
- 表格和文档结构理解
支持的功能
文本识别
- 印刷体文字识别
- 手写体文字识别
- 混合语言文本识别
文档理解
- 表格结构识别
- 表单字段提取
- 文档布局分析
图像处理
- 多种图像格式支持
- 图像预处理优化
- 倾斜校正
使用方法
基本文本识别
python
import openai
import base64
client = openai.OpenAI(
api_key="your_api_key",
base_url="https://realmrouter.cn/v1"
)
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
# 读取图像
base64_image = encode_image("document.jpg")
response = client.chat.completions.create(
model="deepseek/deepseek-ocr",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "请识别图像中的所有文字内容"
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
max_tokens=2000
)
print(response.choices[0].message.content)表格识别
python
response = client.chat.completions.create(
model="deepseek/deepseek-ocr",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": """
请识别这个表格的内容,并以Markdown格式输出。
包含表头和所有数据行。
"""
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
temperature=0.1,
max_tokens=3000
)表单字段提取
python
response = client.chat.completions.create(
model="deepseek/deepseek-ocr",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": """
请提取这个表单中的所有字段和对应的值,以JSON格式输出:
{
"字段名": "字段值",
...
}
"""
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
temperature=0.1
)多语言识别
python
response = client.chat.completions.create(
model="deepseek/deepseek-ocr",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": """
请识别图像中的文字,并:
1. 保持原始文本内容
2. 标注每种语言
3. 提供翻译(如果需要)
"""
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
]
)高级功能
手写体识别
python
response = client.chat.completions.create(
model="deepseek/deepseek-ocr",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": """
这是手写文字,请仔细识别并:
1. 尽可能准确地识别每个字符
2. 如果有不确定的字,请标注出来
3. 保持原始的段落结构
"""
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
temperature=0.2
)文档布局分析
python
response = client.chat.completions.create(
model="deepseek/deepseek-ocr",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": """
请分析这个文档的布局结构,包括:
1. 标题层级
2. 段落划分
3. 列表项目
4. 图表位置
以结构化的方式输出识别结果。
"""
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
max_tokens=4000
)批量处理
多图像批量识别
python
import os
def batch_ocr(image_folder, output_folder):
client = openai.OpenAI(
api_key="your_api_key",
base_url="https://realmrouter.cn/v1"
)
for filename in os.listdir(image_folder):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
image_path = os.path.join(image_folder, filename)
base64_image = encode_image(image_path)
response = client.chat.completions.create(
model="deepseek/deepseek-ocr",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "请识别图像中的所有文字内容"
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
temperature=0.1
)
# 保存结果
output_path = os.path.join(output_folder, f"{os.path.splitext(filename)[0]}.txt")
with open(output_path, 'w', encoding='utf-8') as f:
f.write(response.choices[0].message.content)
print(f"已处理: {filename}")
# 使用示例
batch_ocr("input_images", "output_texts")图像预处理
图像质量优化
python
from PIL import Image, ImageEnhance
import cv2
import numpy as np
def preprocess_image(input_path, output_path):
"""预处理图像以提高OCR准确率"""
# 读取图像
image = cv2.imread(input_path)
# 灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 降噪
denoised = cv2.fastNlMeansDenoising(gray)
# 二值化
_, binary = cv2.threshold(denoised, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# 保存预处理后的图像
cv2.imwrite(output_path, binary)
return output_path
# 使用示例
processed_image = preprocess_image("original.jpg", "processed.jpg")
base64_image = encode_image(processed_image)最佳实践
1. 图像质量要求
- 分辨率:建议至少 300 DPI
- 清晰度:避免模糊和失真
- 对比度:确保文字与背景有足够对比度
- 格式:推荐使用 PNG 或 JPEG
2. 拍摄技巧
- 保持相机稳定
- 确保光线充足
- 避免阴影和反光
- 垂直拍摄文档
3. 参数优化
python
# 高精度识别(较慢)
response = client.chat.completions.create(
model="deepseek/deepseek-ocr",
messages=[...],
temperature=0.1,
max_tokens=4000
)
# 快速识别(精度稍低)
response = client.chat.completions.create(
model="deepseek/deepseek-ocr",
messages=[...],
temperature=0.3,
max_tokens=2000
)错误处理
python
import time
def robust_ocr(client, image_path, max_retries=3):
for attempt in range(max_retries):
try:
base64_image = encode_image(image_path)
response = client.chat.completions.create(
model="deepseek/deepseek-ocr",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "请识别图像中的文字内容"
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
temperature=0.1
)
return response.choices[0].message.content
except Exception as e:
print(f"OCR识别失败 (尝试 {attempt + 1}/{max_retries}): {e}")
if attempt < max_retries - 1:
time.sleep(2 ** attempt)
else:
raise
# 使用示例
try:
result = robust_ocr(client, "document.jpg")
print(result)
except Exception as e:
print(f"OCR最终失败: {e}")应用场景
1. 文档数字化
- 历史文档扫描
- 合同文件处理
- 学术论文识别
2. 数据提取
- 发票信息提取
- 身份证识别
- 银行卡信息提取
3. 内容管理
- 图像搜索索引
- 多语言文档处理
- 手写笔记数字化
限制和注意事项
- 图像大小限制:建议不超过 10MB
- 支持的语言:主要支持中文、英文等主流语言
- 手写体识别准确率可能因书写风格而异
- 复杂背景可能影响识别效果
- 建议对重要结果进行人工校验