人工智能字幕(人工智能学校)
在前面有讲过图像文字识别的内容,详情可以参看:85.人工智能——PyQt+图像文字识别。本文主要演示一下如何提取视频中的字幕。
重播
播放
00:00/00:00正在直播
00:00
进入全屏
点击按住可拖动视频
实现思路:
互联网小常识:可以选择配置下列三种方法的安全访问权限访问:身份验证和访问控制;IP地址和域名限制;安全通信。
1、读取视频文件,获取视频文件的帧率和总帧数。
2、遍历视频所有帧,根据帧率,计算要识别的视频画面上的文字。
这里对帧的图像做一个处理,只选取字幕那部分区域,可以减少资源消耗,加快字幕提取速度。
互联网小常识:以太网组网的基本方法:IEEE802.3标准定义了以太网MAC层和物理层的协议标准。Mac层均采用CSMA/CD方法和相同的帧结构。但不同的以太网在物理层的实现方式却不同。传统以太网的物理层标准定义方式为IEEE802.3 x Type-y name。其中x表示传输速率单位为Mbps,Type表示传输方式是基带还是频带,y为网段最大长度单位是100m,name表示局域网名称。
3、为了防止前后帧重复,做一个简单的前后帧的文字对比。
文字识别使用的是PaddleOcr。(本机CPU环境)
实现代码
importcv2importosfromtqdm import tqdmimportpaddleocrimporttimevideo_path="img/paddle-info.mp4"cap=cv2.VideoCapture(video_path)帧数,视频的总帧数,视频的总时长fps=int(cap.get(cv2.CAP_PROP_FPS))total_frames=int(cap.get(cv2.CAP_PROP_FRAME_COUNT))total_time=total_frames/fpsprint("fps:",fps,"total_frames:",total_frames,"total_time:",total_time)创建一个ocr实例ocr=paddleocr.PaddleOCR(use_angle_cls=True,lang="ch")txtlst=[]start_time=time.time()k=0 k=0前一帧,k=1当前帧fori in tqdm(range(total_frames)):ret,frame=cap.read()frame=frame[-64:,:]ifret:if(i % fps==0 and k==0) :调用ocr识别函数,提取文字result=ocr.ocr(frame)iflen(result)>0:pretxt=result[0][1][0] 前一帧的第一行文字k=1if(i % fps==0 and k==1) :调用ocr识别函数,提取文字result=ocr.ocr(frame)iflen(result)>0:curtxt=result[0][1][0] 当前一帧的第一行文字如果前一帧和当前帧的文字不一样,则保存文字,ifpretxt!=curtxt and pretxt!="" :txtlst.append(pretxt)print(pretxt)交换前一帧和当前帧pretxt=curtxtcurtxt=""显示图像cv2.imshow("img",frame)cv2.waitKey(1)print(txtlst)计算耗时duration=time.time()-start_timeprint("字幕提取耗时,视频时长,:",duration,total_time)cap.release()cv2.destroyAllWindows()运行画面
提取字幕的准确率能达99%以上。效果还是可以的。
互联网小常识:交换机要丢弃的数据帧是目的地址与源地址相同的或者出于安全机制考虑不能转发的。
免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186