开发者社区 > 视觉智能 > 文字识别 > 正文

文字识别OCR里我是用sdk请求的,但是手动修改了这部分,怎么解决?

文字识别OCR里我是用sdk请求的,但是手动修改了这部分,e0037b869841b5a3ebc3a6ecc6a54252.png,code: 400, Specified signature does not match our calculation.怎么解决?

展开
收起
小小鹿鹿鹿 2024-01-17 17:35:03 32 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    如果你在使用SDK请求时手动修改了代码,并且出现了"Specified signature does not match our calculation."的错误,这通常意味着你使用的签名算法与SDK要求的签名算法不一致。

    解决这个问题的方法是重新计算签名并替换原有的签名。具体来说,你需要使用AccessKey和SecretKey以及你的请求参数(包括API名称、请求时间戳、请求方法等)按照SDK的签名算法规则进行计算,生成新的签名。

    以下是一个Python示例,展示了如何使用HMAC-SHA1算法计算签名:

    import hmac
    import hashlib
    import time
    import base64
    
    def calculate_signature(access_key, secret_key, method, url, params):
        # 将参数按照字典序排序
        sorted_params = sorted(params.items(), key=lambda x: x[0])
        # 拼接参数字符串
        param_str = '&'.join(['{}={}'.format(k, v) for k, v in sorted_params])
        # 拼接待签名字符串
        string_to_sign = '{}\n{}\n{}'.format(method, url, param_str)
        # 计算签名
        signature = hmac.new(secret_key.encode('utf-8'), string_to_sign.encode('utf-8'), hashlib.sha1).digest()
        # 对签名进行base64编码
        signature = base64.b64encode(signature).decode('utf-8')
        return signature
    
    access_key = '<YOUR AK>'
    secret_key = '<YOUR SK>'
    method = 'POST'
    url = 'https://service.tencentcloudapi.com/ocr/v1/ocr_general_basic'
    params = {
        'Action': 'RecognizeGeneralBasic',
        'Version': '2019-11-15',
        'Timestamp': str(int(time.time())),
        'Nonce': 'random_number',
        'Region': 'ap-guangzhou',
        'ImageBase64': 'your_image_data',
        'LanguageType': 'auto'
    }
    
    signature = calculate_signature(access_key, secret_key, method, url, params)
    params['Signature'] = signature
    

    请注意,上述代码仅为示例,实际使用时需要根据你的具体情况进行调整。

    2024-01-18 14:14:25
    赞同 展开评论 打赏
  • 签名不匹配 建议用sdk。你先改回来 请求通了再改,注意这的 client = Sample.create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])。需要配置环境 或者 直接传字符串client = Sample.create_client(ALIBABA_CLOUD_ACCESS_KEY_ID,ALIBABA_CLOUD_ACCESS_KEY_SECRET)此回答来自钉群【官方】阿里云OCR公共云客户交流群。

    2024-01-18 09:20:01
    赞同 展开评论 打赏

文字识别技术可以灵活应用于证件文字识别、发票文字识别、文档识别与整理等行业场景,满足认证、鉴权、票据流转审核等业务需求。

热门讨论

热门文章

相关电子书

更多
从 SDK 到编解码:视频直播架构解析 立即下载
跨平台的云服务SDK需要什么 立即下载
一个跨平台的云服务SDK需要什么 立即下载