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
英文地址,請注明出處:http://en.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;涵蓋推理、感知、決策等能力。…