使用STS Token访问阿里云OCR本地图片文字识别(更加安全,推荐使用的方式)

一、通过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门户通用文字识别文字识别

安装:

扫描二维码关注公众号,回复: 14593573 查看本文章

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添加权限

测试识别的图片

返回结果:

猜你喜欢

转载自blog.csdn.net/qq_37140721/article/details/129279956