本文介紹了如何使用阿里云視覺智能開放平臺相關服務的Python SDK,具體包括SDK的獲取、安裝方法以及SDK代碼示例。
阿里云視覺智能開放平臺各類目視覺AI能力SDK接入、接口使用或問題咨詢等,請通過釘釘群(23109592)加入阿里云視覺智能開放平臺咨詢群聯系我們。
該版本SDK只支持Python3及以上,如不滿足請升級Python版本。如必須使用Python2請使用Python老版(不推薦)。
準備工作
在安裝和使用阿里云SDK前,確保您已經注冊阿里云賬號并生成訪問密鑰(AccessKey)。具體操作,請參見創建AccessKey。
安裝視覺智能API相關服務Python SDK。
使用依賴包工具安裝(推薦)。
執行以下命令,安裝需要的SDK包。
說明僅安裝所需的SDK包即可。
生成專區:
pip install alibabacloud_aigen20240111
人臉人體:
pip install alibabacloud_facebody20191230
文字識別:
pip install alibabacloud_ocr20191230
商品理解:
pip install alibabacloud_goodstech20191230
內容審核:
pip install alibabacloud_imageaudit20191230
圖像識別:
pip install alibabacloud_imagerecog20190930
圖像生產:
pip install alibabacloud_imageenhan20190930
分割摳圖:
pip install alibabacloud_imageseg20191230
目標檢測:
pip install alibabacloud_objectdet20191230
圖像分析處理:
pip install alibabacloud_imageprocess20200320
視覺搜索:
pip install alibabacloud_imgsearch20200320
視頻理解:
pip install alibabacloud_videorecog20200320
視頻生產:
pip install alibabacloud_videoenhan20200320
視頻分割:
pip install alibabacloud_videoseg20200320
異步任務管理:
pip install alibabacloud_viapi20230117
人臉核身服務端20200910專用版本:
pip install alibabacloud_facebody20200910
自行下載安裝:使用
git clone
或其它方式下載SDK包并自行添加解決方案。詳細下載地址如下所示。AI類目
Github鏈接
pypi鏈接
生成專區
人臉人體
文字識別
商品理解
內容審核
圖像識別
圖像生產
分割摳圖
目標檢測
視覺搜索
圖像分析處理
視頻生產
視頻理解
視頻分割
異步任務管理
人臉核身服務端20200910專用版本
配置環境變量
配置環境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維,具體操作,請參見創建RAM用戶。
請不要將AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
Linux和macOS系統配置方法
在IntelliJ IDEA中打開終端Terminal。
執行以下命令,配置環境變量。
<access_key_id>
需替換為您RAM用戶的AccessKey ID,<access_key_secret>
替換為您RAM用戶的AccessKey Secret。如果后續需要進行更多權限相關的配置,具體操作請參見使用RAM Policy控制訪問權限。export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
Windows系統配置方法
新建環境變量文件,添加環境變量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,并寫入已準備好的AccessKey ID和AccessKey Secret。然后重啟Windows系統。本操作以Windows 10為例進行說明。打開文件資源管理器,在此電腦上右鍵單擊屬性。
在右側導航欄,單擊高級系統配置。
在系統屬性對話框的高級頁簽下,單擊環境變量。
在環境變量對話框中,單擊新建(W)。
在彈出的新建系統變量對話框中,添加環境變量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,并寫入已準備好的AccessKey ID和AccessKey Secret。重啟Windows系統,使配置生效。
代碼示例
本文以RecognizeBankCard為例。
文件在同地域 OSS
每個類目的訪問域名與對應地域的開通詳情,請參見訪問域名。
# -*- coding: utf-8 -*-
# 1、這里只是以ocr下的RecognizeBankCard能力為例,其他能力請引入相應類目的包和相關類。包名可參考本文檔上方的SDK包名稱,能力名可參考對應API文檔中的Action參數。例如您想使用通用分割,其文檔為http://bestwisewords.com/document_detail/151960.html,可以知道該能力屬于分割摳圖類目,能力名稱為SegmentCommonImage,那么您需要將代碼中ocr20191230改為imageseg20191230,將RecognizeBankCard改為SegmentCommonImage。
from alibabacloud_ocr20191230.client import Client
from alibabacloud_ocr20191230.models import RecognizeBankCardRequest
from alibabacloud_tea_util.models import RuntimeOptions
from alibabacloud_tea_openapi.models import Config
'''銀行卡示例'''
# 初始化Config
config = Config(
# 創建AccessKey ID和AccessKey Secret,請參考http://bestwisewords.com/document_detail/175144.html。
# 如果您用的是RAM用戶的AccessKey,還需要為RAM用戶授予權限AliyunVIAPIFullAccess,請參考http://bestwisewords.com/document_detail/145025.html。
# 從環境變量讀取配置的AccessKey ID和AccessKey Secret。運行代碼示例前必須先配置環境變量。
access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
# 3、訪問的域名。注意:這個地方需要求改為相應類目的域名,參考:http://bestwisewords.com/document_detail/143103.html
endpoint='ocr.cn-shanghai.aliyuncs.com',
# 訪問的域名對應的region
region_id='cn-shanghai'
)
# 4、初始化Request,這里只是以RecognizeBankCard為例,其他能力請使用相應能力對應的類
request = RecognizeBankCardRequest(image_url='http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg')
# 初始化RuntimeObject
runtime_option = RuntimeOptions()
try:
# 初始化Client
client = Client(config)
# 5、調用api,注意,recognize_bank_card_with_options需要更換為相應能力對應的方法名。方法名是根據能力名稱按照一定規范形成的,如能力名稱為SegmentCommonImage,對應方法名應該為segment_common_image_with_options。
response = client.recognize_bank_card_with_options(request, runtime_option)
# 獲取整體結果
print(response.body)
# 獲取單個字段,這里只是一個例子,具體能力下的字段需要看具體能力的文檔
print(response.body.data.card_number)
# tips: 可通過response.body.__dict__查看屬性名稱
except Exception as error:
# 獲取整體報錯信息
print(error)
# 獲取單個字段
print(error.code)
# tips: 可通過error.__dict__查看屬性名稱
需要修改的地方均在上述代碼注釋中標明,總結如下:
引入包的時候,需要引入相應類目的包和相關類。包名可參考上文SDK包名稱,能力名稱可參考對應API文檔中的Action參數。
例如,您想使用通用分割能力,通過通用分割API文檔可知該能力屬于分割摳圖類目(imageseg20191230),能力名稱為SegmentCommonImage,您需要將代碼中的ocr20191230改為imageseg20191230,將RecognizeBankCard改為SegmentCommonImage。
訪問的域名一定要修改為相應類目的域名,如果域名類目不匹配會報錯
InvalidAction.NotFound
。關于域名詳情,請參見訪問域名。Request需要使用相應類目的包和類。
調用Client的方法時,方法名需要改成對應能力的方法名。方法名是根據能力名稱按照一定規范形成的。例如,能力名稱為SegmentCommonImage,對應方法名應該為segment_common_image_with_options。
文件在本地或文件不在同一地域 OSS
文件在本地、文件不在同一地域與文件在同地域區別在于需要使用xxxAdvanceRequest,文件是以Stream形式通過image_urlobject參數傳入。
# -*- coding: utf-8 -*-
# 1、這里只是以ocr下的RecognizeBankCard能力為例,其他能力請引入相應類目的包和相關類。包名可參考本文檔上方的SDK包名稱,能力名可參考對應API文檔中的Action參數。例如您想使用通用分割,其文檔為http://bestwisewords.com/document_detail/151960.html,可以知道該能力屬于分割摳圖類目,能力名稱為SegmentCommonImage,那么您需要將代碼中ocr20191230改為imageseg20191230,將RecognizeBankCard改為SegmentCommonImage。
from alibabacloud_ocr20191230.client import Client
from alibabacloud_ocr20191230.models import RecognizeBankCardAdvanceRequest
from alibabacloud_tea_util.models import RuntimeOptions
from alibabacloud_tea_openapi.models import Config
from urllib.request import urlopen
import io
'''銀行卡示例'''
# 初始化Config
config = Config(
# 創建AccessKey ID和AccessKey Secret,請參考http://bestwisewords.com/document_detail/175144.html。
# 如果您用的是RAM用戶的AccessKey,還需要為RAM用戶授予權限AliyunVIAPIFullAccess,請參考http://bestwisewords.com/document_detail/145025.html。
# 從環境變量讀取配置的AccessKey ID和AccessKey Secret。運行代碼示例前必須先配置環境變量。
access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
# 3、訪問的域名。注意:這個地方需要求改為相應類目的域名,參考:http://bestwisewords.com/document_detail/143103.html
endpoint='ocr.cn-shanghai.aliyuncs.com',
# 訪問的域名對應的region
region_id='cn-shanghai'
)
# 初始化RuntimeObject
runtime_option = RuntimeOptions()
try:
# 場景一:文件在本地
# img = open(r'/tmp/bankCard.png', 'rb')
# 使用完成之后記得調用img.close()關閉流
# 場景二,使用任意可訪問的url
url = 'https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg'
img = io.BytesIO(urlopen(url).read())
# 4、初始化Request,這里只是以RecognizeBankCard為例,其他能力請使用相應能力對應的類
request = RecognizeBankCardAdvanceRequest()
request.image_urlobject = img
# 初始化Client
client = Client(config)
# 5、調用api,注意,recognize_bank_card_advance需要更換為相應能力對應的方法名。方法名是根據能力名稱按照一定規范形成的,如能力名稱為SegmentCommonImage,對應方法名應該為segment_common_image_advance。
response = client.recognize_bank_card_advance(request, runtime_option)
# 獲取整體結果
print(response.body)
# 獲取單個字段,這里只是一個例子,具體能力下的字段需要看具體能力的文檔
print(response.body.data.card_number)
# tips: 可通過response.body.__dict__查看屬性名稱
except Exception as error:
# 獲取整體報錯信息
print(error)
# 獲取單個字段
print(error.code)
# tips: 可通過error.__dict__查看屬性名稱
需要修改的地方均在上述代碼注釋中標明,總結如下:
引入包的時候,需要引入相應類目的包和相關類。包名可參考上文SDK包名稱,能力名稱可參考對應API文檔中的Action參數。
例如,您想使用通用分割能力,通過通用分割API文檔可知該能力屬于分割摳圖類目(imageseg20191230),能力名稱為SegmentCommonImage,您需要將代碼中的ocr20191230改為imageseg20191230,將RecognizeBankCard改為SegmentCommonImage。
訪問的域名一定要修改為相應類目的域名,如果域名類目不匹配會報錯
InvalidAction.NotFound
。關于域名詳情,請參見訪問域名。Request需要使用相應類目的包和類。
調用Client的方法時,方法名需要改成對應能力的方法名。方法名是根據能力名稱按照一定規范形成的。例如,能力名稱為SegmentCommonImage,對應方法名應該為segment_common_image_advance。
常見問題
調用報錯如何處理?
如果您的調用出現報錯,請先嘗試升級SDK包到最新版本,最新版本請參考各類目SDK鏈接。如果您的程序中同時引入了多個類目的包,也可以先嘗試將這些包都升級到最新版本,避免版本之間的包沖突問題。
OpenAPI界面顯示的最新包在pypi倉庫中找不到如何處理?
如果您發現OpenAPI界面顯示的最新版本的包,在pypi倉庫中找不到,這是因為新版本的包剛剛發布,倉庫同步可能會有延遲,如果遇到版本不存在的情況,請稍后再試或使用pypi倉庫中的最新版本。
如何知道request或者response中的參數名?
request和response的參數名是根據文檔參數名按照一定規范生成的,比如文檔中參數名為ImageURL,生成出來對應的python的參數名為image_url,對應的stream參數名為image_urlobject。建議使用pycharm等IDE,可以直接查看到相關類的源碼找到參數名,或者使用request.__dict__或者response.__dict__查看類的屬性名。
技術支持
如果以上方法未能解決您的問題,請通過搜索釘釘群號(23109592)加入阿里云視覺智能開放平臺咨詢群聯系我們。屆時會有專業的技術人員與您對接解決問題。