文字识别ocr中问下报这个错怎么处理哈? {"RequestId":"95BD3B26-CC54-5F58-A9CC-2B18E7AA0747","Message":"Specified signature is not matched with our calculation. server string to sign is:POST&%2F&%252F%3D%26AccessKeyId%3DLTAI5tPCW2ZzExpsYteA7SPW%26AccessKeyId%253DLTAI5tPCW2ZzExpsYteA7SPW%2526Action%253DRecognizeIdcard%2526Format%253DJSON%2526SignatureMethod%253DHMAC-SHA1%2526SignatureNonce%253D6a399b7af42e680e45b9255ed407eccc%2526SignatureVersion%253D1.0%2526Timestamp%253D2023-11-13T03%25253A02%25253A29Z%2526Version%253D2021-07-07%3D%26Action%3DRecognizeIdcard%26Format%3DJSON%26POST%3D%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3D6a399b7af42e680e45b9255ed407eccc%26SignatureVersion%3D1.0%26Timestamp%3D2023-11-13T03%253A02%253A29Z%26Version%3D2021-07-07","Recommend":"https://api.aliyun.com/troubleshoot?q=SignatureDoesNotMatch&product=ocr-api&requestId=95BD3B26-CC54-5F58-A9CC-2B18E7AA0747","HostId":"ocr-api.cn-hangzhou.aliyuncs.com","Code":"SignatureDoesNotMatch"} 。SDK里面封装好的,我现在用的是API 调用的方式,签名要自己接和加签
这个错误提示是因为签名不匹配。你需要自己计算签名并添加到请求中。具体步骤如下:
以下是一个Python示例代码:
import hashlib
import hmac
import base64
from urllib import parse
import requests
def sign(access_key_id, access_key_secret, parameters):
sorted_parameters = sorted(parameters.items(), key=lambda x: x[0])
query_string = parse.urlencode(sorted_parameters)
string_to_sign = "POST&%2F&" + query_string
signature = base64.b64encode(hmac.new((access_key_secret + "&").encode("utf-8"), string_to_sign.encode("utf-8"), hashlib.sha1).digest())
return signature.decode("utf-8")
def recognize_idcard(image_path, access_key_id, access_key_secret):
endpoint = "https://ocr-api.cn-hangzhou.aliyuncs.com/"
request_parameters = {
"Action": "RecognizeIdcard",
"Format": "JSON",
"Version": "2021-07-07",
"SignatureMethod": "HMAC-SHA1",
"Timestamp": "2023-11-13T03:02:29Z",
"AccessKeyId": access_key_id,
}
image_data = open(image_path, "rb").read()
request_parameters["Signature"] = sign(access_key_id, access_key_secret, request_parameters)
response = requests.post(endpoint, data=request_parameters, files={"image": image_data})
return response.json()
# 使用你的AccessKey ID和AccessKey Secret替换下面的值
access_key_id = "your_access_key_id"
access_key_secret = "your_access_key_secret"
image_path = "path/to/your/image.jpg"
result = recognize_idcard(image_path, access_key_id, access_key_secret)
print(result)
请将your_access_key_id
、your_access_key_secret
和path/to/your/image.jpg
替换为你的实际值。
签名不匹配 可以直接用sdk 请求 https://next.api.aliyun.com/api/ocr-api/2021-07-07/RecognizeIdcard?sdkStyle=dara 。可以参考这个签名方式: https://help.aliyun.com/document_detail/469176.html?spm=a2c4g.442243.0.0.627f6797cwX1Hz 。此回答来自钉群【官方】阿里云OCR公共云客户交流群。
这个问题可能是由于签名不匹配而导致的错误。这是因为每次API请求都需要经过签名验证才能成功执行,并且签名必须符合标准的要求。
针对这种情况,请仔细检查您的签名生成代码是否有误,并且确保使用的签名算法、Secret Access Key和其他参数都正确无误。如果您不确定如何计算签名,请参考阿里巴巴提供的SDK文档或者相关教程,了解正确的签名生成方法。
此外,为了提高签名的安全性和可靠性,建议不要在代码中硬编码Secret Access Key,请务必将其存储在一个安全的地方,例如环境变量或者密钥管理系统当中,以避免泄露敏感信息。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。