当前位置: 首页 > 编程日记 > 正文

基于Pygame写的翻译方法

发布时间:2018-11-01
技术:pygame+easygui

概述

实现一个翻译功能,中英文的互相转换。并可以播放翻译后的内容。 翻译接口调用的是百度翻译的api接口。

详细

代码下载:http://www.demodashi.com/demo/14326.html

一、需求分析

使用pygame实现一个翻译功能,并可以播放翻译内容。(模仿百度翻译做一个简单的demo)

二、程序实现

1、初始化pygame环境,声明出页面

def renderText(text, position, view=screen):# 设置字体样式大小my_font = pygame.font.SysFont("SimHei", 25)# 渲染文字text = my_font.render(text, True, (255, 255, 255))view.blit(text, position)

2、利用easygui弹出框实现内容输入

 import easygui as g   mg = g.enterbox('需要翻译的内容', title='翻译') # 文本输入框

3、将输入的内容显示到页面上

def text(self, text):global inputstrself.strtext = textprint("验证 输入的内容呀:" + self.strtext)renderText(self.strtext, (500, 100))inputstr = self.strtextprint("inputstr:" + inputstr)

4、翻译功能的实现

翻译的实现,主要是向百度的翻译HTTP接口提交数据,然后获得返回,

实现如下:

def GetResult(self):q = self.strtext  # 获取输入的内容# 判断用户是否输入了内容if q == "":print("请先输入内容")self.content.append("")else:print("输入的语句:" + q)url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'salt = str(random.randint(32768, 65536))sigin = self._appid + q + salt + self._keyprint(sigin)m1 = hashlib.md5()m1.update(sigin.encode('utf8'))sign = m1.hexdigest()print("加密更新后的:" + sign)myurl = ""  # 防止出现myurl未定义错误for ch in q.encode('utf8'):if ch > 127:myurl = url + '?q=' + urllib.parse.quote(q) + '&from=' + str(self._to) + '&to=' + str(self._from)+'&appid=' + str(self._appid) + '&salt=' + str(salt)+'&sign=' + signelse:myurl = url + '?q=' + urllib.parse.quote(q) + '&from=' + str(self._from) + '&to=' + str(self._to)+'&appid=' + str(self._appid) + '&salt=' + str(salt)+'&sign=' + signresponse = requests.get(myurl)data = response.json()print(data)length = len(data['trans_result'])print(len(data['trans_result']))print_content = ""  # 存放翻译后的内容for i in range(0, length):if i == 0:  # 防止第一行就出现换行print_content = data['trans_result'][i]['dst']else:print_content = print_content + " \n" + (data['trans_result'][i]['dst'])print("翻译后的内容:" + print_content)# self.t.delete(0.0, END)  # 删除之前翻译出的内容if self.content:  # 判断self.content中是否存有之前翻译的内容,如果有,清空self.content.clear()self.content.append(print_content)

5、显示翻译后的内容

def showTextAfterTrans(self):global afterTransTextrenderText(self.afterTransText, (500, 350))afterTransText = self.afterTransText

6、语音播放功能

自己申请一个百度AI接口就可以

def voice():# 百度AI接口APP_ID = 'XX'API_KEY = 'XXXX'SECRET_KEY = 'XXXX'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)global afterTransTextq = afterTransText.strip()print("语音播放函数:")print(q)result = client.synthesis(q, 'zh', 4, {'vol': 5})print(result)# 识别正确返回语音二进制 错误则返回dictif not isinstance(result, dict):with open('audio.mp3', 'wb') as f:f.write(result)f.close()os.system('audio.mp3')

为了方便看清楚整个思路实现过程,贴出整体代码如下:

# utf-8
import pygame
import random
import hashlib
import urllib
import requests
from aip import AipSpeech
import os
import easygui as g
from pygame.locals import *# 初始化pygame环境
pygame.init()
# 创建窗口
# screen = pygame.display.set_mode((1280, 720))
screen = pygame.display.set_mode((1400, 750))
# 背景图片
background = pygame.image.load("background.png").convert()
# 转换语言按钮图片
buttonimage = "btnlanchange.png"
# 翻译按钮图片
btntransimage = "btntranslate.png"
# 语音播放按钮图片
btnvoiceimage = "btnvoice.png"
# 清除内容按钮图片
btnclearimage = "btnclear.png"
# 翻译后的内容
afterTransText = ""font = pygame.font.SysFont('simsunnsimsun',30)flag = False
btnx = 0  # 图片位置X坐标
btny = 0  # 图片位置Y坐标
w = 0  # 获取到的按钮图片的宽度
h = 0  # 获取到的按钮图片的高度
inputstr = ""  # 通过弹出框输入的内容
mg = "" # 弹框输入的内容# 按钮类
class Button(object):def __init__(self, bimage, position):self.buttonimage = pygame.image.load(bimage).convert()self.position = positiondef render(self):global btnx, btny, w, hw, h = self.buttonimage.get_size()  # 获取图片的长和宽# print("wh:")# print(w, h)x, y = self.position  # 获取传入的位置参数# print("xy:" + str(x), str(y))btnx = x - w / 2  # 最终画出的位置x坐标btny = y - h / 2  # 最终画出的位置y坐标# print("画图片时的btnx,btny:")# print(btnx, btny)screen.blit(self.buttonimage, (btnx, btny))'''经输出验证:翻译按钮在画布上的坐标(825.0,255.0);语言转换按钮在画布上的坐标(620.0,52.5)语音播放按钮在画布上的坐标(825.0,375.0);清除按钮在画布上的坐标(825.0,98.0)'''# 创建转换按钮button对象
button = Button(buttonimage, (665, 65))
# 创建翻译按钮btntranslate对象
btntranslate = Button(btntransimage, (850, 280))
# 创建语音播放按钮btnvoice对象
btnvoice = Button(btnvoiceimage, (850, 400))
# 创建文字清除按钮btnclear对象
btnclear = Button(btnclearimage, (850, 120))# 写文字方法
def renderText(text, position, view=screen):# 设置字体样式大小my_font = pygame.font.SysFont("SimHei", 25)# 渲染文字text = my_font.render(text, True, (255, 255, 255))view.blit(text, position)# 显示源语言和目标语言
def language():global flagif not flag:renderText("英文", (550, 50))renderText("中文", (730, 50))else:renderText("中文", (550, 50))renderText("英文", (730, 50))# 源语言与目标语言转换按钮函数
def changeLan():global flagif flag:flag = Falseprint(flag)else:flag = Trueprint(flag)# 翻译实现类
class Translate:def __init__(self):self.strtext = ""self.afterTransText = ""self.content = []  # 定义空数组存放取到的内容self._from = 'en'self._to = 'zh'self._appid = '自己申请的id'self._key = '自己申请的key'# 输入内容的函数def text(self, text):global inputstrself.strtext = textprint("验证 输入的内容呀:" + self.strtext)renderText(self.strtext, (500, 100))inputstr = self.strtextprint("inputstr:" + inputstr)# 触发的翻译函数def afterTrans(self):self.GetResult()self.afterTransText = " "  # 执行一次清空一次print("验证清空吗?:" + self.afterTransText)for item in self.content:self.afterTransText = self.afterTransText + itemprint("我是翻译完要显示的字符串呀:" + self.afterTransText)# 存储并显示 翻译完的 句子的函数(防止点击翻译,显示完内容后 被刷新冲掉)def showTextAfterTrans(self):global afterTransTextrenderText(self.afterTransText, (500, 350))afterTransText = self.afterTransText# 抓取翻译后返回的数据def GetResult(self):q = self.strtext  # 获取输入的内容# 判断用户是否输入了内容if q == "":print("请先输入内容")self.content.append("")else:print("输入的语句:" + q)url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'salt = str(random.randint(32768, 65536))sigin = self._appid + q + salt + self._keyprint(sigin)m1 = hashlib.md5()m1.update(sigin.encode('utf8'))sign = m1.hexdigest()print("加密更新后的:" + sign)myurl = ""  # 防止出现myurl未定义错误for ch in q.encode('utf8'):if ch > 127:myurl = url + '?q=' + urllib.parse.quote(q) + '&from=' + str(self._to) + '&to=' + str(self._from) + '&appid=' + str(self._appid) + '&salt=' + str(salt) + '&sign=' + signelse:myurl = url + '?q=' + urllib.parse.quote(q) + '&from=' + str(self._from) + '&to=' + str(self._to) + '&appid=' + str(self._appid) + '&salt=' + str(salt) + '&sign=' + signresponse = requests.get(myurl)data = response.json()print(data)length = len(data['trans_result'])print(len(data['trans_result']))print_content = ""  # 存放翻译后的内容for i in range(0, length):if i == 0:  # 防止第一行就出现换行print_content = data['trans_result'][i]['dst']else:print_content = print_content + " \n" + (data['trans_result'][i]['dst'])print("翻译后的内容:" + print_content)# self.t.delete(0.0, END)  # 删除之前翻译出的内容if self.content:  # 判断self.content中是否存有之前翻译的内容,如果有,清空self.content.clear()self.content.append(print_content)# 语音播放函数
def voice():# 百度AI接口APP_ID = '自己申请的id'API_KEY = '自己申请的key'SECRET_KEY = '自己申请的秘钥'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)global afterTransTextq = afterTransText.strip()print("语音播放函数:")print(q)result = client.synthesis(q, 'zh', 4, {'vol': 5})print(result)# 识别正确返回语音二进制 错误则返回dictif not isinstance(result, dict):with open('audio.mp3', 'wb') as f:f.write(result)f.close()os.system('audio.mp3')# 删除已输入内容函数
def clear():global inputstrinputstr = "点此输入需要翻译的内容"# 创建translate的对象
translate = Translate()def start():global flag  # 语言状态标志isFirst = Truewhile True:# 显示背景图screen.blit(background, (0, 0))# 显示翻译按钮图片btntranslate.render()# 显示语言栏language()# 显示语言转换按钮button.render()# 显示语音播放按钮btnvoice.render()# 显示清除按钮btnclear.render()# 显示输入的文本# translate.text()if isFirst:renderText("点击此处输入翻译的内容", (500, 100))else:renderText(inputstr, (500, 100))# 显示翻译后的文本内容translate.showTextAfterTrans()pygame.display.update()for event in pygame.event.get():if event.type == pygame.QUIT:  # 监测是否按下退出按钮pygame.quit()exit()elif event.type == pygame.MOUSEBUTTONDOWN:  # 判断鼠标是否按下pressed_array = pygame.mouse.get_pressed()if pressed_array:pos = pygame.mouse.get_pos()  # 取到鼠标的坐标位置mouse_x = pos[0]mouse_y = pos[1]print("鼠标点击坐标:")print(mouse_x, mouse_y)# 判断鼠标位置是否在 转换 按钮范围内if 620.0 <= mouse_x <= 710.0 and 52.5 <= mouse_y <= 77.5:print('我是语言转换按钮呀...')  # 点击后触发的函数changeLan()  # 调用源语言与目标语言转换栏# 判断鼠标坐标位置是否属于 翻译 按钮的坐标位置elif 825.0 <= mouse_x <= 875.0 and 255.0 <= mouse_y <= 305.0:print("我是翻译按钮呀...")translate.afterTrans()# 判断鼠标坐标位置是否属于 语音播放 按钮的坐标位置elif 825.0 <= mouse_x <= 875.0 and 375.0 <= mouse_y <= 425.0:print("我是播放语音按钮呀...")voice()elif 825.0 <= mouse_x <= 875.0 and 98.0 <= mouse_y <= 142:print("我是清除按钮啊...")clear()elif 500.0 <= mouse_x <= 600.0 and 100.0 <= mouse_y <= 200.0:print("弹出框....")mg = g.enterbox('需要翻译的内容', title='翻译')  # 文本输入框text_surface = font.render(mg, True, (0, 0, 255))print(mg)  ## g.textbox(msg="内容", title="", text=mg)# 自动识别并把语言栏转换for ch in mg.encode('utf8'):if ch > 127:flag = Truelanguage()else:flag = Falselanguage()# 输入内容以后 需要把之前在这显示的内容清除renderText("  ", (500, 100))isFirst = Falsetranslate.text(mg)if __name__ == '__main__':start()

三、项目结构

image.png

说明:

test.py 是写的过程中的一个测试文件;

audio.mp3是语音播放时用到的,复制放在目录下就可用

四、演示效果

image.png

图标是找的图片,点击相应的图片处触发相应的功能。

如果您有更好的想法,请与我交流2959723401@Foxmail.com

代码下载:http://www.demodashi.com/demo/14326.html

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

转载于:https://www.cnblogs.com/demodashi/p/10492756.html

相关文章:

冠军奖3万元!CSDN×易观算法大赛开赛啦

伴随着5G、物联网与大数据形成的后互联网格局的逐步形成&#xff0c;日益多样化的用户触点、庞杂的行为数据和沉重的业务体量也给我们的数据资产管理带来了不容忽视的挑战。为了建立更加精准的数据挖掘形式和更加智能的机器学习算法&#xff0c;对不断生成的用户行为事件和各类…

快速把web项目部署到weblogic上

weblogic简介 BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应 用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。 BEA WebLogic Server拥有处理关键Web应用系统问题所需的性…

使GDAL库支持中文路径或中文文件名的处理方法

之前生成的gdal 2.1.1动态库&#xff0c;在通过命令行执行时&#xff0c;遇到有中文路径或中文图像名时&#xff0c;GDALOpen函数不能正确的被调用&#xff0c;如下图&#xff1a;解决方法&#xff1a;1. 在所有使用GDALAllRegister();语句后面加上一句CPLSetConfigOption…

创新工场论文入选NeurIPS 2019,研发最强“AI蒙汗药”

9月4日&#xff0c;被誉为机器学习和神经网络领域的顶级会议之一的 NeurIPS 2019 揭晓收录论文名单&#xff0c;创新工场人工智能工程院的论文《Learning to Confuse: Generating Training Time Adversarial Data with Auto-Encoder》被接收在列。这篇论文围绕现阶段人工智能系…

Flutter环境搭建(Windows)

SDK获取 去官方网站下载最新的安装包 &#xff0c;或者在Github中的Flutter项目去 下载 。 将下载的安装包解压 注意&#xff1a;不要将Flutter安装到高权限路径&#xff0c;例如 C:\Program Files\ 配置环境变量&#xff0c;在Path中添加flutter\bin的全路径(如&#xff1a;D…

Android在eoe分享一篇推荐开发组件或者框架的文章

http://www.eoeandroid.com/thread-311194-1-1.html y4078275315 主题 62 帖子 352 e币实习版主 积分314发消息电梯直达楼主 回复 发表于 2013-11-7 09:58:45 | 只看该作者 |只看大图 34本帖最后由 y407827531 于 2013-11-28 15:07 编辑感谢版主推荐&#xff0c;本贴会持续更新…

如何打造高质量的机器学习数据集?这份超详指南不可错过

作者 | 周岩&#xff0c;夕小瑶&#xff0c;霍华德&#xff0c;留德华叫兽转载自知乎博主『运筹OR帷幄』导读&#xff1a;随着计算机行业的发展&#xff0c;人工智能和数据科学近几年成为了学术和工业界关注的热点。特别是这些年人工智能的发展日新月异&#xff0c;每天都有新的…

人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码

人脸识别引擎SeetaFaceEngine中Alignment模块用于检测人脸关键点&#xff0c;包括5个点&#xff0c;两个眼的中心、鼻尖、两个嘴角&#xff0c;以下是测试代码&#xff1a;int test_alignment() {std::vector<std::string> images{ "1.jpg", "2.jpg"…

微软宣布 Win10 设备数突破8亿,距离10亿还远吗?

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; >>> 微软高管 Yusuf Mehdi 昨天在推特发布了一条推文&#xff0c;宣布运行 Windows 10 的设备数已突破 8 亿&#xff0c;比半年前增加了 1 亿。 根据之前的报道&#xff0c;两个月前 W…

领导者必须学会做的十件事情

在这个世界上你可以逃避很多事情并且仍然能够获得成功&#xff0c;但是有些事情你根本就无法走捷径。商业领导者们并不存在于真空之中。成功总是与竞争有关。你可能拥有伟大的产品、服务、概念、战略、团队等等&#xff0c;如果它不能从某种程度上超越竞争对手&#xff0c;这对…

人脸识别引擎SeetaFaceEngine中Identification模块使用的测试代码

人脸识别引擎SeetaFaceEngine中Identification模块用于比较两幅人脸图像的相似度&#xff0c;以下是测试代码&#xff1a;int test_recognize() {const std::string path_images{ "E:/GitCode/Face_Test/testdata/recognization/" };seeta::FaceDetection detector(&…

李沐亲授加州大学伯克利分校深度学习课程移师中国,现场资料新鲜出炉

2019 年 9 月 5 日&#xff0c;AI ProCon 2019 在北京长城饭店正式拉开帷幕。大会的第一天&#xff0c;以亚马逊首席科学家李沐面对面亲自授课完美开启&#xff01;“大神”&#xff0c;是很多人对李沐的印象。除了是亚马逊首席科学家李&#xff0c;李沐还拥有多重身份&#xf…

对Python课的看法

学习Python已经有两周的时间了&#xff0c;我是计算机专业的学生&#xff0c;我抱着可以多了解一种语言的想法报了Python的选修课&#xff0c;从第一次听肖老师的课开始&#xff0c;我便感受到一种好久没有感受到的课堂氛围&#xff0c;感觉十分舒服&#xff0c;不再是那种高中…

维护学习的一点体会与看法

学习维护的知识也有2个月了&#xff0c;对于知识的学习也有一定的看法。接下来我就说一下我对学习的看法。首先&#xff0c;你要学会自学&#xff0c;无论是看书还是上网查资料&#xff0c;维护的知识很多很杂&#xff0c;想要人一下子来教是不可能。只能是自己慢慢的学。其次&…

Dlib简介及在windows7 vs2013编译过程

Dlib是一个C库&#xff0c;包含了许多机器学习算法。它是跨平台的&#xff0c;可以应用在Windows、Linux、Mac、embedded devices、mobile phones等。它的License是Boost Software License 1.0&#xff0c;可以商用。Dlib的主要特点可以参考官方网站&#xff1a;http://dlib.ne…

六大主题报告,四大技术专题,AI开发者大会首日精华内容全回顾

9月6-7日&#xff0c;2019中国AI开发者大会&#xff08;AI ProCon 2019&#xff09; 在北京拉开帷幕。本次大会由新一代人工智能产业技术创新战略联盟&#xff08;AITISA&#xff09;指导&#xff0c;鹏城实验室、北京智源人工智能研究院支持&#xff0c;专业中文IT技术社区CSD…

Git安装配置(Linux)

使用yum安装Git yum install git -y 编译安装 # 安装依赖关系 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel # 编译安装 tar -zxf git-2.0.0.tar.gz cd git-2.0.0 make configure ./configure --prefix/usr make make install 配置Git…

卷积神经网络(CNN)代码实现(MNIST)解析

在http://blog.csdn.net/fengbingchun/article/details/50814710中给出了CNN的简单实现&#xff0c;这里对每一步的实现作个说明&#xff1a;共7层&#xff1a;依次为输入层、C1层、S2层、C3层、S4层、C5层、输出层&#xff0c;C代表卷积层(特征提取)&#xff0c;S代表降采样层…

一点感悟和自勉

来学习linux&#xff0c;其实目的很简单&#xff0c;也很现实&#xff0c;就是为了学成之后找一份好的工作&#xff0c;能够养家糊口。 接触了几天&#xff0c;感觉挺难的&#xff0c;可能是因为我没有基础的原因吧&#xff0c;以前电脑只是用来打游戏和看电影&#xff0c;第一…

入门数据分析师,从了解元数据中心开始

作者丨凯凯连编辑丨Zandy来源 | 大数据与人工智能&#xff08;ID&#xff1a;ai-big-data&#xff09;【导读】上一篇文章&#xff0c;我们简单讲解了数据仓库的概念&#xff0c;并介绍了它的分层架构设计&#xff0c;相信大家对数据仓库体系已经有一定的了解了。那么&#xff…

PhpMyAdmin的简单安装和一个mysql到Redis迁移的简单例子

1.phpmyadmin的安装 sudo apt-get install phpmyadmin 之后发现http://localhost/phpmyadmin显示没有此url&#xff0c;于是想到本机上能显示的网页都在/var/www文件夹内&#xff0c;因此执行命令行:sudo ln /usr/share/phpmyadmin /var/www 这样就能使用了&#xff1b; 之…

聊聊flink的HistoryServer

为什么80%的码农都做不了架构师&#xff1f;>>> 序 本文主要研究一下flink的HistoryServer HistoryServer flink-1.7.2/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/history/HistoryServer.java public class HistoryServer {private st…

深度学习开源库tiny-dnn的使用(MNIST)

tiny-dnn是一个基于DNN的深度学习开源库&#xff0c;它的License是BSD 3-Clause。之前名字是tiny-cnn是基于CNN的&#xff0c;tiny-dnn与tiny-cnn相关又增加了些新层。此开源库很活跃&#xff0c;几乎每天都有新的提交&#xff0c;因此下面详细介绍下tiny-dnn在windows7 64bit …

如何学习SVM?怎么改进实现SVM算法程序?答案来了

编辑 | 忆臻来源 | 深度学习这件小事&#xff08;ID&#xff1a;DL_NLP&#xff09;【导读】在 3D 动作识别领域&#xff0c;需要用到 SVM&#xff08;支持向量机算法&#xff09;&#xff0c;但是现在所知道的 SVM 算法很多很乱&#xff0c;相关的程序包也很多&#xff0c;有什…

跟着石头哥哥学cocos2d-x(三)---2dx引擎中的内存管理模型

2019独角兽企业重金招聘Python工程师标准>>> 2dx引擎中的对象内存管理模型&#xff0c;很简单就是一个对象池引用计数&#xff0c;本着学好2dx的好奇心&#xff0c;先这里开走吧&#xff0c;紧接上面两节&#xff0c;首先我们看一个编码场景代码&#xff1a; hello…

读8篇论文,梳理BERT相关模型进展与反思

作者 | 陈永强来源 | 微软研究院AI头条&#xff08;ID:MSRAsia)【导读】BERT 自从在 arXiv 上发表以来获得了很大的成功和关注&#xff0c;打开了 NLP 中 2-Stage 的潘多拉魔盒。随后涌现了一大批类似于“BERT”的预训练&#xff08;pre-trained&#xff09;模型&#xff0c;有…

Dlib库中实现正脸人脸检测的测试代码

Dlib库中提供了正脸人脸检测的接口&#xff0c;这里参考dlib/examples/face_detection_ex.cpp中的代码&#xff0c;通过调用Dlib中的接口&#xff0c;实现正脸人脸检测的测试代码&#xff0c;测试代码如下&#xff1a;#include "funset.hpp" #include <string>…

20189317 《网络攻防技术》 第二周作业

一.黑客信息 &#xff08;1&#xff09;国外黑客 1971年&#xff0c;卡普尔从耶鲁大学毕业。在校期间&#xff0c;他专修心理学、语言学以及计算机学科。也就是在这时他开始对计算机萌生兴趣。他继续到研究生院深造。20世纪60年代&#xff0c;退学是许多人的一个选择。只靠知识…

centos 6.4 SVN服务器多个项目的权限分组管理

根据本博客中的cent OS 6.4下的SVN服务器构建 一文&#xff0c;搭建好SVN服务器只能管理一个工程&#xff0c;如何做到不同的项目&#xff0c;多个成员的权限管理分配呢&#xff1f;一 需求开发服务器搭建好SVN服务器&#xff0c;不可能只管理一个工程项目&#xff0c;如何做到…

cifar数据集介绍及到图像转换的实现

CIFAR是一个用于普通物体识别的数据集。CIFAR数据集分为两种&#xff1a;CIFAR-10和CIFAR-100。The CIFAR-10 and CIFAR-100 are labeled subsets of the 80 million tiny images dataset. They were collected by Alex Krizhevsky, Vinod Nair, and Geoffrey Hinton.CIFAR-10由…