当前位置: 首页 > news >正文

Python 中调用阿里云 OCR(Optical Character Recognition,光学字符识别)服务

在 Python 中调用阿里云 OCR(Optical Character Recognition,光学字符识别)服务,通常需要使用阿里云的 SDK。OCR 服务属于阿里云“视觉智能(Vision Intelligence)”产品线的一部分,调用时需通过 API 的方式实现。

以下是一个使用阿里云 Python SDK 调用 OCR 通用文字识别接口的基本示例,适用于支持返回坐标的 OCR 接口(如通用文字识别、卡证识别等),并展示如何获取坐标信息:


✅ 前提条件

  1. 开通服务:确保你已经在阿里云上开通了 OCR 服务。
  2. 获取 AccessKey
    • 登录 阿里云控制台
    • 进入【AccessKey 管理】页面,创建或获取你的 AccessKeyIdAccessKeySecret
  3. 安装依赖包
pip install aliyunsdkcore
pip install aliyunsdkgreen

注意:OCR 接口目前主要通过自定义调用阿里云 OpenAPI 实现,部分接口可能还在 Green 或 Vision 模块中。


🧩 示例代码(调用通用OCR识别并获取坐标)

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
import json# 初始化客户端
client = AcsClient('<your-access-key-id>', '<your-access-key-secret>','cn-shanghai'  # OCR服务所在区域,根据实际情况填写
)def ocr_recognize(image_url):request = CommonRequest()request.set_domain('ocr.cn-shanghai.aliyuncs.com')request.set_version('2021-07-07')request.set_action_name('RecognizeGeneralText')  # 使用通用OCR接口request.set_method('POST')# 设置请求参数request.add_query_param('Url', image_url)  # 图片URL# 如果是上传图片二进制数据,可以使用 Body 参数传入 Base64 编码内容# request.add_body_params('ImageURL', image_url)response = client.do_action_with_exception(request)result = json.loads(response)return result# 示例调用
if __name__ == '__main__':image_url = "https://example.com/test_image.jpg"  # 替换为你的图片URLresult = ocr_recognize(image_url)if result.get("Code") == "200":print("识别成功!")for item in result["Data"]["Result"]["Elements"]:text = item["Text"]box = item["Box"]  # 获取坐标信息,格式为 [x1,y1, x2,y2, x3,y3, x4,y4]print(f"文字: {text}, 坐标: {box}")else:print("识别失败:", result.get("Message"))

📌 关键说明

字段含义
Text识别出的文字内容
Box文字所在的矩形框坐标,格式为 [x1, y1, x2, y2, x3, y3, x4, y4],按顺时针排列

🔁 支持的OCR接口(可根据需求替换 ActionName)

接口名描述
RecognizeGeneralText通用文字识别(支持坐标)
RecognizeIdCard身份证识别
RecognizeBankCard银行卡识别
RecognizeBusinessLicense营业执照识别
RecognizeInvoice发票识别

你可以根据实际用途替换 set_action_name() 中的接口名称,并查看对应文档中返回字段结构。


📚 参考文档

  • OCR 官方文档:https://help.aliyun.com/product/58629.html
  • Python SDK 文档:https://help.aliyun.com/document_detail/53090.html

根据你的需求,你希望在 Python 中调用阿里云的 OCR 服务,并返回识别文本的坐标信息。以下是一个简洁的 Python 模板,用于调用阿里云 OCR 服务(基于阿里云 Content Moderation SDK),并获取文本的坐标信息。模板将使用阿里云的通用文字识别接口,并确保返回的 JSON 响应中包含文本的边界框(bounding box)坐标。

前提条件

  1. 阿里云账户:确保你已注册阿里云账户,并开通了 Content Moderation 服务(OCR 功能包含在内)。
  2. AccessKey:获取你的 AccessKey ID 和 AccessKey Secret(参考阿里云文档:https://www.alibabacloud.com/help/en/ram/user-guide/create-an-accesskey-pair)。
  3. SDK 安装:安装阿里云 Python SDK。
  4. 环境:Python 3.x 环境,安装必要的依赖库。

安装依赖

运行以下命令安装阿里云 SDK:

pip install aliyun-python-sdk-core
pip install aliyun-python-sdk-green

Python 模板代码

以下是一个简洁的 Python 脚本,用于调用阿里云 OCR 服务,识别图片中的文本并返回坐标信息:

# -*- coding: utf-8 -*-
import json
import uuid
from aliyunsdkcore.client import AcsClient
from aliyunsdkgreen.request.v20180509 import ImageSyncScanRequestclass AliyunOCRAnalyzer:def __init__(self, access_key_id, access_key_secret, region_id="cn-shanghai"):"""初始化阿里云 OCR 客户端"""self.client = AcsClient(access_key_id, access_key_secret, region_id)def recognize_text_with_coordinates(self, image_url):"""调用阿里云 OCR 服务,识别图片文本并返回坐标"""try:# 创建 OCR 请求request = ImageSyncScanRequest()request.set_accept_format('JSON')# 设置任务参数task = {"dataId": str(uuid.uuid1()),"url": image_url,"extras": {"ocr": "all"  # 启用通用文字识别}}# 配置请求request.set_content(json.dumps({"tasks": [task], "scenes": ["ocr"]}))# 发送请求并获取响应response = self.client.do_action_with_exception(request)result = json.loads(response.decode('utf-8'))# 解析 OCR 结果if result.get("code") == 200 and result.get("data"):for task_result in result["data"]:if task_result.get("results"):for res in task_result["results"]:if res.get("scene") == "ocr" and res.get("suggestion") == "pass":ocr_data = res.get("details", [])for item in ocr_data:text = item.get("text", "")coordinates = item.get("locations", [])print(f"文本: {text}")print(f"坐标: {coordinates}")# 示例坐标格式: [{"x": 100, "y": 200, "width": 50, "height": 30}, ...]else:print(f"OCR 请求失败: {result.get('msg', '未知错误')}")except Exception as e:print(f"错误: {str(e)}")def main():# 替换为你的 AccessKey 和图片 URLaccess_key_id = "YOUR_ACCESS_KEY_ID"access_key_secret = "YOUR_ACCESS_KEY_SECRET"image_url = "https://example.com/test.jpg"  # 替换为实际图片 URL# 初始化 OCR 分析器ocr_analyzer = AliyunOCRAnalyzer(access_key_id, access_key_secret)# 调用 OCR 并获取坐标ocr_analyzer.recognize_text_with_coordinates(image_url)if __name__ == "__main__":main()

代码说明

  1. 命名:类名为 AliyunOCRAnalyzer,简洁且反映了阿里云 OCR 分析功能。
  2. 初始化
    • 使用 AcsClient 初始化阿里云客户端,需提供 AccessKey ID、AccessKey Secret 和区域 ID(默认 cn-shanghai)。
  3. OCR 请求
    • 使用 ImageSyncScanRequest 提交同步 OCR 任务。
    • 设置 scenes["ocr"] 以启用文字识别。
    • extras 参数中的 ocr: all 表示使用通用文字识别。
  4. 坐标返回
    • 响应中的 locations 字段包含每个识别文本的边界框坐标,格式通常为 [{"x": x, "y": y, "width": w, "height": h}, ...]
    • 脚本解析 JSON 响应,提取文本和坐标信息。
  5. 错误处理:捕获可能的异常(如网络错误或权限问题),并输出错误信息。
  6. 依赖
    • 需要 aliyun-python-sdk-corealiyun-python-sdk-green
    • 图片需通过 URL 提供(支持 HTTP/HTTPS 协议)。

使用方法

  1. 配置 AccessKey
    • 替换 YOUR_ACCESS_KEY_IDYOUR_ACCESS_KEY_SECRET 为你的阿里云 AccessKey。
    • 可通过环境变量设置以提高安全性:
      import os
      access_key_id = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
      access_key_secret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
      
  2. 设置图片 URL
    • image_url 替换为实际图片的公开 URL(例如存储在阿里云 OSS 或其他可访问的服务器上)。
  3. 运行脚本
    • 执行脚本后,程序将输出识别的文本及其对应的坐标信息。

示例输出

假设图片包含文本“欢迎使用阿里云”,输出可能如下:

文本: 欢迎使用阿里云
坐标: [{"x": 50, "y": 100, "width": 200, "height": 40}]

注意事项

  • 服务开通:确保已开通阿里云 Content Moderation 服务(参考:https://www.alibabacloud.com/help/en/content-moderation)。
  • 图片要求
    • 支持 JPEG、PNG 等常见格式。
    • 图片大小建议小于 10MB,分辨率适中以保证识别效果。
  • 坐标格式:阿里云 OCR 返回的坐标格式可能因接口版本不同而变化,建议调试时打印完整响应(print(result))以确认字段结构。
  • 性能优化:为提高效率,建议重用 AcsClient 实例,避免重复创建。
  • 替代方案:如果需要更复杂的 OCR 功能(例如表格识别),可考虑阿里云的 Document AI 或其他 OCR 服务(如 Google Cloud Vision、Azure AI Vision)。

扩展功能

  1. 本地图片支持
    • 如果图片在本地,可先上传到阿里云 OSS(对象存储服务),获取 URL 后调用 OCR。
    • 示例上传代码(需安装 oss2 库):
      import oss2
      def upload_to_oss(file_path, bucket_name, access_key_id, access_key_secret):auth = oss2.Auth(access_key_id, access_key_secret)bucket = oss2.Bucket(auth, 'oss-cn-shanghai.aliyuncs.com', bucket_name)object_name = f"ocr/{os.path.basename(file_path)}"bucket.put_object_from_file(object_name, file_path)return f"https://{bucket_name}.oss-cn-shanghai.aliyuncs.com/{object_name}"
      
  2. 可视化坐标
    • 使用 OpenCV 绘制文本的边界框:
      import cv2
      import requestsdef draw_bounding_boxes(image_url, coordinates, output_path):# 下载图片response = requests.get(image_url)image_array = np.frombuffer(response.content, np.uint8)image = cv2.imdecode(image_array, cv2.IMREAD_COLOR)# 绘制边界框for coord in coordinates:x, y, w, h = coord["x"], coord["y"], coord["width"], coord["height"]cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)# 保存结果cv2.imwrite(output_path, image)
      
  3. 批量处理
    • 修改 tasks 列表,添加多个图片 URL 以支持批量 OCR。

参考资料

  • 阿里云 OCR 文档:https://www.alibabacloud.com/help/en/content-moderation/developer-reference/ocr
  • 阿里云 Python SDK 文档:https://www.alibabacloud.com/help/en/sdk/developer-reference/python-sdk
http://www.dtcms.com/a/278802.html

相关文章:

  • STM32介绍和GPIO
  • stm32-Modbus主机移植程序理解以及实战
  • argus/nvarguscamerasrc 远程显示报错
  • 项目一第一天
  • 纯数学专业VS应用数学专业:这两个哪个就业面更广?
  • C++后端面试八股文
  • Linux 基础命令详解:从入门到实践(1)
  • JAVA 并发 ThreadLocal
  • RestAssured(Java)使用详解
  • 19.数据增强技术
  • 管程! 解决互斥,同步问题的现代化手段(操作系统os)
  • Java行为型模式---模板方法模式
  • Imx6ull用网线与电脑连接
  • SpringBoot JAR 反编译替换文件
  • 【嵌入式汇编基础】-操作系统基础(三)
  • 【每日刷题】移动零
  • LabVIEW-Origin 船模数据处理系统
  • 【爬虫】Python实现爬取京东商品信息(超详细)
  • 期权和期货的区别主要是什么?
  • [论文阅读] 人工智能 | 用大型语言模型玩转多语言主观性检测:CheckThat! 2025赛事中的亮眼表现
  • Unity3D + VS2022连接雷电模拟器调试
  • 【PTA数据结构 | C语言版】字符串连接操作(不限长)
  • 分布式一致性协议
  • Android动画:属性动画以及实现点击图标缩放的动画效果
  • Relocations in generic ELF (EM: 40)
  • “国乙黑月光”指的是谁?
  • YOLOv11调参指南
  • Maven 依赖原则和依赖冲突
  • Docker入门指南(超详细)
  • Jetpack Compose 重组陷阱:一个“乌龙”带来的启示