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.pswp.cn/pingmian/89014.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络基础协议综合实验

本文结合所学的一些基础网络协议来完成一个综合性的实验&#xff08;实验完整代码放在最后&#xff09;会先说明使用协议的原理&#xff0c;然后分析具体在拓补图中的应用过程&#xff0c;最后再给出配置明确实验目标&#xff1a;拓扑分 核心层&#xff08;R1&#xff09;、汇聚…

图机器学习(5)——无监督图学习与浅层嵌入方法

图机器学习&#xff08;5&#xff09;——无监督图学习0. 前言1. 无监督图嵌入2. 矩阵分解2.1 图分解2.2 高阶邻接保留嵌入2.3 带有全局结构信息的图表示3. skip-gram 模型3.1 DeepWalk3.2 Node2Vec3.3 Edge2Vec3.4 Graph2Vec0. 前言 无监督机器学习是指训练过程中不利用任何目…

lua中检查静态常量是否正确引用

lua中检查静态常量是否正确引用思路代码因在项目开发中会出现引用了不存在的常量&#xff0c;为了方便检查这种情况&#xff0c;所以想着添加针对性脚本check 思路 加载要检查的常量结构到KEYWORD通过gmatch匹配指定路径下的所有文件&#xff0c;依次检查引用到目标变量的key是…

考完数通,能转云计算/安全方向吗?转型路径与拓展路线分析

不少网工考完 HCIE数通 后&#xff0c;都会面临一个现实问题&#xff1a;“能不能往云计算、安全这些热门方向转&#xff1f;”可以&#xff0c;而且非常值得。但怎么转、学什么、有没有路线图&#xff0c;是关键。一、为什么考完HCIE数通后适合转方向&#xff1f;技术基础扎实…

2.逻辑回归、Softmax回归——鸢尾花大作战

逻辑回归 逻辑回归其实并不是回归&#xff0c;而是一个分类算法 分类问题&#xff1a;邮件分类、图像识别、疾病诊断、文字情感分析、金融欺诈检测 根据历史数据&#xff0c;预测样本是属于哪个类别&#xff0c;通过数据拟合分界 主要用于二分类任务 逻辑回归公式 事实上是在多…

【Lucene/Elasticsearch】**Query Rewrite** 机制

这段话描述的是 Lucene/Elasticsearch 的 **Query Rewrite** 机制&#xff0c;核心一句话&#xff1a;> **把“高级”或“逻辑”查询&#xff08;如 PrefixQuery、WildcardQuery、RangeQuery&#xff09;在真正执行前&#xff0c;拆成最底层的、可直接倒排索引查的“原子查询…

小智完整MCP交互流程(以调节音量为例)

1. 初始化阶段 - MCP工具注册 在 mcp_server.cc 中&#xff0c;音量控制工具在 AddCommonTools() 中注册&#xff1a; AddTool("self.audio_speaker.set_volume", "Set the volume of the audio speaker. If the current volume is unknown, you must call self…

极狐GitLab CEO 柳钢——极狐 GitLab 打造中国企业专属 AI 编程平台,引领编程新潮流

当下&#xff0c;AI 编程已成为人工智能大模型领域的耀眼明星&#xff0c;是公认的最好应用领域之一。其发展速度惊人&#xff0c;从最初简单的代码建议、代码补全等基础智能功能&#xff0c;一路高歌猛进&#xff0c;如今已涵盖智能单元测试、智能代码审核、智能体编程、代码仓…

tiktok 弹幕 逆向分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析部分python代码部分python代码…

Java学习打卡22(JAVA中的错误Error和异常Exception)

异常&#xff08; Exception &#xff09;&#xff1a;软件程序在运行过程中&#xff0c;出现的不期而至的各种情况&#xff0c;如&#xff1a;文件找不到、网络连接失败、非法参数等。要理解JAVA异常处理是如何工作的&#xff0c;需要掌握以下三种类型的异常&#xff1a;检查性…

AntV G6 基础元素详解(React版)

一、初识 AntV G6 AntV G6 是蚂蚁集团推出的专业级图可视化引擎&#xff0c;适合构建关系图谱、拓扑图、流程图等场景。相比其他图形库&#xff0c;G6 提供完整的布局算法 和交互体系 &#xff0c;开发者在 10 分钟内即可搭建可交互的图应用。 技术特点速览&#xff1a; 支持 C…

【解决】联想电脑亮度调节

更新后图标变大调节分辨率然后亮度就不能调节了快捷键WindowsX打开设备管理器右键显卡更新驱动程序选择“浏览我的电脑以查找驱动程序&#xff08;R&#xff09;”选择“让我从计算机上的可驱动程序列表中选取&#xff08;L&#xff09;”点击下一步成功解决

将Blender、Three.js与Cesium集成构建物联网3D可视化系统

将Blender、Three.js与Cesium集成构建物联网3D可视化系统&#xff0c;可实现从精细设备建模到宏观地理空间展示的全栈能力。以下是技术整合方案及典型应用场景&#xff1a;一、技术栈分工与集成逻辑 #mermaid-svg-gCvcBVB9ebl092ap {font-family:"trebuchet ms",verd…

用TensorFlow进行逻辑回归(一)

这一节我们用TensorFlow定义简单的分类器。首先考虑分类器的方程式是什么是值得的。数学习的技巧是使用sigmoid函数。sigmoid函数绘制如图3-40, 通常标记为σ, 是实数域里的函数取值(0, 1)。这个特征很便利&#xff0c;因为我们可以将sigmoid的输出解释为事件发现的概率。 (转…

【Java代码审计(2)】MyBatis XML 注入审计

代码背景&#xff1a;某公司使用 MyBatis 作为持久层框架&#xff0c;登录功能如下&#xff1a; Java 接口代码&#xff1a; public interface UserMapper {User findByUsernameAndPassword(Param("username") String username,Param("password") String p…

Spring Boot目录变文件夹?3步解决!

在 Spring Boot 项目中&#xff0c;当你在 src/main/java 下看到目录结构而不是包结构时&#xff0c;这通常是 IDE&#xff08;如 IntelliJ IDEA&#xff09;的显示问题或项目配置问题。以下是原因和解决方案&#xff1a;问题原因IDE 未正确识别 Java 源代码根目录 src/main/ja…

Appium源码深度解析:从驱动到架构

Appium源码深度解析:从驱动到架构 Appium 源码概览 Appium 是一个开源的移动自动化测试框架,支持跨平台(iOS、Android)和多种编程语言(Java、Python 等)。其源码托管在 GitHub 上,主要由 JavaScript 和 Node.js 实现,核心逻辑围绕客户端-服务器架构设计。 GitHub 仓库…

给 Excel 整列空格文字内容加上前缀:像给文字穿衣服一样简单!

目录 步骤一&#xff1a;选中目标列 打开Excel表格并定位列点击列标题选中整列 步骤二&#xff1a;输入公式&#xff0c;变身“魔法” 在公式编辑栏输入公式按下回车键查看效果 步骤三&#xff1a;向下填充&#xff0c;批量处理 鼠标定位到单元格右下角按住鼠标左键向下拖动填充…

Spring Boot 启动原理揭秘:从 main 方法到自动装配

Spring Boot 启动原理揭秘&#xff1a;从 main 方法到自动装配 引言 Spring Boot 作为 Java 领域最流行的开发框架之一&#xff0c;凭借其“开箱即用”的特性极大地简化了 Spring 应用的搭建和部署。然而&#xff0c;尽管开发者在日常工作中频繁使用 Spring Boot 的启动类&…

OpenCV 与深度学习:从图像分类到目标检测技术

一、深度学习&#xff1a;从 “人工设计” 到 “自动学习”1.1 深度学习的定位&#xff1a;AI、机器学习与深度学习的关系人工智能&#xff08;AI&#xff09;&#xff1a;是一个宽泛的领域&#xff0c;目标是构建能模拟人类智能的系统&#xff0c;涵盖推理、感知、决策等能力。…