鱼C论坛

 找回密码
 立即注册
查看: 1786|回复: 1

[作品展示] 基于百度翻译的英语翻译python脚本

[复制链接]
发表于 2019-2-25 18:15:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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'][0])
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)[0] 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'][0]['dst'])
if __name__ == '__main__':
        s=input()
        requests_for_dst(s)
第四步:组合,代码太长了,就不放了,放在附件里,想要就下载。
各位大佬各位乡亲父老,多多批评指出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-21 12:20:44 | 显示全部楼层
此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 16:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表