| 
					
				 | 
			
			
				@@ -0,0 +1,156 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import base64
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import hashlib
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import hmac
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import time
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import requests
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class Credential:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def __init__(self, secret_id, secret_key):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.secret_id = secret_id
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.secret_key = secret_key
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class FlashRecognitionRequest:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def __init__(self, voice_format="mp3", engine_type="16k_zh"):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.engine_type = engine_type
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.speaker_diarization = 0
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.hotword_id = ""
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.customization_id = ""
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.filter_dirty = 0
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.filter_modal = 0
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.filter_punc = 0
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.convert_num_mode = 1
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.word_info = 0
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.voice_format = voice_format
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.first_channel_only = 1
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.reinforce_hotword = 0
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.sentence_max_length = 0
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def set_first_channel_only(self, first_channel_only):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.first_channel_only = first_channel_only
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def set_speaker_diarization(self, speaker_diarization):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.speaker_diarization = speaker_diarization
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def set_filter_dirty(self, filter_dirty):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.filter_dirty = filter_dirty
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def set_filter_modal(self, filter_modal):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.filter_modal = filter_modal
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def set_filter_punc(self, filter_punc):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.filter_punc = filter_punc
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def set_convert_num_mode(self, convert_num_mode):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.convert_num_mode = convert_num_mode
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def set_word_info(self, word_info):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.word_info = word_info
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def set_hotword_id(self, hotword_id):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.hotword_id = hotword_id
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def set_customization_id(self, customization_id):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.customization_id = customization_id
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def set_voice_format(self, voice_format):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.voice_format = voice_format
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def set_sentence_max_length(self, sentence_max_length):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.sentence_max_length = sentence_max_length
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def set_reinforce_hotword(self, reinforce_hotword):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.reinforce_hotword = reinforce_hotword
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class FlashRecognizer:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    """
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    reponse:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    request_id        string
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    status            Integer    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message           String    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    audio_duration    Integer
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    flash_result      Result Array
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Result:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    text              String
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    channel_id        Integer
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sentence_list     Sentence Array
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Sentence:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    text              String
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    start_time        Integer    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    end_time          Integer    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    speaker_id        Integer    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    word_list         Word Array
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Word:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    word              String 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    start_time        Integer 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    end_time          Integer 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    stable_flag:     Integer 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    """
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def __init__(self, appid, credential):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.credential = credential
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.appid = appid
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _format_sign_string(self, param):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signstr = "POSTasr.cloud.tencent.com/asr/flash/v1/"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for t in param:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if 'appid' in t:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                signstr += str(t[1])
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signstr += "?"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for x in param:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tmp = x
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if 'appid' in x:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                continue
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for t in tmp:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                signstr += str(t)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                signstr += "="
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            signstr = signstr[:-1]
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            signstr += "&"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signstr = signstr[:-1]
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return signstr
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _build_header(self):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        header = {"Host": "asr.cloud.tencent.com"}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return header
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _sign(self, signstr, secret_key):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        hmacstr = hmac.new(secret_key.encode('utf-8'),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           signstr.encode('utf-8'), hashlib.sha1).digest()
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        s = base64.b64encode(hmacstr)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        s = s.decode('utf-8')
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return s
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _build_req_with_signature(self, secret_key, params, header):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        query = sorted(params.items(), key=lambda d: d[0])
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signstr = self._format_sign_string(query)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signature = self._sign(signstr, secret_key)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        header["Authorization"] = signature
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        requrl = "https://"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        requrl += signstr[4::]
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return requrl
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _create_query_arr(self, req):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'appid': self.appid, 'secretid': self.credential.secret_id, 'timestamp': str(int(time.time())),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             'engine_type': req.engine_type, 'voice_format': req.voice_format,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             'speaker_diarization': req.speaker_diarization, 'hotword_id': req.hotword_id,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             'customization_id': req.customization_id, 'filter_dirty': req.filter_dirty,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             'filter_modal': req.filter_modal, 'filter_punc': req.filter_punc,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             'convert_num_mode': req.convert_num_mode, 'word_info': req.word_info,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             'first_channel_only': req.first_channel_only, 'reinforce_hotword': req.reinforce_hotword,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             'sentence_max_length': req.sentence_max_length
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def recognize(self, req, data):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        header = self._build_header()
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        query_arr = self._create_query_arr(req)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        req_url = self._build_req_with_signature(self.credential.secret_key, query_arr, header)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        r = requests.post(req_url, headers=header, data=data)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return r.text
 
			 |