本文介绍了如何使用阿里云视觉智能开放平台相关服务的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参数。例如您想使用通用分割,其文档为https://help.aliyun.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,请参考https://help.aliyun.com/document_detail/175144.html。
# 如果您用的是RAM用户的AccessKey,还需要为RAM用户授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.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、访问的域名。注意:这个地方需要求改为相应类目的域名,参考:https://help.aliyun.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参数。例如您想使用通用分割,其文档为https://help.aliyun.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,请参考https://help.aliyun.com/document_detail/175144.html。
# 如果您用的是RAM用户的AccessKey,还需要为RAM用户授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.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、访问的域名。注意:这个地方需要求改为相应类目的域名,参考:https://help.aliyun.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)加入阿里云视觉智能开放平台咨询群联系我们。届时会有专业的技术人员与您对接解决问题。