一、通过RAM访问控制里创建的用户获取AccessKeyID和AccessKeySecret,创建的角色里获取ARN(之前发布的文章里有具体说明这些参数的获取方式,这里就不赘述了)
二、通过AccessKeyID、AccessKeySecret和ARN获取SecurityToken、STS的AccessKeyID和AccessKeySecret用来接下来的访问识别图片文字的接口
参考官方api:STS SDK概览、安全令牌的获取(请在API接口中填写必要的参数后复制代码即可)
安装sdk:
pip install -i https://pypi.douban.com/simple aliyun-python-sdk-sts==3.1.0
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.auth.credentials import AccessKeyCredential
from aliyunsdksts.request.v20150401.AssumeRoleRequest import AssumeRoleRequest
credentials = AccessKeyCredential('yourAccessKeyID', 'yourAccessKeySecret')
# use STS Token
# credentials = StsTokenCredential('<your-access-key-id>', '<your-access-key-secret>', '<your-sts-token>')
client = AcsClient(region_id='cn-shanghai', credential=credentials)
request = AssumeRoleRequest()
request.set_accept_format('json')
request.set_RoleSessionName("ssss") # 任意填写
request.set_DurationSeconds(900) # 单位秒,设置STS Token的有效期,最小900,最大3600
request.set_RoleArn("yourRoleArn") # RAM访问控制里角色的ARN
response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
请将上面代码中的yourAccessKeyID、yourAccessKeySecret和yourRoleArn替换为第一步中获取的值即可
在print的返回值中可以获取到SecurityToken、AccessKeyId和AccessKeySecret的三个值,使用这三个参数进行接下来的访问
二、访问图片文字识别
参考官方文档: 阿里云OpenAPI门户通用文字识别、文字识别
安装:
pip install -i https://pypi.douban.com/simple alibabacloud_ocr_api20210707==1.1.12
pip install -i https://pypi.douban.com/simple alibabacloud_darabonba_stream
import json
import sys
from typing import List
from alibabacloud_ocr_api20210707.client import Client as ocr_api20210707Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_darabonba_stream.client import Client as StreamClient
from alibabacloud_ocr_api20210707 import models as ocr_api_20210707_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
class Sample:
def __init__(self):
pass
@staticmethod
def create_client(
access_key_id: str,
access_key_secret: str,
) -> ocr_api20210707Client:
"""
使用AK&SK初始化账号Client
@param access_key_id:
@param access_key_secret:
@return: Client
@throws Exception
"""
config = open_api_models.Config(
# 必填,您的 AccessKey ID,
access_key_id=access_key_id,
# 必填,您的 AccessKey Secret,
access_key_secret=access_key_secret,
security_token = security_token, # STS Token
)
# 访问的域名
config.endpoint = f'ocr-api.cn-hangzhou.aliyuncs.com'
return ocr_api20210707Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
# 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html
client = Sample.create_client('yourAccessKeyID', 'yourAccessKeySecret', 'yourSecurityToken')
# 需要安装额外的依赖库,直接点击下载完整工程即可看到所有依赖。
body_stream = StreamClient.read_from_file_path('C:/Users/Administrator.SC-201909161358/Desktop/OCR.png')
recognize_basic_request = ocr_api_20210707_models.RecognizeBasicRequest(
body=body_stream
)
runtime = util_models.RuntimeOptions()
try:
# 复制代码运行请自行打印 API 的返回值
ret = client.recognize_basic_with_options(recognize_basic_request, runtime)
print(json.loads(ret.body.to_map()['Data'])['content'])
except Exception as error:
# 如有需要,请打印 error
UtilClient.assert_as_string(error.message)
print(error)
@staticmethod
async def main_async(
args: List[str],
) -> None:
# 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html
client = Sample.create_client('accessKeyId', 'accessKeySecret')
# 需要安装额外的依赖库,直接点击下载完整工程即可看到所有依赖。
body_stream = StreamClient.read_from_file_path('<your-file-path>')
recognize_basic_request = ocr_api_20210707_models.RecognizeBasicRequest(
body=body_stream
)
runtime = util_models.RuntimeOptions()
try:
# 复制代码运行请自行打印 API 的返回值
await client.recognize_basic_with_options_async(recognize_basic_request, runtime)
except Exception as error:
# 如有需要,请打印 error
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])
将上面代码main方法中的yourAccessKeyID、yourAccessKeySecret和yourSecurityToken替换成第二步的代码返回的SecurityToken、AccessKeyId和AccessKeySecret即可
注,如请求时报权限错误时,可能是因为当前使用的角色没有添加对应的权限,请到RAM访问控制里选择角色点击添加权限并在系统策略里搜索ocr添加权限
测试识别的图片
返回结果: