女朋友看电影没字幕,让我想办法搞定!谁让我是程序员呢!
一、故事情节
是这样子的,女朋友晚上突然翻到了自己喜欢看的一个电影,但是没有字幕,这让她很苦恼。
我急中生智,紧急的解决了我女朋友的需求。不然还真不能上床睡觉
想到了使用Python做一个可以识别语音,然后翻译出来文字的软件。
如下图就是本片文章所要完成的效果,哈哈,是不是还不错,很棒的样子。
如果有兴趣可以给我点个赞,之后带来更多好玩、有趣的demo和实现的教程。
《甄嬛传》第一集的某一小段:
其实,是这样子的:
最近剧荒,偶然翻出了曾经下载的电视剧回味一番,经典就是经典,不论是剧情还是台词,都那么有魅力,咦?等等,台词,台词……作为一个IT从业者,我忽然灵光一现——现在语音识别技术这么发达,能否有什么办法能帮我保存下一些精彩桥段的台词呢?或许我也可以是个野生字幕君:p ,似乎也可以在此基础上顺手再翻译一下个别难懂的台词!
略加思索,我大概有了个想法——做个视频中提取音频的程序,而后去请求一个开放的语音识别API来帮我把语音转为文字。鉴于之前调用有道智云的愉快经验,我决定再次拿来为我所用,很快做出了这个demo(请忽略这丑丑的界面布局,能用就行……)。
二、开发前的准备工作
首先,是需要在有道智云的个人页面上创建实例、创建应用、绑定应用和实例,获取调用接口用到的应用的id和密钥。具体个人注册的过程和应用创建过程详见文章不到100行代码搞定Python做OCR识别身份证,文字等各种字体
三、开发过程详细介绍
下面介绍具体的代码开发过程。
(一)接口规范说明
首先分析有道智云的API输入输出规范。根据文档来看,调用接口格式如下:
有道语音识别API HTTPS地址:
https://openapi.youdao.com/asrapi 1
接口调用参数:
其中q为base64编码的待识别音频文件,“上传的文件时长不能超过120s,文件大小不能超过10M”,这点需要注意一下。
API的返回内容较为简单:
(二)项目开发
这个项目使用python3开发,包括maindow.py,videoprocess.py,srbynetease.py三个文件。
界面部分,使用python自带的tkinter库,提供视频文件选择、时间输入框和确认按钮;
videoprocess.py:来实现在视频的指定时间区间提取音频和处理API返回信息的功能;
srbynetease.py:将处理好的音频发送到短语音识别API并返回结果。
1、界面部分的实现
界面部分代码如下,比较简单。
root=tk.Tk() root.title("netease youdao sr test") frm = tk.Frame(root) frm.grid(padx='50', pady='50')btn_get_file = tk.Button(frm, text='选择待识别视频', command=get_file) btn_get_file.grid(row=0, column=0, padx='10', pady='20') path_text = tk.Entry(frm, width='40') path_text.grid(row=0, column=1)start_label=tk.Label(frm,text='开始时刻:') start_label.grid(row=1,column=0) start_input=tk.Entry(frm) start_input.grid(row=1,column=1)end_label=tk.Label(frm,text='结束时刻:') end_label.grid(row=2,column=0) end_input=tk.Entry(frm) end_input.grid(row=2,column=1)sure_btn=tk.Button(frm, text='开始识别', command=start_sr) sure_btn.grid(row=3,column=0,columnspan=3) root.mainloop()
其中sure_btn的绑定事件start_sr()做了简单的异常处理,并通过弹窗打印最终的识别结果:
def start_sr():print(video.video_full_path)if len(path_text.get())==0:sr_result = '未选择文件'else:video.start_time = int(start_input.get())video.end_time = int(end_input.get())sr_result=video.do_sr()tk.messagebox.showinfo("识别结果", sr_result)
2、处理音视频功能开发
(1)在videoprocess.py中,我用到了python的moviepy库来处理视频,按指定起止时间截取视频,提取音频,并按API要求转为base64编码形式:
def get_audio_base64(self):video_clip=VideoFileClip(self.video_full_path).subclip(self.start_time,self.end_time)audio=video_clip.audioresult_path=self.video_full_path.split('.')[0]+'_clip.mp3'audio.write_audiofile(result_path)audio_base64 = base64.b64encode(open(result_path,'rb').read()).decode('utf-8')return audio_base64
(2)处理好的音频文件编码传到封装好的有道智云API调用方法中:
def do_sr(self):audio_base64=self.get_audio_base64()sr_result=srbynetease.connect(audio_base64)print(sr_result)if sr_result['errorCode']=='0':return sr_result['result']else:return "Something wrong , errorCode:"+sr_result['errorCode']
3、发送数据翻译功能的开发
srbynetease.py中封装的调用方法比较简单,按API文档“组装”好data{}发送即可:
def connect(audio_base64):data = {}curtime = str(int(time.time()))data['curtime'] = curtimesalt = str(uuid.uuid1())signStr = APP_KEY + truncate(audio_base64) + salt + curtime + APP_SECRETsign = encrypt(signStr)data['appKey'] = APP_KEYdata['q'] = audio_base64data['salt'] = saltdata['sign'] = signdata['signType'] = "v2"data['langType'] = 'zh-CHS'data['rate'] = 16000data['format'] = 'mp3'data['channel'] = 1data['type'] = 1response = do_request(data)return json.loads(str(response.content,'utf-8'))
四、效果展示
随手打开《甄嬛传》第一集的某一小段试试:
效果可以,断句的一点小瑕疵可以忽略。没想到这短语音识别API博古通今,古文语音识别也这么溜,厉害厉害!
你学到了吗,有技术可以对女朋友为所欲为!
此文转载文,著作权归作者所有,如有侵权联系小编删除!
原文地址:https://blog.csdn.net/qq_17623363/article/details
完整项目代码获取点这
女朋友看电影没字幕,让我想办法搞定!谁让我是程序员呢!相关推荐
- 计算机一级字幕设置,字幕怎么用-看电影没字幕怕什么!老司机教你手动设置字幕!...
由于现在的高清电影越来越多,而且很多是没有字幕的,所以很有必要做一个手动设置字幕的教程了这次我把Z3和Z4两个版本的手动设置字幕的方法都讲解一下. 当你下载了一个高清电影,但没有字幕的情况,你可以去网 ...
- 家里没网怎么在电脑上看电影玩游戏?教你一招搞定
家里断网了想在电脑上看电影.玩游戏怎么办?断网是我们日常生活中常常会遇到的问题,这个时候通常只有手机流量可以用.今天教你最简单的方法,无需电脑联网,就可以把手机小屏变电脑大屏,电脑操作无压力. 1.首 ...
- 女朋友生日java程序_★★女朋友要过生日了!我想用java为她写一个程序,一举两得啊! 希望大家多提建议啊!谢谢!!!...
女朋友要过生日了,我想用java为她写一个程序,所以想请教大家, 希望大家给我出出点子, 同时手头有3D 等漂亮图形的java程序或其他一些特效的文字,图形java程序,都希望大家多提供, 多帮 ...
- 想要成为一名优秀的程序员,这十八招必看
文章目录 第一招:速学能力 第二招:理解能力 第三招:编程能力 第四招:使用能力 第五招:编码能力 第六招:注释能力 第七招:思维能力 第八招:英语能力 第九招:学习能力 第十招:思考能力 第十一招: ...
- 漫画:我是程序员,总想打测试工程师怎么办?
轻友们大家好~我是珍妮兔,一只工程效率顾问.我的日常生活是和不同的软件研发团队聊天,给大家分享各种轻松把软件做好的最佳实践.如果你有特别想要解决的问题,不妨加我的个人微信:jenny1652告诉我. ...
- 那些想不断提高自己技术水平的Java程序员们
对程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Jav ...
- 假如你想成为一名测试工程师(程序员找茬师)
假如你想成为一名测试工程师(程序员找茬师) 先扯点虚的 测试工程师是个啥? 设计用例 常说的那些个口头语 练好招数 先扯点虚的 大学扩招,经济下行,疫情肆虐... 从小到大,我们经历了无数的考试,打怪 ...
- 知乎热议:27岁没文凭、想自学编程,有机会成为程序员吗?互联网风口一去不复返了吗?
缘起 前段时间在知乎里看到了一个问题,感慨万千,拿出来给大家分享分享,希望可以抛砖引玉给大家一点启发. 问题大家已经从文章的标题里看到了:一个27岁没文凭,想去努力自学编程,有机会成为程序员吗? 而问 ...
- 知乎热议:27岁没文凭、想自学编程,有机会成为程序员吗?互联网风口一去不复返了?
缘起 前段时间在知乎里看到了一个问题,感慨万千,拿出来给大家分享分享,希望可以抛砖引玉给大家一点启发. 问题大家已经从文章的标题里看到了:一个27岁没文凭,想去努力自学编程,有机会成为程序员吗? 而问 ...
最新文章
- 2012 iis php mysql_Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建wordpress博客教程
- 使用Java让android手机自动执行重复重启
- lua学习笔记之函数
- tomcat8.5 远程访问 manager页面
- Javascript实现导航锚点滚动效果实例
- mysql查看数据倾斜_深入理解hadoop数据倾斜
- 最新小白详细描述在centos7.5上安装python3并使用Nginx+virtualenv+supervisor来部署tornado项目(整理集合结合实际)系列1
- 代码实现识别部分截图在整张图片中的位置_基于神经网络的OCR识别
- 2019-11-20 c语言参考手册
- position学习终结者(一)
- GitHub的提醒邮件改进
- win10计算机管理字体糊,win10字体发虚模糊正确解决方法(5个方法)
- java drawline_如何设置java drawLine画的线的粗细
- vue 处理跨域问题及解决方法小结
- pandas concat “InvalidIndexError: Reindexing only valid with uniquely valued Index objects“
- 华为畅享8plus停产了吗_华为畅享8和Plus哪个好? 华为畅享8 Plus与畅享8区别对比评测...
- 多个excel工作簿合并_Microsoft Excel如何快速合并多个工作簿至一个工作簿中?
- 关于Python中以字母r/R,或字母u/U 开头的字符串
- 英语语言水平C级,国际通用的学生英语能力水平评测标准
- day19 part1:网络安全态势感知
热门文章
- 没钱买珍珠首饰,可以画一个
- kindle 应用程序出错,无法启动选定的应用程序,请重试。问题排查过程及处理方案。...
- 【多模态】MoE解决多模态单双塔问题 VLMo: Unifified Vision-Language Pre-Training with Mixture-of-Modality-Experts
- Linux下使用Vim/Vi给文件加密和解密
- 算法竞赛入门【码蹄集进阶塔335题】(MT2026-2050)
- 骁龙660鸿蒙系统,骁龙660性能解析:对比骁龙653/821胜算几何?
- 常用训练tricks,提升你模型的鲁棒性
- 通过freemaker导出word文档SpringBoot+idea,做成浏览器下载
- 蒲公英服务器搭建小程序,蒲公英 - 文档中心 - 应用上传
- php 两个时间戳相隔小时数,php 计算两个时间戳相隔的时间的函数(小时)_PHP教程...