Skip to content

P3-【开源自制】字幕提取器-OCR版-1.0,文案提取不再烦恼!

P3-【开源自制】字幕提取器-OCR版-1.0,文案提取不再烦恼!

在网上搜寻了开源的OCR开源产品后尝试了easyocr,直接使用随便截取的一行字幕识别,输出结果竟然是

python
Neither CUDA nor MPS are available - defaulting to CPU. Note: This module is much faster with a GPU.
[([[20, 20], [703, 20], [703, 93], [20, 93]], '困d硪觉得}的东酉才最牛逼', 3.7110098659953676e-05)]

不知道是不是因为使用的是cpu的原因,但是使用QQ截图的OCR和网页版的pearOCR一次就识别正确了。https://pearocr.com/#/

所以有去寻找别的方案。寻找的过程就是下载下来识别一下,出错就不说了,直接放弃。

找了几个模型自己运行跑出来的结果都惨不忍睹,用QQ截图,微信截图,和网页的都可以识别正确。

最终是在一个交流群中一位大哥给了我一个仓库链接,仓库是找到了微信的OCR接口。

试用了下确实能运行并且效果挺好。所以直接锁定这种方案开始写代码。

首先是想业务逻辑,这并不是一个简单的事情,比如识别出一个视频的字幕,多个视频自动化又该如何实现,

处理的过程中如果出错了是不是要重新开始,如果在中间一步骤开始如何实现。

然后经我冷静思考一下,我想那么多东西干什么啊,那不是杞人忧天吗,按照步骤来不让过程中出错不就好了。

于是就写了视频抽帧,剪裁字幕,识别字幕的函数,后来又发现识别出来的字幕还有一种可能,就是字幕区域还有其他的文字。

不过不用担心,一般的视频不是全部录屏的话,不会有那么多文字可以识别。只有我这种敲代码类型,那片区域字多点。

但是特殊情况不难处理的话还是要处理下,毕竟计算下文字出现的中心区域即可。

但是又转念一想,我们可以直接计算出每一个文字识别区域的宽度,然后降序排列,那麽数组中第一个最可能是我们的字幕,因为我们的字幕肯定是屏幕中最大的字。这个时候我们就只用判断识别结果数组中第一个元素,也就是最宽的文字区域是不是位于屏幕中间,由此判断是否是真正的字幕。

这样处理的话最后我们会得到这样的数组,【1,1,2,3,3,3,4,5,6,6,7】

因为不一定一句话只会说一秒钟,如果那句话的时间持续足够长的话就会出现多次。也就是去重。

WARNING

大家好这一集我们来看,大家好这一集我们来看,如何做出这样~个炫酷的充值按钮,如何做出这样~个炫酷的充值按钮,如何做出这样下个炫酷的值按钮,如何做出这样下个炫酷的值按钮,就是他可以任这里一闪警认,就是他可]以任这里~一闪一认,我们的软件可以做的不好看,我们的软件可以做的不好看,我们的软件可以做的不好看,日是我们的充值按钮,和我们的充值过程,这体验心须要做好,这体验心须要做好,这里看到我们定义下Ctrl,这里看到我们定义下Ctrl,然后我们定义了计时器,调用这个VIPTIMER的丽数,调用这个VIPTIMER的丽数,调用这个VIPTIMER的丽数,文Cctrl是奇数还是偶数,文Nctrl是奇数还是偶数,文Nctrl是奇数还是偶数,如果运是奇数的话,我们就将巴的背景改成这个颜色,我们就将巴的背景改成这个颜色,我们就将巴的背景改成这个颜色,然后每次Ctrl加,这样就实现了它的背景不不停的闪烁,这样就实现了它的背景不不停的闪烁,这样就实现了它的背景不不停的闪烁

DANGER

大家好这一集我们来看

大家好这一集我们来看

如何做出这样~个炫酷的充值按钮

如何做出这样~个炫酷的充值按钮

如何做出这样下个炫酷的值按钮

如何做出这样下个炫酷的值按钮

就是他可以任这里一闪警认

就是他可]以任这里~一闪一认

我们的软件可以做的不好看

我们的软件可以做的不好看

我们的软件可以做的不好看

日是我们的充值按钮

和我们的充值过程

这体验心须要做好

这体验心须要做好

这里看到我们定义下Ctrl

这里看到我们定义下Ctrl

然后我们定义了计时器

调用这个VIPTIMER的丽数

调用这个VIPTIMER的丽数

调用这个VIPTIMER的丽数

文Cctrl是奇数还是偶数

文Nctrl是奇数还是偶数

文Nctrl是奇数还是偶数

如果运是奇数的话

我们就将巴的背景改成这个颜色

我们就将巴的背景改成这个颜色

我们就将巴的背景改成这个颜色

然后每次Ctrl加

这样就实现了它的背景不不停的闪烁

这样就实现了它的背景不不停的闪烁

这样就实现了它的背景不不停的闪烁

大家好这一集我们来看,如何做出这样~个炫酷的充值按钮,如何做出这样下个炫酷的值按钮,就是他可以任这里一闪警认,就是他可]以任这里~一闪一认,我们的软件可以做的不好看,日是我们的充值按钮,和我们的充值过程,这体验心须要做好,这里看到我们定义下Ctrl,然后我们定义了计时器,调用这个VIPTIMER的丽数,文Cctrl是奇数还是偶数,文Nctrl是奇数还是偶数,如果运是奇数的话,我们就将巴的背景改成这个颜色,然后每次Ctrl加

进程已结束,退出代码0

写个小算法去下重。开干。

:::success 大家好这一集我们来看,如何做出这样~个炫酷的充值按钮,如何做出这样下个炫酷的值按钮,就是他可以任这里一闪警认,就是他可]以任这里~一闪一认,我们的软件可以做的不好看,日是我们的充值按钮,和我们的充值过程,这体验心须要做好,这里看到我们定义下Ctrl,然后我们定义了计时器,调用这个VIPTIMER的丽数,文Cctrl是奇数还是偶数,文Nctrl是奇数还是偶数,如果运是奇数的话,我们就将巴的背景改成这个颜色,然后每次Ctrl加,这样就实现了它的背景不不停的闪烁

:::

逐步代码写好后合并,加到GUI界面上。

理想很丰满,自动化,批量化,但是感觉需求很复杂,比如需要录入字幕的区间,就导致视频抽帧与后续的操作要隔离开来。

后来退而求其次,只处理一个,还是屎山代码。

但是,但是,它能跑。

再找个自我安慰的理由:软件不能做太好,做太好接口不给用了就不好了。所以,暂时先留下这一个小缺陷。

但是,难实现的是这个界面和操作变得丝滑顺畅的逻辑。并不是代码过程,分布处理的函数都写好了。直接放出来。

懂代码的可以自主封装,修改下路径就好了,可以用了。

好消息,好消息,bgm,喜庆

视频字幕提取器1.0上线了。

支持单个视频的字幕提取。

但是依然有很多不足,比如不支持批量自动化提取。就连现在的单个视频提取过程都被分成了两个步骤。

但是,up我又何尝不想把最好的一下做出来给大家呢。

感觉这个产品的业务有点复杂。我这种完美主义者总是有点纠结,想着更好的方案做给大家。

于是,我一不做二不休,干脆先做个基础班大家先用着。我再去慢慢打磨一个完美版的。

但是,大家不要觉得遗憾。其实这个过程的每个流程几个函数全部都已经实现。主要是界面上,用户的操作流程我还没有梳理太清楚。有一定代码基础的同学可以拿到代码后自行拼接使用。

也许我们在路上,哪怕逆着光,也要向前。

欢乐斗地主输掉的bgm。

继手写文字图片生成器,纯色图片生成器,渐变图片生成器,自我介绍生成器之后,我的又一力作诞生了,视频字幕提取器。

自我感觉效果特别好,实现的逻辑特别清晰,一个个逻辑推理的闭环最终导向了软件的必定成功。

为了防止大家下次一定,为了监督大家为我三连,所以三连截图后获取软件及完整代码,点赞过一百直接开源。

五星上将bgm,

哪朵玫瑰没有荆棘。

好消息,好消息,开源自制软件,字幕提取器-OCR版-1.0,来啦,来啦,它来啦。

你还在苦恼不能得到喜欢视频的文案吗?

你还在不停暂停视频来抄录文案吗?

字母提取器来了,统统闪开。

首先选择一个视频,输入字幕的高度区间,喝一杯茶的功夫,视频文案就拿到了。

好了,好消息结束了,坏消息来了。

由于这只是字幕提取器1.0版本,因此还有很多功能还不支持。

比如不支持批量化视频处理,不支持自动化一键完成。

但是,up我又何尝不想把最好的一下做出来给大家呢。我甚至恨不得直接让大家选择视频就可以输出文案。

但是,这个业务场景有些复杂。

那么,为什么没有实现

比如,我们选择了视频,可以进行抽帧操作,但是字母裁剪的操作必须要知道字幕的高度区间,但是要想知道字幕的高度区间必须要在抽帧操作之后,甚至这个时候你还需要打开你的ps来测量一下高度区间。

然后才能开始后续的操作。

不过还好,整个过程只被分成了个步骤。

那为什么没有实现批量化呢?

如果我们要处理多个视频,视频抽帧肯定没有问题,但是字幕的高度区间如果视频宽高不一致的话,这个处理也会出问题。

总不能嘎嘎选了一堆视频,最后处理好了发现有的视频高度区间出错了。

所以我想着能否做出一个为每个视频设置字幕高度区间的功能。

不知大家有没有好的想法,可以在评论区一起探讨一下。

功能是做不完的,我这种完美主义者总是有点纠结,想着更好的方案做给大家。

于是,我一不做二不休,干脆先做个基础班大家先用着。我再去慢慢打磨一个完美版的。

但是,大家不要觉得遗憾。其实这个过程的每个流程几个函数全部都已经实现。主要是界面上,用户的操作流程我还没有梳理太清楚。有一定代码基础的同学可以拿到代码后自行拼接使用。

下面介绍一下我的开发过程,软件的业务流程与使用方法和效果。

首先我们来到了软件的实际运行界面,我们选择一个视频文件,然后点击视频抽帧按钮就可以开始这样的操作了。这里我们选择了一个5分钟多的视频测试一下运行时间。

可以看到301张图片,刚好对应每秒一张,5乘以60等于300。

其实两大步骤中只有这一步视频抽帧最耗时间。最后我们可以看到消耗了9分钟多。然后我们量出字母的高度后,我这里已经测量出来了。然后点击后续按钮,就会进行后续的处理。

这里可以看到后续处理很快啊。只花了一分多钟。

然后我们把文案复制出来看看效果,有些不准确的地方是因为我自己的视频,我的字幕没有修改。

我这做小本生意的,也不敢拿别人的视频测试,别再收到律师函了。

待改进实现的方面:

    * 批量化自动化处理
    * 单独线程处理任务而不是单线程

大家好这一期我们来看一下pyinstaller,这个工具该如何使用啊,成为一个可]执行程序的,打包之后呢,我们在没有python环境中的电脑,也可人应用我们时python脚本,协可人应用我们时python脚本,嗯他打包的话就直接使用命令行,辆八我们的的 pyinstaller,输八我们的的 pyinstaller,然后输八几个套数,这几个参数分别代表什么的,比如说我们可]以-C,就是命令行运行,不使用GUI,就是我们输入-c啊,如果我们要使用GUI程序的话,就是不使用这个控制行,我们使用-W,也就说这两个选项,-C利-w我们选一,然后剩下的呢,你可以-F,就是打包之后,我们只有一个软件,而不是多个,就是多个脚本啊,一股不建议这种,因为这种可能他运行速度比较慢,因为他是单程序啊,然后-p这些一股都用不到,我也没用到过,然后·呢,然后后面跟一个文图标文件,就可]以将我们打包后的程序的图标,改成那个图标,然后这里呢,我们有两亏了两种,两个脚本,这个呢没有使用GUI程,没有用到GUI,我们直接就是直接从命令行输入啊,我们的输八长度小于2的时候,我们可以直接会直接输出他的你好,然后可以试看打爆他,我们直接点开我们的终端,在终端中输厂,我们这个已经与好了,这个就是无命令行的和有命令行,我们的第一种没有GUI,只能使用命令行,所以我们使用,c 就是使用命令行,那么就直接复制亡,然后一个回车键,运就开始打包程序了,我们这个文件夹它会多出两个,两个文件夹一个是build和一个dist,两午文件来一个是build利一个dist,build是我们打包过程中,产生的中间文件,密存储在这个里面,运存储在这个里面,我们要看的是dist,采在打包成功之后呢,等二天我们等运打包成功之忙,等一我们等之打包成功之片,我们点开,发现民多了一个hello的文件夹,我们发现,指定个图标,我们程序的图标就变成了这个图标,然后我们双击亡,二就会快速的运行,然后消失掉,其实这个使用方法是不正确的,我们正确的使用方法是,在这里命令行输CMD,在这里命令行输入CMD,三然后我们输入我们版本的名字,苏后可以直接按佳tb建补全,再拉回车啊,然后宣就会输出我们时的,输出我们的程序,当然因为为我们是仅有那种接口,就可以自定义输入的,XM毒风以鲜,那是不是就说唉,hello WX,首先这一种昵是没有GU,哎首先这一种呢是没有GU,盛哎首先这一种呢是没有GUI,二的界面然后我们来看一下有GUI的,我们运行之先看一下效果,黑发现运是有个这样的资口对吧,那我们现在将亡打包一下哎,那我们现往将亡打包一下哎,二无有GUI时我们是使用无命令行的,然后呢直接在这里命令行,然后他就开始了,给我们这下GUlhello的打包,然后打包之后呢,勋是我们的GUIhello文件夹,不后我们就发现生成了这样的文件,我们就可以直接双击这个exe文件,然后运就会运行程序,*但是我们发现哎,这里的图标运不是我们的图标,因为我们的,之使用的是相对路径,但是我们打包的时候,没有将这个图标打包进来,所以说昵,我们需要将这个图标,给运复制进那个文件夹,这个时候我们再运行程序收,翼图标是不是就变成我们的图标了呀,这就是GUI,我们如果你可能有一些静态文件夹,他没有打包进来,蒸你将那些静态文件夹给他拖进来,然后使用的话,命名成你想要的名字,然后别人在没有拍摄环境的计算机上,直接运行这个程序

总结介绍:

过程分为了两步,从视频中抽出图片,再裁剪图片再识别字幕,然后就有了结果

麻烦的是被拆成了两部不能一步到位。

并且很大可能第一步的耗时来源于完整图片保存到本地,所以第一部的速度很大可能会取决于你的视频像素。我使用的提取4k视频,电脑配置就是小笔记本办公本,提取速度就慢点,第一部时间差不多用了视频时间的两倍,进步空间很大,并且后续准备横板视频直接截取视频下方区域,竖版视频没有办法,所以只能还是分两步。

本站收录内容源自互联网,不对其网站内容或交易负责。 | 如有内容侵犯权益,请联系站长删除相关内容!