1、背景
搜狗发布了基于python的人工智能 api,名片ocr、包括身份证ocr、签名生成、文本翻译等API,不过不同api应答包的主体结构竟然不一致,所以实施也只做了简单的结构化。
2、Python实现代码
直接放Python代码吧,github上也有: https://github.com/jdstkxx/PySougouAI
1、搜狗人工智能-例子.py
2、 SougouAPI.py
# -*- coding: utf-8 -*-
# 搜狗API字典
SougouAPI={
#基本文本分析API
"ocr": {
'APINAME':'图像识别', #API中文简称
'APIDESC': '识别图像中的文字', #API描述
'APIURL': 'http://api.ai.sogou.com/pub/ocr' #API请求URL
},
"idcard":{
'APINAME':'身份证识别', #API中文简称
'APIDESC': '身份证识别', #API描述
'APIURL': 'http://api.ai.sogou.com/pub/ocr/idcard' #API请求URL
},
}
3、 SougouAPIMsg.py
1、应用相关前缀 {AuthPrefix}
{AuthPrefix}=sac-auth-v1/{accessKey}/{secondsSinceEpoch}/{expirationPeriodInSeconds}
2、请求相关数据 {Data}
{Data}={REQUEST_METHOD} + "" + {HOST} + "" + {URI} + "" + {SORTED_QUERY_STRING}
其中,REQUEST_METHOD 为请求使用的 HTTP 方法, 如: GET|POST|PUT|DELETE
HOST 为服务使用的域名, 如: api.ai.sogou.com
URI 为请求的服务路径, 如: /speech/asr
SORTED_QUERY_STRING 把 URL 中的 Query String(即 URL 中 “?” 后面的 “k1=v1&k2=v2” 字符串)进行编码后的结果。
编码方法为:
将 Query String 根据 & 拆开成若干项,对每一项转换为 UriEncode(key) + "=" + UriEncode(value) 的形式, 其中 value 可以是空字符串
将上面转换后的所有字符串按照字典顺序排序。
将排序后的字符串按顺序用 & 符号链接起来。
3、生成签名 {Signature}
{Signature}=HMAC-SHA256-BASE64({secretKey}, {AuthPrefix} + "" + {Data})
4、生成认证信息, 通过 Authorization header 传递
Authorization: {AuthPrefix}/{Signature}
Example:
1应用 accessKey/secretKey 分别为 bTkALtTB9x6GAxmFi9wetAGH / PMROwlieALT36qfdGClVz2iH4Sv8xZxe
POST 方式访问 http://api.ai.sogou.com/speech/asr 接口
GET 参数为 type=gbk&idx=1&starttime=1491810516
当前系统时间为 1491810516
2计算过程
{AuthPrefix}="sac-auth-v1/bTkALtTB9x6GAxmFi9wetAGH/1491810516/3600"
{Data}="POSTapi.ai.sogou.com/speech/asridx=1&starttime=1491810516&type=gbk"
{Signature}=HMAC-SHA256-BASE64("PMROwlieALT36qfdGClVz2iH4Sv8xZxe", {AuthPrefix} + "" + {Data})="vuVEkzcnUeFv8FxeWS50c7S0HaYH1QKgtIV5xrxDY/s="
3最终生成的 header 为
Authorization: sac-auth-v1/bTkALtTB9x6GAxmFi9wetAGH/1491810516/3600/vuVEkzcnUeFv8FxeWS50c7S0HaYH1QKgtIV5xrxDY/s=
联系客服