一行代码快速图像识别~一排代码搞定视频识别
一个有趣的灵魂W
一行代码能干嘛?这种噱头式的开头现在估计已经不香了。。。我只能在别人挖好的土堆上再刨一铲子。
没错,咱们用的是Python,一行代码它就是能干很多事。用别人封装好的第三方库,我们可以用一行代码傻瓜式调用,干许多大事。
今天我们将使用一行代码实现深度学习里的图像识别,再将图像识别拓展到视频~进行视频流的物体识别。
我们将用到pixellib库和mask_rcnn_coco.h5这个训练好的模型。其中pixellib这个库可以非常简单的实现图像分割。我们可以利用pip install进行安装。github的开源地址为:
https://github.com/ayoolaolafenwa/PixelLib
然后你还需要下载mask_rcnn_coco.h5这个训练好的模型~
下载地址在文末~
关于模型,我就不做过多介绍啦,有兴趣可以自行搜索。
好了,当你跟我一样把所有准备工作都完善了之后,我们就开始后续的步骤吧。。。
哦对了,请自行准备一个小视频。
啊----不,是小小的视频
让我们开始吧:
import cv2
vc = cv2.VideoCapture("D:/b/2.mp4") # 设置视频位置
c = 1
if vc.isOpened():
rval, frame = vc.read()
else:
rval = False
timeF = 1 # 设置帧数
while rval:
rval, frame =vc.read()
if(c%timeF==0):
cv2.imwrite('D:/b/mp4/'+ str(c)+'.jpg',frame) # 设置图片存储的位置
c=c+1
cv2.waitKey(1)
vc.release()
import pixellib
import os
from pixellib.instance import instance_segmentation
segment_image = instance_segmentation()
segment_image.load_model('D:/b/mask_rcnn_coco.h5')###运行过才知道h5是训练好的模型,需要单独下载
path='D:/b/mp4'
inf=os.listdir('D:/b/mp4')
inf.sort(key=lambda x:int(x[:-4]))
for i in range(len(inf)):
segment_image.segmentImage('D:/b/mp4/'+inf[i], output_image_name = 'D:/b/newmp4/'+inf[i], show_bboxes = True)
#原视频图片和新视频图片合并
path='D:/b/mp4'
path2='D:/b/newmp4'
inf=os.listdir(path)
inf2=os.listdir(path2)
inf.sort(key=lambda x:int(x[:-4]))
inf2.sort(key=lambda x:int(x[:-4]))
for i in range(len(inf)):
a=cv2.imread(path+'/'+inf[i])
b=cv2.imread(path2+'/'+inf2[i])
c=np.column_stack((a,b))
cv2.imwrite('D:/b/new2/'+inf[i],c)
# 图片合成视频
filelist = os.listdir('D:/b/new2') #获取该目录下的所有文件名
filelist.sort(key=lambda x:int(x[:-4]))
fps = 24
size=(640,240)
file_path ='D:/b/5.mp4'#导出路径
fourcc = cv2.VideoWriter_fourcc('D', 'I', 'V', 'X')#不同视频编码对应不同视频格式(例:'I','4','2','0' 对应avi格式)
video = cv2.VideoWriter( file_path, fourcc, fps, size )
for item in filelist:
item = 'D:/b/new2/' + item
img = cv2.imread(item) #使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR ,注意是BGR,通道值默认范围0-255。
video.write(img) #把图片写进视频
video.release() #释放
哦霍霍~下面是结果的视频。。。http://mpvideo.qpic.cn/0bf2taaacaaa7qaht6gucrpfbggdagmaaaia.f10004.mp4?dis_k=9677c98b10a9491f840d21bb18772cb5&dis_t=1600158599
关注公众号,回复关键词 rcnn
就可以下载模型了。
另外,模型下载如果速度较慢~可以参考这个工具:
用这个工具下百度网盘文件,简直飞起 F君的小尾巴,公众号:一个有趣的灵魂W百度网盘下载很慢吧,Pandownload之后的新工具-亿寻
打完收工!往期
最新版中国范围路网数据来啦(OpenStreet Map,OSM)
python调用cmd运行GDAL报错解决:ERROR 1: PROJ
利用python把shp文件写入PostgresSQL数据库
微信号:一个有趣的灵魂W
关注我们,了解更多
- SpringBoot2.x开发案例之整合Quartz任务管理系统
- 给出一组非负整数,重新排序组成最大的数
- [机智的机器在学习] TensorFlow实现Kmeans聚类
- [机智的机器在学习] 利用TensorFlow实现多元线性回归分类器
- [数据结构和算法]《算法导论》动态规划笔记(1)
- [数据结构和算法]《算法导论》动态规划笔记(2)
- [算法与数据结构] 《算法导论》堆排序笔记
- [数据结构与算法] 链表的其他类型
- [数据结构与算法] 链接表总结
- [数据结构与算法] 线性表总结
- [数据结构与算法] Python实现二分查找
- [机智的机器在学习] 机器学习中的归一化和正则化问题
- [情人节] jieba分词介绍
- 左手用R右手Python系列——异常捕获与容错处理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法