文章目录

  • 前言
  • 思路
  • 效果如图
  • 实现
    • 第二种方案
    • 第一种方案
    • 第一种方案
  • 中英文翻译
  • 想白嫖中英文翻译?
  • 如何将ocr识别到的没有空格文本正确分割?
  • python截屏

前言

看一些电影,发现只是标注了字幕而没有中文翻译,当然也没有字幕文件,而仅仅是视频上有外文字幕而已
那么能否在看电影的时候让这些字幕自动显示为翻译的中文呢?
当然可以的

思路

总体的方法如下:
1,第一步,将显示字幕的区域截取下来,(如果你看电影会发现字幕总是显示在下面的一个矩形区域里),然后当你看电影的时候,自动识别到矩形框范围内是否有字幕,如果有就自动截取下来,然后将这张图片传到下一步
2,第二步,使用ocr识别,识别出外文字幕,得到外文文本
3,第三步,使用网络翻译接口,将外文文本翻译成中文,得到中文文本后将文本显示在一个半透明的矩形窗口出来在你想要的位置

效果如图


我用一个文本文档里的英文,模拟了字幕出现的位置,然后我将中文翻译显示窗口放到了上面,这样当我看电影的时候,下面出现英文,上面就自动显示中文字幕了,而不需要必须是中文翻译过的电影

实现

抛开实现思路不谈,难点其实就在于ocr对图片的识别上,如果能够对文本精准的复现,翻译效果当然好,但凡错一个字幕,就可能错很多,中文的优越性就出来了,中文自带纠错能力,而英文一个空格,一个字母错了,翻译软件当即就傻了,翻译不出来
这里重复一下思路:
先实现第一步字幕位置截取,非常便捷的是python提供了一个工具包,只需要设定截取的开始坐标和结束坐标就能自动截取并保存图片
第二步ocr识别比较麻烦,因为ocr识别效果比较慢,而且效果通常不理想,比如有时识别到的文本没有空格,这会给翻译带来巨大的麻烦,中文没有空格无所谓,英文没有空格那真是灾难,幸运的是ocr识别的效果现在有神经网络的加持,识别效果已经有了很大提升,只是比较吃电脑配置,配置环境是最令人麻烦的了
第三步,将识别到的文本翻译成中文比较简单,比如使用有道词典的接口就可以了
最后就是将翻译到的中文文本展示在一个窗口上,这一步很简单

当然这里有两份实现方案,
第一种就是我上面说的,先截图,然后ocr识别到文本,然后文本翻译成中文
第二种方案,则是先截图,然后将截图传递到有道的截图翻译接口,直接返回中文
这里先说第二种方案,因为有道的截图翻译太好用了,只需要截图,然后调接口,当然有次数限制

第二种方案

有道截图翻译接口


# -*- coding: utf-8 -*-
import sys
import uuid
import requests
import base64
import hashlib
import json
from imp import reload
import tkinterfrom PIL import ImageGrab
from PIL import Image
reload(sys)YOUDAO_URL = 'https://openapi.youdao.com/ocrtransapi'
APP_KEY = '你申请的有道截图翻译key'
APP_SECRET = '你申请的有道截图翻译secret'
top = tkinter.Tk()
top.title("字幕")
#设定显示字幕的窗口大小,透明度,显示的字体
top.geometry('1200x50+100+0')
top.attributes("-alpha",0.5)
TText= tkinter.Text(top, font=('Arial', 30),  width=50, height=10)
TText.grid(row=1, column=0, rowspan=10, columnspan=10)def truncate(q):if q is None:return Nonesize = len(q)return q if size <= 20 else q[0:10] + str(size) + q[size - 10:size]def encrypt(signStr):hash_algorithm = hashlib.md5()hash_algorithm.update(signStr.encode('utf-8'))return hash_algorithm.hexdigest()def do_request(data):headers = {'Content-Type': 'application/x-www-form-urlencoded'}return requests.post(YOUDAO_URL, data=data, headers=headers)def connect(src):TText.delete(1.0,'end')f = open(src, 'rb')  # 二进制方式打开图文件q = base64.b64encode(f.read()).decode('utf-8')  # 读取文件内容,转换为base64编码f.close()data = {}data['from'] = 'auto'data['to'] = 'zh-CHS'data['type'] = '1'data['q'] = qsalt = str(uuid.uuid1())signStr = APP_KEY + q + salt + APP_SECRETsign = encrypt(signStr)data['appKey'] = APP_KEYdata['salt'] = saltdata['sign'] = signresponse = do_request(data)print(response.content)print(json.loads(response.content))a=json.loads(response.content)['resRegions']myresult=""for i in a:myresult=myresult+ i['tranContent']TText.insert(1.0, myresult)
def do():#截图放置的路径src = r"C:\\Users\\Administrator.DESKTOP-KMH7HN6\\Downloads\\imge_temp\\1.jpg"#截图坐标的起始位置im = ImageGrab.grab((204, 603, 1270, 759))im.save(src, 'JPEG')connect(src)
btton=tkinter.Button(top, text="识别", width=10,command=do)  # 调用内部方法  加()为直接调用
btton.grid(row=1, column=900)
# do()
top.mainloop()

第一种方案

这里的ocr识别,使用的是easyocr工具包
实际效果不理想,我仅仅是测试了一下它对文本的识别效果,非常失望
背景如果是纯色还行,稍微复杂的背景,识别特别垃圾
纯色背景比如pdf文本识别还是可行的,配置环境看

https://zhuanlan.zhihu.com/p/342686109
# 导入easyocr
import easyocr
# 创建reader对象
reader = easyocr.Reader(['ch_sim','en'])
# 读取图像
result = reader.readtext("C:\\Users\\Administrator.DESKTOP-KMH7HN6\\Downloads\\imge_temp\\1.png")
# 结果
print(result)

第一种方案

我尝试了其他ocr识别工具包pytesseract
传说有神经网络加持,效果非常好,我配置了半天环境,识别出来的效果非常失望
背景如果是纯色还行,稍微复杂的背景,识别特别垃圾
不过,如果你想识别pdf的文本,那这个就对了
具体的配置链接看

https://zeroingpython.top/python%e7%9f%a5%e8%af%86%e5%88%86%e4%ba%ab/%e4%b8%80%e4%b8%aa-python-%e5%8c%85-pytesseract-%ef%bc%8c%e5%87%a0%e8%a1%8c%e4%bb%a3%e7%a0%81%e5%8f%af%e5%ae%9e%e7%8e%b0-ocr-%e6%96%87%e6%9c%ac%e8%af%86%e5%88%ab%e6%8a%80%e6%9c%af%ef%bc%81/90/
import pytesseract
import cv2
img_path = "C:\\Users\\Administrator.DESKTOP-KMH7HN6\\Downloads\\imge_temp\\1.png"
# 下面一行代码很重要
tessdata_dir_config = '--tessdata-dir "C://my_software//python_ocr//tessdata"'
im = cv2.imread(img_path)
img = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)
text = pytesseract.image_to_string(img, lang='eng', config=tessdata_dir_config, )
print(text)

测试下来,还是有道香

中英文翻译

我就不重新造轮子了,配置看

https://blog.csdn.net/weixin_38819889/article/details/103602436

想白嫖中英文翻译?

看轮子

https://blog.csdn.net/hujingshuang/article/details/80177784

如何将ocr识别到的没有空格文本正确分割?

看轮子

https://blog.csdn.net/u012052268/article/details/79402474

python截屏

看轮子

https://blog.csdn.net/a180736/article/details/79159859

你抄我,我抄你,大家甜蜜蜜

工具-python实现电影字幕的自动翻译相关推荐

  1. 基于图像识别和文字识别用 Python 提取视频字幕

    基于图像识别和文字识别用 Python 提取视频字幕 本文介绍使用 Python 基于图像识别提取视频中的字幕,并使用文字识别将字幕转为纯文本.本文以权力的游戏第一季第一集作为示例. 本文主要使用 O ...

  2. 将电影字幕整理后,便于打印学习

    将电影字幕整理后,便于打印学习 看电影学英语 看电影学英语 电影字幕可以从网上下载scr文件,下载后便于学习.但是对于孩子,总看计算机也不好,因此需要将字幕打印下来.如果直接打印scr文件,则文件相当 ...

  3. Python豆瓣电影评论的爬取及词云显示

    Python豆瓣电影评论的爬取及词云显示 课程设计论文链接 前言 开发工具.核心库 系统相关技术介绍 系统分析与设计 系统功能模块组成 实现功能和目标 爬取模块设计 爬取过程中下一页的处理 窗口界面设 ...

  4. python怎么加字幕_Python如何实现字幕挂载 Python实现字幕挂载代码示例

    Python如何实现字幕挂载?本篇文章小编给大家分享一下Python实现字幕挂载代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 本文在Wind ...

  5. python模块管理工具,Python的包管理工具

    Python的包管理工具 python包管理工具 python包管理工具简介 distribute是setuptools的取代,pip是easy_install的取代. Distribute是对标准库 ...

  6. 简易画图工具(Python)

    简易画图工具(Python) 小黑最近在努力的入门python,正好学习到了Python的tkinker模块下的Canvas(画布)和Button(按钮)再加上相应的事务管理,实现了一个简单的画图小工 ...

  7. 基于python 的电影票房可视化系统

    一.介绍 电影票房可视化系统是一个实时分析电影票房的系统,应用Python爬虫.Flask框架.Echarts等技术实现. 二.系统运行图 首页 实时票房排名 票房排行top10 电影类型票房占有率 ...

  8. Unity3D仿电影字幕

    这段时间在做一个项目,中间用到了电影字幕的这个功能.所以就稍微研究了一下. 在此把初期的思路分享给大家.上图. 1.运行时效果 2.Txt 配置格式 代码:Subtitles.cs using Uni ...

  9. 黑客攻击无孔不入:连电影字幕都能被入侵

    北京时间5月26日消息,如果你用Popcorn Time播放器或者其它相似的服务观看电影,上面可能会有字幕,这些字幕可能会给你的计算机.多媒体设备带来麻烦. Check Point软件技术公司在报告中 ...

  10. python电影推荐算法_基于Python的电影推荐算法

    原标题:基于Python的电影推荐算法 第一步:收集和清洗数据 数据链接:https://grouplens.org/datasets/movielens/ 下载文件:ml-latest-small ...

最新文章

  1. 5分钟带你读懂“语音识别”工作原理
  2. JAVA SE学习day_01:API、文档注释规范、String字符串的常用API
  3. top99 slam
  4. OPC通信原理在数采中的应用
  5. ABAP和Java的destination和JNDI
  6. HTML打开网页拒绝访问,192.168.1.1拒绝访问怎么办?
  7. python二维数组排序_Python实现二维数组按照某行或列排序的方法【numpy lexsort】...
  8. 的ui在vs中显示没有成员_在电脑桌面使用敬业签团队便签怎么设置新增内容在上面显示?...
  9. 头顶距离顶部百分比_近距离接触COLMO子母太空舱洗衣机:“真分区洗”应该什么样...
  10. Python 数据结构与算法——选择排序(迭代版、递归版)
  11. Jeecg Boot 2.2.1 版本发布,基于SpringBoot的低代码平台
  12. K3 Cloud 数据库查询表常用语句
  13. 视频分辨率过高,导致部分手机播放失败
  14. 学一点Wi-Fi:Roaming
  15. during怎么念_during怎么读音英语 during中文谐音
  16. 为硬件保留的存储空间怎么释放出来?
  17. 深入 javascript 之 call函数 用法
  18. c语言编写消防车声音程序教程,51单片机蜂鸣器模拟救护车消防车等各种报警喇叭声音的学习源代码...
  19. Hive报错:Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask MapReduce
  20. AES加密算法及演示程序(GO-算法核心实现+Python-前端演示系统)

热门文章

  1. Vue框架Element UI教程
  2. GlobalMapper20提取点位的高程信息
  3. 四川音乐学院计算机音乐创作,川音电子音乐系教师作品、论文入选2019国际计算机年会(ICMC)...
  4. 通达信 c 语言,通达信C
  5. 药品计算机培训计划,_计算机培训学习计划范文
  6. 分享这位的WPF界面设计系列视频
  7. 质性数据分析软件NVivo的安装选项和参数
  8. UnitedPlugins发布终极Bass效果器:QuickBass
  9. 高级JAVA开发 分布式系统部分
  10. centos7 安装 dos2unix