
今天接着讲下结合ChatGPT个人的一些小实践。
关注我公众号的应该都知道,在最近2年我个人重心放在了知识分享视频的录制上面,单独写长文的时候变少,包括原因我也在前面公众号文章有专门的说明。但是我个人录制视频一般都是直接对着手机录制,不会提前准备文案和草稿,这本身也是对个人表达演讲能力的进一步锻炼。
在录制完视频后,我会将视频导入到快影APP工具,通过自动识别字幕功能进行字幕的识别,在识别完成字幕后还需要对少量识别错误的内容进行手工修改。但是我现在需求是能够将字幕内容导出为一篇完整的文字稿内容,方便我发公众号和头条号的文章。
如果是剪映APP工具,会有一个字幕批量导出的功能,但是快影当前没有这个功能。因此前面有不少的文章我都是重新手工再进行整理和录入。那么能否结合ChatGPT和自然语言编程来实现一个小工具帮我完成上面的工作?
在前面个人已经验证通过的就是通过GPT自动生成一个爬虫程序,将我头条号的文字全部抓取出来,并将每一篇单纯存为一个个的独立的pdf文件。有了这些头条文章,再结合Everything搜索工具,来进一步完善个人本地的离线知识库。
为了完成这个工作,实际我需要先了解清楚通过视频来自动识别字幕的完整步骤。因此一开始我并没有马上告诉GPT帮我实现一个完整的程序。而是要先搞清楚实现该功能的完整步骤究竟是如何的。
因此我给出如下的prompt提示语:
我现在有一个视频文件,我希望将视频文件中的字幕全部提取出来形成一个文本文件,并通过python语言来实现。请分析该问题,给出一个用python语言来实现该功能的步骤分解。
在我给出这个问题后,GPT返回给我详细的实现步骤和逻辑。
a.要将视频文件中的字幕提取为文本文件,可以按照以下步骤进行:
b.安装所需的Python库:pytesseract, cv2, numpy, PIL, moviepy
c.将视频文件读入Python中,可以使用MoviePy库来读入视频文件。
d.对于每一帧视频,将其转换为灰度图像,以便于提取字幕。可以使用OpenCV库来进行图像处理。
e.利用pytesseract库提取灰度图像中的文字。注意,由于视频字幕可能会有不同的颜色、背景等,因此可能需要尝试不同的参数来调整识别的准确率。
f.将提取到的文字写入文本文件。
最后,循环执行步骤3-5,将所有视频帧的字幕提取出来并写入文本文件。
并基于这些步骤给出了代码的参考案例。具体如下:
为何要先问这个问题?
原因就是即使GPT辅助编程,我们也需要了解完整的编程实现逻辑和关键算法。同时在给出具体的代码实现步骤后,你后续才可能做到进一步精确发问,并给出详细的上下文环境背景和具体的参数约束要求。
否则GPT很难给你完整的可使用的完整的源代码。
通过第一个步骤GPT给出的内容,基本就清楚了要识别一个视频里面的字幕内容究竟需要哪些关键的步骤。里面有两个关键点。
其一是将视频的关键帧进行截图
其二是通过OCR组件对视频截图里面的文字进行识别
但是里面仍然会有一些细节点。比如是每一帧都截图还是一个间隔截图,截图下面如何找到你的字幕区域进一步裁剪,包括进行灰度,变换和降噪处理等。这些都需要考虑。
因此接着我给出更详细的需求和prompt描述:
我现在需要将一个视频文件中的所有字幕全部识别出来,形成一个独立的txt文件。具体详细的要求如下。
1. 读入的视频文件,不需要每帧截图,需要按每10帧进行一次视频截图
2. 字幕在视频中的特定区域范围内,你需要预留截图区域坐标给我来补充。截图的时候按这个区域坐标进行截图。
3. 截图需要保存到到当前目录的img子目录下,形成一个个独立的图片文件
4. 字幕区域本身是黑色背景,黄色文字,你需要考虑进行相应的灰度处理或变换处理,去噪处理,方便后续的文字识别。
5. 对于文字识别部分,我准备调用百度的OCR文字识别接口来识别,具体的地址或token等信息你可以预留给我来填写 请帮我用python语言来实现整个完整的程序,并返回具体的源代码给我。
注意这里面有一个中间过程。
就是一开始使用的是一个开源免费的本地OCR识别组件,但是识别的准确度很低。因此我进一步调整了关键词,修改为调用百度OCR接口来进行识别。
当然,在这个之前你还需要首先在百度能力开放平台注册个人账号,并获取相应的accesskey和token信息。
有了上面的描述,GPT可以帮我生成完整的代码。
到了第一个步骤,基本完整的python程序已经实现并可以运行。但是对应截图出来的字幕区域不准确。我个人又不断调整截图区域。
其次我的字幕部分内容是典型的黑色底色,黄色文字。
因此我希望是给定一个区域的色块范围,在这个色块范围内容的颜色才需要保留,其它颜色都应该进行反色变换处理。在这个过程中涉及到了调用opencv库方法实施RGB色系到HSV色系的一个映射,花费了一定的时间进行调整。
在这个过程中进一步和GPT交互进行代码调优。
注意截图区域中只有 RGB(254,233,0) 这个颜色是需要识别的文字,其它颜色都不需要保留或者做反色处理。请按这个需求重新修改代码。我修改下需求,截图区域中采用RGB色系需要保留的颜色范围为。R值在250到255之间,G值在230到235之间,B值在0到5之间。不在这个范围的颜色都不需要保留或者做反色处理。请按这个需求重新修改代码。
但是这个代码优化结果不理想。
更多的还是我自己优化和调整来完成了最终的区域范围和降噪处理。大家可以参考下进行变换和降噪处理后的字幕图片效果如下:
而这个处理后图片才是传递给OCR接口进行文字识别使用的。
整体识别下来看,百度OCR接口的识别准确率也只能是在90%左右。而没法做到100%完全识别。
当前ChatGPT更多还是辅助编程,需要你有一定的技术基础。如果是完全不懂技术要实现独立需求全部代码实现仍然有一定的难度。
但是通过辅助编程至少也可以节约一大半的时间。同时对于你个人原来不熟悉的技术领域,通过GPT编程本身也是一个自我学习,提升自己知识技能的很好的机会。