最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python3下實現(xiàn)搜狗AI API的代碼示例

 更新時間:2018年04月10日 13:46:56   作者:黯然銷魂掌2015  
這篇文章主要介紹了python3下實現(xiàn)搜狗AI API的代碼示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1、背景

a、搜狗也發(fā)布了自己的人工智能 api,包括身份證ocr、名片ocr、文本翻譯等API,初試感覺準(zhǔn)確率一般般。

b、基于python3。

c、也有自己的簽名生成這塊,有了鵝廠的底子,相對寫起來比較簡單。

d、不過Sougou明顯在接口標(biāo)準(zhǔn)化這塊明顯不如鵝廠,不同api應(yīng)答包的主體結(jié)構(gòu)竟然不一致,所以實施也只做了簡單的結(jié)構(gòu)化……

2、實現(xiàn)代碼

直接放代碼吧,github上也有: https://github.com/jdstkxx/PySougouAI

1、sogouai-example.py

# -*- coding: utf-8 -*-

'''
create by : joshua zou
create date : 2018.4.9
Purpose: check sougou ai api
'''

import glob,os
from SougouAPIMsg import *

#改成你自己搜狗AI的APPID、APPKEY、SecretKey
AppID = '0000'
ApiKey = '*********'
SecretKey= '0PLvS-AHShmq**************'

if __name__ == "__main__":
  sg = SougouAPIMsg(AppID,ApiKey,SecretKey)
  for file in glob.glob('D:\python\*.jpg'):
    filename=os.path.split(file)[1].split('.')[0]
    #調(diào)用ocr識別
    apiname = 'ocr'
    rest =sg.apiSougouOcr(apiname,file)
    #調(diào)用身份證識別
    #rest =sg.apiSougouOcr('idcard',file)
    

    js= rest.json()
    retext =""
    if apiname=='ocr':
      #文字識別,rest應(yīng)答包,字符串
      #成功 {"result":[{"content":"01245177\n","frame":["0,0","207,0","207,59","0,59"]}],"success":1}
      #失敗 {"success":0}      
      if js['success']==1 :
        retext = js['result'][0]['content'].strip()         
    elif apiname == 'idcard':
      #身份證識別應(yīng)答包,逼死強迫癥啊,請求結(jié)構(gòu),應(yīng)答結(jié)構(gòu)都不一樣
      '''
      {
      "result": {
      "住址": "xxxxxx",
      "公民身份號碼": "11001xxx30",
      "出生": "19900101",
      "姓名": "xxXX",
      "性別": "X",
      "民族": "xxx"
      },
      "status": 0,
      "statusText": "Success"
      }
      '''
      if js['status']==0 :
        retext = js['result']['公民身份號碼'].strip()      
    print(filename,retext)

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

# -*- coding: utf-8 -*-

'''
create by : joshua zou
create date : 2018.4.9
Purpose: check sougou ai api
'''

import requests
import base64
import hashlib
import hmac
import time
from urllib import parse
import json
from SougouAPI import *

class SougouAPIMsg(object):
  def __init__(self,AppID=None,ApiKey=None,SecretKey=None):
    if not AppID: AppID = '88888'
    if not ApiKey: ApiKey = '5ADwS88888888Dtr6QG2'
    if not SecretKey: SecretKey= '0PLvS-AH8888888889n6NF6fVVTt7m'
    self.__app_id= AppID 
    self.__app_key= ApiKey 
    self.__app_secret= SecretKey 

  
  def get_time_stamp(self):
    return str(int(time.time()))
  
  '''
  1、應(yīng)用相關(guān)前綴 {AuthPrefix}
  {AuthPrefix}=sac-auth-v1/{accessKey}/{secondsSinceEpoch}/{expirationPeriodInSeconds}
  2、請求相關(guān)數(shù)據(jù) {Data}    
  {Data}={REQUEST_METHOD} + "\n" + {HOST} + "\n" + {URI} + "\n" + {SORTED_QUERY_STRING}
  其中,REQUEST_METHOD 為請求使用的 HTTP 方法, 如: GET|POST|PUT|DELETE
  HOST 為服務(wù)使用的域名, 如: api.ai.sogou.com
  URI 為請求的服務(wù)路徑, 如: /speech/asr
  SORTED_QUERY_STRING 把 URL 中的 Query String(即 URL 中 “?” 后面的 “k1=v1&k2=v2” 字符串)進行編碼后的結(jié)果。    
  編碼方法為:
  將 Query String 根據(jù) & 拆開成若干項,對每一項轉(zhuǎn)換為 UriEncode(key) + "=" + UriEncode(value) 的形式, 其中 value 可以是空字符串
  將上面轉(zhuǎn)換后的所有字符串按照字典順序排序。
  將排序后的字符串按順序用 & 符號鏈接起來。
  3、生成簽名 {Signature}    
   {Signature}=HMAC-SHA256-BASE64({secretKey}, {AuthPrefix} + "\n" + {Data})
  4、生成認(rèn)證信息, 通過 Authorization header 傳遞    
   Authorization: {AuthPrefix}/{Signature}
   Example:
   1\應(yīng)用 accessKey/secretKey 分別為 bTkALtTB9x6GAxmFi9wetAGH / PMROwlieALT36qfdGClVz2iH4Sv8xZxe
    POST 方式訪問 http://api.ai.sogou.com/speech/asr 接口
    GET 參數(shù)為 type=gbk&idx=1&starttime=1491810516
    當(dāng)前系統(tǒng)時間為 1491810516
   2\計算過程     
    {AuthPrefix}="sac-auth-v1/bTkALtTB9x6GAxmFi9wetAGH/1491810516/3600"
    {Data}="POST\napi.ai.sogou.com\n/speech/asr\nidx=1&starttime=1491810516&type=gbk"
    {Signature}=HMAC-SHA256-BASE64("PMROwlieALT36qfdGClVz2iH4Sv8xZxe", {AuthPrefix} + "\n" + {Data})="vuVEkzcnUeFv8FxeWS50c7S0HaYH1QKgtIV5xrxDY/s="
   3\最終生成的 header 為
    Authorization: sac-auth-v1/bTkALtTB9x6GAxmFi9wetAGH/1491810516/3600/vuVEkzcnUeFv8FxeWS50c7S0HaYH1QKgtIV5xrxDY/s=
  '''
  def get_auth_sign_str(self,url,method):
    res= parse.urlparse(url)
    host= res.netloc
    uri = res.path
    query= res.query
        
    
    #1生成前置字符串
    authprefix= 'sac-auth-v1/%s/%s/%s' %(self.__app_key,self.get_time_stamp(),3600)
    #2生成data
    query=dict( (k, v if len(v)>1 else v[0] )
            for k, v in parse.parse_qs(res.query).items() )     
    sort_dict= sorted(query.items(), key=lambda item:item[0], reverse = False)
    sortquerystr= parse.urlencode(sort_dict)
    data= '%s\n%s\n%s\n%s' %(method,host,uri,sortquerystr)
    #3生成signstr
    signstr ='%s\n%s' %(authprefix,data)
    #調(diào)用hamc.sha256
    shastr =hmac.new(self.__app_secret.encode(), signstr.encode(), digestmod=hashlib.sha256).digest()
    #base64編碼,還原成字符串
    signature = base64.b64encode(shastr).decode()
    
    #4組合成最終的授權(quán)碼
    authstr= '%s/%s' %(authprefix,signature)
    return authstr

  '''
  $file = "OCR-test03.jpg";
  $url = "http://api.ai.sogou.com/pub/ocr";
  
  $hdr = array(
    "Content-Type: multipart/form-data",
    "Authorization: ".sign($ak, $sk, $url, "POST")
  ); // cURL headers for file uploading
  
  $postfields = array(
    "pic" => curl_file_create($file,'image/jpeg','a_b_c.jpg'),
  );
  
  $ch = curl_init();
  $options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_POST => 1,
    CURLOPT_HTTPHEADER => $hdr,
    CURLOPT_POSTFIELDS => $postfields,
    CURLOPT_RETURNTRANSFER => true
  );
  '''
  def apiSougouOcr(self,apiname,picfilename):
    url = SougouAPI[apiname]['APIURL']
    name = SougouAPI[apiname]['APINAME']
    desc= SougouAPI[apiname]['APIDESC']
    
    authstr=self.get_auth_sign_str(url, method='POST')
    header={ "Authorization": authstr }
    
    picfile= {'pic':open(picfilename,'rb')}
    
    resp = requests.post(url,headers=header,files=picfile)      
    #print (resp.text)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Python創(chuàng)建一個文件夾結(jié)構(gòu)生成器

    使用Python創(chuàng)建一個文件夾結(jié)構(gòu)生成器

    這篇文章主要為大家詳細介紹了如何使用Python創(chuàng)建一個文件夾結(jié)構(gòu)生成器,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • python 拷貝特定后綴名文件,并保留原始目錄結(jié)構(gòu)的實例

    python 拷貝特定后綴名文件,并保留原始目錄結(jié)構(gòu)的實例

    下面小編就為大家分享一篇python 拷貝特定后綴名文件,并保留原始目錄結(jié)構(gòu)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • PIP安裝python包出現(xiàn)超時問題的解決

    PIP安裝python包出現(xiàn)超時問題的解決

    這篇文章主要介紹了PIP安裝python包出現(xiàn)超時問題的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python實現(xiàn)病毒仿真器的方法示例(附demo)

    Python實現(xiàn)病毒仿真器的方法示例(附demo)

    這篇文章主要介紹了Python實現(xiàn)病毒仿真器的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 使用Python的turtle模塊繪制櫻花樹的代碼示例

    使用Python的turtle模塊繪制櫻花樹的代碼示例

    Python的turtle模塊是一個直觀的圖形化編程工具,讓用戶通過控制海龜在屏幕上的移動來繪制各種形狀和圖案,在接下來的文章中,我將通過一個生動的例子——繪制一幅櫻花樹圖畫——來深入探討turtle模塊的實用性,需要的朋友可以參考下
    2024-04-04
  • Python的jsonpath庫使用方法實例

    Python的jsonpath庫使用方法實例

    這篇文章主要介紹了Python的jsonpath庫使用方法實例,接口返回的jsonn數(shù)據(jù),需要取值后斷言,一般我們是使用jsonpath來提取接口返回的數(shù)據(jù) ,JsonPath是一種信息抽取類庫,是從JSON文檔中抽取指定信息的工具,,需要的朋友可以參考下
    2023-08-08
  • python requests爬取高德地圖數(shù)據(jù)的實例

    python requests爬取高德地圖數(shù)據(jù)的實例

    今天小編就為大家分享一篇python requests爬取高德地圖數(shù)據(jù)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 你應(yīng)該知道的Python3.6、3.7、3.8新特性小結(jié)

    你應(yīng)該知道的Python3.6、3.7、3.8新特性小結(jié)

    這篇文章主要介紹了你應(yīng)該知道的Python3.6、3.7、3.8新特性小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • python實現(xiàn)同級目錄調(diào)用的示例詳解

    python實現(xiàn)同級目錄調(diào)用的示例詳解

    同級目錄指的是位于同一級別的文件夾,這些文件夾具有相同的層級結(jié)構(gòu),它們相互平行,沒有一個被包含在另一個之中,本文將給大家介紹python實現(xiàn)同級目錄調(diào)用的示例,需要的朋友可以參考下
    2024-06-06
  • Python 對輸入的數(shù)字進行排序的方法

    Python 對輸入的數(shù)字進行排序的方法

    今天小編就為大家分享一篇Python 對輸入的數(shù)字進行排序的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06

最新評論

抚顺市| 衡东县| 繁峙县| 司法| 峡江县| 师宗县| 松原市| 揭西县| 资中县| 三亚市| 大宁县| 鄯善县| 长岭县| 古交市| 高密市| 保德县| 会宁县| 大宁县| 夏河县| 班玛县| 涪陵区| 桦南县| 诸暨市| 武义县| 延安市| 墨竹工卡县| 综艺| 天气| 潜江市| 吴桥县| 大余县| 阿合奇县| 甘德县| 福鼎市| 龙游县| 威远县| 漠河县| 南澳县| 乳源| 望奎县| 临夏县|