python多进程海量视频提取帧图片
发布日期:2021-06-29 18:19:15
浏览次数:2
分类:技术文章
本文共 2831 字,大约阅读时间需要 9 分钟。
视频提取帧图片
- 多个视频同时处理
- 跳帧保存图片
- 限制进程数防止系统崩溃
- 一键设置视频目录自动获取全部视频并提取帧图片。
- CPU打满,系统不卡顿。
源码
#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:CXKimport cv2,os,timefrom multiprocessing import Processfrom multiprocessing import Pool def GetNameByEveryDir(file_dir,videoProperty): """[summary] Args: file_dir ([type]): [文件路径] videoProperty ([type]): [文件类型] Returns: [type]: [文件名列表,文件路径列表,文件夹列表] """ FileNameWithPath = [] FileName = [] FileDir = [] for root, dirs, files in os.walk(file_dir): for file in files: if os.path.splitext(file)[1] in videoProperty: FileNameWithPath.append(os.path.join(root, file)) # 保存图片路径 FileName.append(file) # 保存图片名称 FileDir.append(root[len(file_dir):]) # 保存图片所在文件夹 return FileName,FileNameWithPath,FileDirdef video_to_omg(file_name,file_name_with_path,img_save_dir,count): """[summary] Args: file_name ([type]): 视频文件名 file_name_with_path ([type]): 视频文件路径 img_save_dir ([type]): 图片保存路径 count ([int]): 1秒几张图片 """ print('Child process %s (%s)Running...' %(file_name,os.getpid())) videoLeftUp = cv2.VideoCapture(file_name_with_path) fps = videoLeftUp.get(cv2.CAP_PROP_FPS) count=int(fps/count) #帧率,用于跳帧处理 count_img=0 while (videoLeftUp.isOpened()): retLeftUp, frameLeftUp = videoLeftUp.read() if retLeftUp: count_img+=1 if count_img%count==0: # cv2.imshow(FileNameWithPath[j], frameLeftUp) img_name=img_save_dir+os.sep+file_name[:-4]+"_"+str(count_img)+".jpg" # print(img_name) cv2.imwrite(img_name,frameLeftUp) else: break count_img=0 videoLeftUp.release() print('Child process %s (%s)Stoping...' %(file_name,os.getpid()))if __name__ == '__main__': time_time=time.time() root_dir='X:\\lane_detect\\train_data\\2020.11.11\lane_3min\\' FileName,FileNameWithPath,FileDir = GetNameByEveryDir(root_dir,'.mp4') #设置进程池 最多10个进程 p = Pool(10) # print(len(FileNameWithPath)) #20sec : 18378 # 多线程写入图片 for j in range(len(FileNameWithPath)): try: #保存图片文件夹名 默认视频文件夹下的视频名文件夹 img_save_dir=root_dir+FileName[j][:-4] if not os.path.exists(img_save_dir): os.makedirs(img_save_dir) #多进程 未限制进程数 # p=Process(target=video_to_omg,args=(FileName[j],FileNameWithPath[j],img_save_dir,5)) # p.start() #限制进程数 p.apply_async(video_to_omg,args=(FileName[j],FileNameWithPath[j],img_save_dir,3)) except Exception as e: print(e) p.close() p.join() print("inference time: {} s".format(round(time.time() - time_time, 4)))
进程运行截图
详细动图
转载地址:https://cxk-life.blog.csdn.net/article/details/109615740 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月07日 01时42分27秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
leetcode 面试题 17.16. 按摩师
2019-04-30
leetcode 892. 三维形体的表面积
2019-04-30
leetcode 999. 车的可用捕获量
2019-04-30
leetcode 914. 卡牌分组
2019-04-30
Django实现一个简单的图书管理系统
2019-04-30
python 获取列表中最大的K的数以及它们的下标,包含重复数字情况
2019-04-30
python 爬取猫眼TOP100
2019-04-30
django中引入bootstrap
2019-04-30
python递归逆置一条单链表详解
2019-04-30
326. 3的幂
2019-04-30
推广一下自己的Github仓库
2019-04-30
从IMDB上爬取MovieLens数据集中的详细电影信息
2019-04-30
三道计算时间复杂度的题目
2019-04-30
n sum 问题总结
2019-04-30
peak finding 问题
2019-04-30
leetcode上的peak finding问题汇总
2019-04-30
二分总结
2019-04-30
leetcode 双调查找相关题目
2019-04-30
洗牌算法
2019-04-30