fouck 发表于 2019-2-25 18:15:36

基于百度翻译的英语翻译python脚本

本帖最后由 fouck 于 2019-2-25 18:15 编辑

        学习python有差不多两个多月了,玩语音也有一小段时间了,是时候分享以下战果了。
        今天公司来了一个外国人,是美国人,叽里呱啦说了一大通,除了一些名词能听得懂其他都听不懂,突然想要是有实时翻译就好了,去网上查了价格,果断放弃。
        我想要是我也能做一个就好了,说干就干,查了以下大佬们的方法,觉得还是python好用,于是乎,写了个脚本呢,结果还行,基本满足要求。
        思路是:录音→识别→翻译;
第一步:录音,用的模块模块是wave,以及pyaudio(涉及声音基本都用它),这里直接给代码,自己琢磨其中的奥妙,代码很简单的,基本有c基础的都看得懂。

        import wave
from pyaudio import PyAudio,paInt16

framerate=16000
NUM_SAMPLES=2000
channels=1
sampwidth=2
TIME=2
def save_wave_file(filename,data):
    '''save the date to the wavfile'''
    wf=wave.open(filename,'wb')
    wf.setnchannels(channels)
    wf.setsampwidth(sampwidth)
    wf.setframerate(framerate)
    wf.writeframes(b"".join(data))
    wf.close()

def my_record():
    pa=PyAudio()
    stream=pa.open(format = paInt16,channels=1,
                   rate=framerate,input=True,
                   frames_per_buffer=NUM_SAMPLES)
    my_buf=[]
    count=0
    while count<TIME*15:#控制录音时间
      string_audio_data = stream.read(NUM_SAMPLES)
      my_buf.append(string_audio_data)
      count+=1
      print('.')
    save_wave_file(r'F:\Users\01.wav',my_buf)
    stream.close()
   
if __name__ == '__main__':
    my_record()
    print('Over!')
第二步:识别,用百度云语音,这个也很简单,论坛一大把,这也直接上代码,想必各位小可爱,机灵鬼都能看得懂。

from aip import AipSpeech

APP_ID = 'xxx'
API_KEY = 'xxx'
SECRET_KEY = 'xxx'
aipSpeech = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
      return fp.read()
try:
      t = aipSpeech.asr(get_file_content(r'C:\Users\lixinghao\Desktop\awake.wav'),
                        'wav', 16000, { 'lan': 'zh',})
      print (t['result'])
except:
      print ("error ,pass")

是不是很简单,谁都能看得懂。
第三步,翻译,用百度翻译。
import requests
import string
import time
api_url = "http://api.fanyi.baidu.com/api/trans/vip/translate"
my_appid = '20151113000005349'
cyber = 'osubCEzlGjzvw8qdQc41'
lower_case = list(string.ascii_lowercase)

def requests_for_dst(word):    #翻译
    salt = str(time.time())[:10]
    final_sign = str(my_appid)+word+salt+cyber
    final_sign = hashlib.md5(final_sign.encode("utf-8")).hexdigest()    #区别en,zh构造请求参数
    if list(word) in lower_case:
      paramas = {
            'q':word,
            'from':'en',
            'to':'zh',
            'appid':'%s'%my_appid,
            'salt':'%s'%salt,
            'sign':'%s'%final_sign
            }
      my_url = api_url+'?appid='+str(my_appid)+'&q='+word+'&from='+'en'+'&to='+'zh'+'&salt='+salt+'&sign='+final_sign
    else:
      paramas = {
            'q':word,
            'from':'zh',
            'to':'en',
            'appid':'%s'%my_appid,
            'salt':'%s'%salt,
            'sign':'%s'%final_sign
            }
      my_url = api_url+'?appid='+str(my_appid)+'&q='+word+'&from='+'zh'+'&to='+'en'+'&salt='+salt+'&sign='+final_sign
    response = requests.get(api_url,params = paramas).content
    content = str(response,encoding = "utf-8")
    json_reads = json.loads(content)
    print(json_reads['trans_result']['dst'])
if __name__ == '__main__':
        s=input()
        requests_for_dst(s)
第四步:组合,代码太长了,就不放了,放在附件里,想要就下载。
各位大佬各位乡亲父老,多多批评指出。
页: [1]
查看完整版本: 基于百度翻译的英语翻译python脚本