TencentCloud / tencentcloud-sdk-python

Tencent Cloud API 3.0 SDK for Python
Apache License 2.0
613 stars 251 forks source link

无法正常读取base64读取的图像数据 #64

Closed PoJason closed 4 years ago

PoJason commented 4 years ago

无法有效的读取本地数据, 及时使用网络上其他数据都会提示下载失败, 但使用腾讯云上的图像数据就可以正常识别. 什么原因?

zqfan commented 4 years ago

要看具体接口的说明。或者直接提工单给所使用的产品排查一下。 一般而言,无法读取本地数据可能有:1)本地文件已损坏;2)代码读取时有错误,并非二进制数据;3)传值给sdk时有问题,sdk的参数期望的是字符串或base64后的字符串;4)自己添加了不必要的格式头而不是文件原本的数据。网络上的数据下载失败可能有:1)需要特殊的网络权限或者代理等;2)文件太大下载超时;3)格式不对。 腾讯云上的图像数据至少能排除掉网络方面的故障。

PoJason commented 4 years ago

是否可以提供一个是使用图像base64编码数据, 通过params传给SDK?

PoJason commented 4 years ago

picFilePath = "../images/print_scan_en.png" f = open(picFilePath, 'rb') # 二进制方式打开图文件 q = base64.b64encode(f.read()).decode('utf-8') # 读取文件内容,转换为base64编码 f.close()

try: cred = credential.Credential("", "") httpProfile = HttpProfile() httpProfile.endpoint = "ocr.tencentcloudapi.com"

clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
client = ocr_client.OcrClient(cred, "ap-guangzhou", clientProfile)

req = models.GeneralHandwritingOCRRequest()
params = '{"ImageBase64": f}'
req.from_json_string(params)

resp = client.GeneralHandwritingOCR(req)
print(resp.to_json_string())

except TencentCloudSDKException as err: print(err)

其中: params应该是str类型, 但f本身内容就无法知道了, 如果params是dict的话, 解析报错

zqfan commented 4 years ago

你填f显然就错了啊,不是应该填q吗? 编码命名习惯可以改善下,不然容易把自己都绕进去还不容易看出毛病

PoJason commented 4 years ago

多谢指出! 确实是应该填写为q, (Linux环境) params那行正确的写法是: params = '{"ImageBase64": "%s"}' % q