下载安装mmcv-full(openmmlab里面最基础的算法库):对视频进行逐帧的分析,把每一帧画面的中间结果保存到目录里,最后把所有帧的中间结果串成一个视频文件
ImageNet1000类别信息,用于检测算法实现效果的数据集
我们今天用的是别人已经训练好的模型
# 创建目录
import os
# 存放测试图片
os.mkdir('test_img')
# 存放结果图片
os.mkdir('output')
把图片换成视频/实时摄像头画面
Import os # 导入操作系统库
Cv2 导入opencv
import os # 操作系统库
import cv2 # 导入opencv
import pandas as pd # 数据处理
import numpy as np
import torch # pytorch
import matplotlib.pyplot as plt # 数据可视化,画图
# 载入预训练图像分类模型
from torchvision import models
model = models.resnet18(pretrained=True) # 表示有18层网络,层数越高,深度学习越深
model = model.eval() # 设为评估模式
model = model.to(device) # 将模型放到设备GPU/CPU里面
# 测试集集的图像、用户新上传的图像、视频的帧、摄像头的实时画面
Resize:把任何一张图像,缩放成256x256大小
CenterCrop:裁剪成224大小的图象
把方框转成pytorch的张量
对RGB三通道做归一化,减去均值,除以标准差
(这6个数是人们总结之后的标准数值)
做缩放的归一化:每个像素减去它所在的通道的均值,再除以它所在通道的标准差
更容易被神经网络处理
# 1张3通道的224x224图像
要传入pytorch必须整理成这样的数据维度
pred_logits # 1000个类别的分数(有+/-)
pred_softmax把每一个logits的分数转成了0-1的概率,并且求合为1
有多种形态的,多种分布的,不适合做成图像分类数据集供基础算法去训练和测试
pytorch要求输入到tsettransform里面的都是pil格式
opencv载入的是BGR格式,而pil载入的是RGB模式
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # BGR 转 RGB
pil文件——RGB转BGR
img_bgr = cv2.cvtColor(np.array(img_pil),cv2.COLOR_RGB2BGR) # RGB 转 BGR
给出了——凡是对视频进行逐帧处理都可以用这套代码模板
先用opencv把视频读进来,生成一个进度条
# 对视频进行逐帧处理,获取的是第几帧和画面本身
然后再进行逐帧处理,再更新进度条
每一帧都存到目录中,再用frames2video,串成视频
# 获取设备——有GPU就用GPU,没有就用CPU
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
导包,获取设备,载入预训练分类模型,载入ImageNet1000标签,预处理,先获取摄像头的一帧画面
获取系统默认摄像头,cap.open(0)mac为1,wins为0