

背景:需要识别尺码图片的信息
这里我一共用过三种方法
1、通义千问的max模型:通过base64
import os
import json
import base64
from openai import OpenAI
from config import Config
from PIL import Image
import time
from datetime import datetime
import cv2
client = OpenAI(
api_key=Config.DASHSCOPE_API_KEY,
base_url=Config.DASHSCOPE_URL,
default_headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {Config.DASHSCOPE_API_KEY}",
}
)
system_prompt = """
# 角色
你是一名专业的 OCR 尺码识别助手并将识别结果格式化为标准 Markdown 表格输出。
## 能力
####内容脱敏
## 工作流程
1. 接收到图片后,使用 OCR 技术识别其中的尺码表格。
2. 提取并结构化表格信息,保留原有列顺序。
4. 以 Markdown 表格形式输出结果,不添加任何额外说明。
## 输出格式
- 仅输出 Markdown 表格,不包含任何其他文本或解释。
- 表格必须符合标准 Markdown 语法。
- 输出示例:
## 限制
- 不输出除 Markdown 表格以外的任何内容。
"""
#压缩图片尺寸
def compress_image(image_path, max_size=720):
image = Image.open(image_path)
image.thumbnail((max_size, max_size))
tmp_path = image_path.rsplit(".", 1)[0] + "_compressed.png"
if image.mode != 'L':
gray_image = image.convert('L')
else:
gray_image = image
gray_image.save(tmp_path, format="PNG")
return tmp_path
def perform_ocr(image_path,country):
start_time = time.time() # ⏱️ 开始计时
image_path = compress_image(image_path) # 压缩图片,保证����不超过1024x1024px
image_format = "jpeg" if image_path.lower().endswith((".jpg", ".jpeg")) else "png"
with open(image_path, "rb") as f:
img_b64 = base64.b64encode(f.read()).decode("utf-8")
image_data = f"data:image/{image_format};base64,{img_b64}"
# 用户消息:直接字符串
user_content = f"请识别这张尺码图片,并输出 Markdown 表格,\n图片内容:{image_data}"
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_content}
]
response = client.chat.completions.create(
model = Config.DASHSCOPE_MODEL,
messages = messages,
max_tokens = 4500,
temperature = Config.DASHSCOPE_temperature,
top_p = Config.DASHSCOPE_top_p,
frequency_penalty = Config.DASHSCOPE_frequency_penalty,
)
markdown_table = response.choices[0].message.content.strip()
end_time = time.time() # ⏱️ 结束计时
print(f"⏰ OCR 总耗时:{end_time - start_time:.2f} 秒")
return markdown_table
if __name__ == "__main__":
image_path = r"C:\Users\Admin\Desktop\图片命名\O1CN01wwhtNr1HbugI8D7Xt_!!2217014300777-0-cib.jpg"
country = "English"
markdown_table = perform_ocr(image_path, country)
print(markdown_table)
那么这个识别加翻译加上标准markdown输出是75s左右,识别了3张图片还是很稳定的就是慢2、飞浆OCR
import cv2
from paddleocr import PaddleOCR
import time
from datetime import datetime
def ocr_image(image_path, lang='ch'):
global start_time
start_time = time.time() # ⏱️ 开始计时
"""
使用PaddleOCR识别图片中的文字内容
参数:
image_path (str): 图片文件路径
lang (str): 识别语言
"""
try:
ocr_model = PaddleOCR(lang=lang)
result = ocr_model.predict(image_path)
return result
except Exception as e:
print(f"初始化OCR模型失败: {e}")
# 回退到默认中文模型
ocr_model = PaddleOCR(lang='ch')
result = ocr_model.predict(image_path)
return result
if __name__ == "__main__":
image_path = r"C:\Users\Admin\Desktop\ceshi\O1CN01wwhtNr1HbugI8D7Xt_!!2217014300777-0-cib.jpg"
# 尝试使用中文识别(通常支持中英文混合)
result = ocr_image(image_path, lang='ch')
end_time = time.time() # ⏱️ 结束计时
print(f"⏰ OCR 总耗时:{end_time - start_time:.2f} 秒")
# 解析并打印结果
if result and len(result) > 0:
for page_result in result:
if isinstance(page_result, dict) and 'rec_texts' in page_result:
texts = page_result['rec_texts']
scores = page_result['rec_scores']
for t, s in zip(texts, scores):
print(f"{t} ({s:.3f})")
elif isinstance(page_result, list):
# 处理列表格式的结果
for item in page_result:
if len(item) >= 2:
text_info = item[1]
if len(text_info) >= 2:
text = text_info[0]
score = text_info[1]
print(f"{text} ({score:.3f})")
同一张图片仅做识别是35秒,置信区间在0.90以上3、umi-ocr
同一张图0.9s支持http服务,同时 可以部署服务器直接调用给到夯