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

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

        摘要:实现点读功能,自动朗读翻译整段。
        完整代码git地址:https://github.com/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  win32con
import pyttsx                               #语言支持库
import chardet                                
import time

def speakInit():                     
    engine = pyttsx.init()                  #初始化语音引起
    rate = engine.getProperty('rate')       #获取初始语速  初始为200我觉得有点快,改成了120
    engine.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_text



old_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 time
import  tkinter as tk
from googletrans import Translator
import  readCopy
import  testtestGoogletrans                                        #倒入所需库

old_text = ''
new_text = 'hi'
engine = readCopy.speakInit() 
def update_timeText():                                            #差看剪切板文字是否更新
    global  old_text
    global  new_text
    new_text = readCopy.getCopyText()

    print (new_text+ '+')                                         #显示内容方便调试
    print  (old_text+'-')
    if (new_text != old_text):

        try:

            words = new_text
            result = testtestGoogletrans.translate(words)
            Label2.configure(text=result)
            Label2.pack

            old_text =new_text
            window.after(1000, update_timeText)                  #程序精髓,1S后更新界面
            return   read_text()
        except:
            window.after(1000, update_timeText)                  #有异常也要更新
    else:
        window.after(1000, update_timeText)


def read_text():                                     #读剪切板内容
    global  engine
    engine.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 ,window






if __name__ == "__main__":                   

    Label2,window=init()
    engine = readCopy.speakInit()
    new_text =  readCopy.getCopyText()

    try:
        words = new_text
        result=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


整理完成
 
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,接下来我将为您演示如何使用 Python 编写一个利用百度翻译 API翻译器。 首先,您需要先在百度翻译开放平台上申请一个开发者账号,并且创建一个应用,获取到自己的 App ID 和密钥等信息。然后,您需要安装 `requests` 和 `json` 库,这两个库可以通过以下命令来安装: ``` pip install requests pip install json ``` 接下来,您可以按照以下步骤编写您的 Python 代码: ```python import requests import json # 百度翻译 API 的 URL url = 'http://api.fanyi.baidu.com/api/trans/vip/translate' # 您的 App ID 和密钥 app_id = 'your_app_id' app_key = 'your_app_key' # 翻译函数,可以将待翻译的文本和目标语言作为参数传入 def translate(text, to_lang='en'): # 构建请求参数 params = { 'q': text, 'from': 'auto', 'to': to_lang, 'appid': app_id, 'salt': '123456', # 随机数,可以根据自己的需要修改 'sign': '', # 签名,需要根据请求参数和密钥生成 } # 计算签名 sign_str = app_id + text + params['salt'] + app_key sign = hashlib.md5(sign_str.encode()).hexdigest() params['sign'] = sign # 发送请求并获取响应 response = requests.get(url, params=params) result = json.loads(response.text) # 解析响应,返回翻译结果 if 'trans_result' in result: return result['trans_result'][0]['dst'] else: return None ``` 在上面的代码中,我们首先定义了百度翻译 API 的 URL,以及我们自己的 App ID 和密钥。然后,我们编写了一个翻译函数 `translate()`,该函数接受待翻译的文本和目标语言作为参数,然后构建请求参数,计算签名,发送请求,并解析响应,最后返回翻译结果。 需要注意的是,我们在计算签名时使用了 Python 自带的 `hashlib` 库,该库可以用来计算字符串的 MD5 哈希值。另外,我们在请求参数中还指定了一个随机数 `salt`,这个随机数可以根据自己的需要生成。 最后,您可以使用以下代码来测试您的翻译器: ```python text = '我爱你' to_lang = 'en' result = translate(text, to_lang) print(result) ``` 在上面的代码中,我们将待翻译的文本设置为 `'我爱你'`,目标语言设置为英语 `'en'`,然后调用 `translate()` 函数进行翻译,并打印翻译结果。您可以根据自己的需要修改这些参数。 希望这个示例代码可以帮助您编写自己的百度翻译 API 翻译器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值