一、故事情节

是这样子的,女朋友晚上突然翻到了自己喜欢看的一个电影,但是没有字幕,这让她很苦恼。

我急中生智,紧急的解决了我女朋友的需求。不然还真不能上床睡觉

想到了使用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

完整项目代码获取点这

女朋友看电影没字幕,让我想办法搞定!谁让我是程序员呢!相关推荐

  1. 计算机一级字幕设置,字幕怎么用-看电影没字幕怕什么!老司机教你手动设置字幕!...

    由于现在的高清电影越来越多,而且很多是没有字幕的,所以很有必要做一个手动设置字幕的教程了这次我把Z3和Z4两个版本的手动设置字幕的方法都讲解一下. 当你下载了一个高清电影,但没有字幕的情况,你可以去网 ...

  2. 家里没网怎么在电脑上看电影玩游戏?教你一招搞定

    家里断网了想在电脑上看电影.玩游戏怎么办?断网是我们日常生活中常常会遇到的问题,这个时候通常只有手机流量可以用.今天教你最简单的方法,无需电脑联网,就可以把手机小屏变电脑大屏,电脑操作无压力. 1.首 ...

  3. 女朋友生日java程序_★★女朋友要过生日了!我想用java为她写一个程序,一举两得啊! 希望大家多提建议啊!谢谢!!!...

    女朋友要过生日了,我想用java为她写一个程序,所以想请教大家,  希望大家给我出出点子, 同时手头有3D  等漂亮图形的java程序或其他一些特效的文字,图形java程序,都希望大家多提供,  多帮 ...

  4. 想要成为一名优秀的程序员,这十八招必看

    文章目录 第一招:速学能力 第二招:理解能力 第三招:编程能力 第四招:使用能力 第五招:编码能力 第六招:注释能力 第七招:思维能力 第八招:英语能力 第九招:学习能力 第十招:思考能力 第十一招: ...

  5. 漫画:我是程序员,总想打测试工程师怎么办?

    轻友们大家好~我是珍妮兔,一只工程效率顾问.我的日常生活是和不同的软件研发团队聊天,给大家分享各种轻松把软件做好的最佳实践.如果你有特别想要解决的问题,不妨加我的个人微信:jenny1652告诉我. ...

  6. 那些想不断提高自己技术水平的Java程序员们

    对程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Jav ...

  7. 假如你想成为一名测试工程师(程序员找茬师)

    假如你想成为一名测试工程师(程序员找茬师) 先扯点虚的 测试工程师是个啥? 设计用例 常说的那些个口头语 练好招数 先扯点虚的 大学扩招,经济下行,疫情肆虐... 从小到大,我们经历了无数的考试,打怪 ...

  8. 知乎热议:27岁没文凭、想自学编程,有机会成为程序员吗?互联网风口一去不复返了吗?

    缘起 前段时间在知乎里看到了一个问题,感慨万千,拿出来给大家分享分享,希望可以抛砖引玉给大家一点启发. 问题大家已经从文章的标题里看到了:一个27岁没文凭,想去努力自学编程,有机会成为程序员吗? 而问 ...

  9. 知乎热议:27岁没文凭、想自学编程,有机会成为程序员吗?互联网风口一去不复返了?

    缘起 前段时间在知乎里看到了一个问题,感慨万千,拿出来给大家分享分享,希望可以抛砖引玉给大家一点启发. 问题大家已经从文章的标题里看到了:一个27岁没文凭,想去努力自学编程,有机会成为程序员吗? 而问 ...

最新文章

  1. 2012 iis php mysql_Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建wordpress博客教程
  2. 使用Java让android手机自动执行重复重启
  3. lua学习笔记之函数
  4. tomcat8.5 远程访问 manager页面
  5. Javascript实现导航锚点滚动效果实例
  6. mysql查看数据倾斜_深入理解hadoop数据倾斜
  7. 最新小白详细描述在centos7.5上安装python3并使用Nginx+virtualenv+supervisor来部署tornado项目(整理集合结合实际)系列1
  8. 代码实现识别部分截图在整张图片中的位置_基于神经网络的OCR识别
  9. 2019-11-20 c语言参考手册
  10. position学习终结者(一)
  11. GitHub的提醒邮件改进
  12. win10计算机管理字体糊,win10字体发虚模糊正确解决方法(5个方法)
  13. java drawline_如何设置java drawLine画的线的粗细
  14. vue 处理跨域问题及解决方法小结
  15. pandas concat “InvalidIndexError: Reindexing only valid with uniquely valued Index objects“
  16. 华为畅享8plus停产了吗_华为畅享8和Plus哪个好? 华为畅享8 Plus与畅享8区别对比评测...
  17. 多个excel工作簿合并_Microsoft Excel如何快速合并多个工作簿至一个工作簿中?
  18. 关于Python中以字母r/R,或字母u/U 开头的字符串
  19. 英语语言水平C级,国际通用的学生英语能力水平评测标准
  20. day19 part1:网络安全态势感知

热门文章

  1. 没钱买珍珠首饰,可以画一个
  2. kindle 应用程序出错,无法启动选定的应用程序,请重试。问题排查过程及处理方案。...
  3. 【多模态】MoE解决多模态单双塔问题 VLMo: Unifified Vision-Language Pre-Training with Mixture-of-Modality-Experts
  4. Linux下使用Vim/Vi给文件加密和解密
  5. 算法竞赛入门【码蹄集进阶塔335题】(MT2026-2050)
  6. 骁龙660鸿蒙系统,骁龙660性能解析:对比骁龙653/821胜算几何?
  7. 常用训练tricks,提升你模型的鲁棒性
  8. 通过freemaker导出word文档SpringBoot+idea,做成浏览器下载
  9. 蒲公英服务器搭建小程序,蒲公英 - 文档中心 - 应用上传
  10. php 两个时间戳相隔小时数,php 计算两个时间戳相隔的时间的函数(小时)_PHP教程...