景区AI行人识别调用动态行人识别失败问题

举报
TSINGSEE青犀视频 发表于 2021/11/23 17:23:48 2021/11/23
【摘要】 所以是直接传入的base64编码,还验证此编码是否正确(在html中验证),传进去的还是图片格式错误。在进行base64编码之后还要进行urlencode编码,所以要做二次操作。

前段时间我们的景区行人检测功能一直在项目中进行测试,但是检测的AI算法没有达到我们的理想效果,因此我们考虑使用百度AI算法(动态行人识别)来进行调整。在使用GO调用百度AI接口的过程中出现调用失败的情况:

8ba4b07e774ebd65222370c1e94f9a1d.png

错误信息如下:

6058250cf8ad0f9423801a8d51781033.png

此错误的信息表示:传入的图片格式错误。

文档中image传入的是base64编码:

ac2c3f01cd2a03a178727a8097fff6e6.png

所以是直接传入的base64编码,还验证此编码是否正确(在html中验证),传进去的还是图片格式错误。在进行base64编码之后还要进行urlencode编码,所以要做二次操作。

那么为什么需要这么做呢?有三个原因:

1.当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的;
2.因为url对字符有限制,比如把一个邮箱放入url,就需要使用urlencode函数,因为url中不能包含@字符;
3.url转义其实也只是为了符合url的规范而已。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。

注意:还有一些非ASCII字符、一些保留字符(如:&放到url中就无法分割)和一些不安全字符(如:空格、“+”和“%”等等)

通过上述得知:一张图片需要转base64之后,在进行urlencode编码,把最后生成的值转入image参数中,如下:

escapeUrl := url.QueryEscape(imageBase64)
data := strings.NewReader(fmt.Sprintf(`dynamic=true&case_id=%d&case_init=%s&image=%s&area=%s`,
   case_id, dcase_init, escapeUrl, area))

e238f74cbe6b662d6e478c8c561aae25.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。