Skip to content

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
  • 支持的语言:主要支持中文、英文等主流语言
  • 手写体识别准确率可能因书写风格而异
  • 复杂背景可能影响识别效果
  • 建议对重要结果进行人工校验

基于 MIT 许可发布 厦门界云聚算网络科技有限公司