1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 利用python制作点读翻译软件(基于google api)

利用python制作点读翻译软件(基于google api)

时间:2018-08-03 15:38:17

相关推荐

利用python制作点读翻译软件(基于google api)

利用python制作点读翻译软件(基于google api)

摘要:实现点读功能,自动朗读翻译整段。完整代码git地址:/luoqingyu/Read-translation-machine

程序思路:首先是获取要翻译和朗读的英文数据来源,这里假定我们正在阅读PDF,遇到一段有困难的话,我想要实现的是使用鼠标左键将句子整体选上实现朗读和翻译。1.获取需要翻译的内容:选中需要翻译的句子,ctrl+c复制到剪切板上,利用python读取剪切板内容,获取带翻译数据。2.朗读:获取到待翻译的数据后,调用pyttsx语言库对文本进行朗读。3.翻译:获取剪切板内容后,调用googletrans库获取翻译结果。4.界面显示:主要是显示翻译内容,使用tkinter库绘制界面。

实现效果:

分模块实现1.获取截切板内容朗读 readCopy.py

#-*- coding: utf-8 -*- import win32clipboard import win32clipboard as wc#用以获取剪切板内容的支持库import win32conimport pyttsx #语言支持库import chardet import timedef speakInit(): engine = pyttsx.init() #初始化语音引起rate = engine.getProperty('rate') #获取初始语速 初始为200我觉得有点快,改成了120engine.setProperty('rate', 120) #修改初始语速voices = engine.getProperty('voices') #选择发音人物,听了所有人物,觉得这个id的小姐姐声音好听engine.setProperty('voice', "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0")return engine#返回一个初始化好的语言借口def getCopyText():#获取剪切板内容wc.OpenClipboard()copy_text= wc.GetClipboardData(win32con.CF_TEXT) wc.CloseClipboard()return copy_textold_text = "hi" #剪切板内容更新了才进行朗读 if __name__ == "__main__": #测试函数old_text = "hi"engine = speakInit()#初始化语言接口while (1):time.sleep(1) #延时1s防止频繁访问剪切板print chardet.detect(getCopyText())#打印剪切板内容if (getCopyText() != old_text):#如果剪切板更新了try:engine.say(getCopyText())time.sleep(1)engine.say(getCopyText())engine.runAndWait()old_text = getCopyText()except:pass

2.调用google翻译api testtestGoogletrans.py

#-*- coding: utf-8 -*-from googletrans import Translator#倒入google翻译包def translate(sendwords): #编写中文翻译函数translator = Translator()return (translator.translate(sendwords,dest='zh-CN').text)if __name__ == "__main__": #测试函数print ('20')words= "We trained a large, deep convolutional neural network"translate(words)

3.编写界面和主函数 主函数使用了以上两个文件,请保持这些文件在一个文件夹中

#!/usr/bin/python# -*- coding: UTF-8 -*-import timeimport tkinter as tkfrom googletrans import Translatorimport readCopyimport testtestGoogletrans#倒入所需库old_text = ''new_text = 'hi'engine = readCopy.speakInit() def update_timeText(): #差看剪切板文字是否更新global old_textglobal new_textnew_text = readCopy.getCopyText()print (new_text+ '+') #显示内容方便调试print (old_text+'-')if (new_text != old_text):try:words = new_textresult = testtestGoogletrans.translate(words)Label2.configure(text=result)Label2.packold_text =new_textwindow.after(1000, update_timeText) #程序精髓,1S后更新界面return read_text()except:window.after(1000, update_timeText) #有异常也要更新else:window.after(1000, update_timeText)def read_text(): #读剪切板内容global engineengine.say(new_text)engine.runAndWait()def init(): #界面初始化window = tk.Tk()Button1=tk.Button(window, text='再次朗读', command=lambda:read_text())Button1.place(x=350,y=20)window.title('daydayup点读机')window.geometry('400x200')Label1=tk.Label(window,text='结果')Label1.place(x=10,y=10)Label2=tk.Label(window,text='*******', font = ("Arial, 14"),wraplength=300)Label2.place(x=20,y=40)return Label2 ,windowif __name__ == "__main__": Label2,window=init()engine = readCopy.speakInit()new_text = readCopy.getCopyText()try:words = new_textresult=testtestGoogletrans.translate(words)Label2.configure(text=result)Label2.place(x=20, y=40)Label2.pack()update_timeText()window.wm_attributes('-topmost', 1)window.mainloop()except:pass

整理完成

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。