视频流识别---python

这篇具有很好参考价值的文章主要介绍了视频流识别---python。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Python中实现预处理,需要用到一些常见的图像处理库,如OpenCV、PIL等。

首先,需要加载视频并读取视频帧。可以使用OpenCV库中的cv2.VideoCapture()函数读取视频,然后使用cv2.read()函数读取视频的每一帧。读取到的每一帧是一个numpy数组,可以对其进行各种图像处理操作。

以下是一些常见的预处理操作:

  1. 裁剪:使用numpy的切片功能,选择需要的部分。

  2. 降噪:可以使用OpenCV中的高斯模糊、中值滤波等降噪算法。

  3. 增强:可以使用OpenCV中的直方图均衡化、图像锐化等增强算法。

  4. 标准化:将像素值缩放到[0,1]范围内,可以使用sklearn.preprocessing中的MinMaxScaler()函数。

下面是一个使用OpenCV库实现预处理的示例代码,包括裁剪、降噪和灰度化操作:

import cv2

# 加载视频
cap = cv2.VideoCapture("video.mp4")

# 循环读取视频帧
while True:
    ret, frame = cap.read()
    
    # 裁剪
    frame = frame[100:500, 100:500]
    
    # 降噪
    frame = cv2.GaussianBlur(frame, (5, 5), 0)
    
    # 灰度化
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # 显示结果
    cv2.imshow("frame", gray)
    
    # 按下q键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

上述代码中,使用cv2.VideoCapture()函数加载视频文件,然后使用cv2.read()函数逐帧读取视频。在每一帧中,使用numpy的切片功能对视频进行裁剪,然后使用cv2.GaussianBlur()函数进行高斯模糊降噪,并使用cv2.cvtColor()函数将图片转换为灰度图像。最后,使用cv2.imshow()函数将结果显示出来。按下q键退出循环,释放资源。

import cv2

# 加载预训练模型
model = cv2.dnn.readNetFromCaffe("model.prototxt", "model.caffemodel")

# 加载视频文件
cap = cv2.VideoCapture("video.mp4")

# 定义类别标签
labels = ["person", "car", "bus"]

# 循环处理每一帧
while True:
    # 读取一帧
    ret, frame = cap.read()

    # 如果读取失败则退出循环
    if not ret:
        break

    # 对帧进行预处理,包括调整大小和均值归一化
    blob = cv2.dnn.blobFromImage(frame, scalefactor=1/255, size=(300, 300), mean=(104, 117, 123))

    # 输入预处理后的帧到模型中进行推断
    model.setInput(blob)
    output = model.forward()

    # 循环处理每一个检测结果
    for detection in output[0, 0, :, :]:
        # 获取类别和置信度得分
        class_id = int(detection[1])
        confidence = detection[2]

        # 如果置信度得分大于某个阈值,则认为检测到了物体
        if confidence > 0.5:
            # 获取物体框的位置信息,并进行绘制
            left = int(detection[3] * frame.shape[1])
            top = int(detection[4] * frame.shape[0])
            right = int(detection[5] * frame.shape[1])
            bottom = int(detection[6] * frame.shape[0])
            cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), thickness=2)

            # 在物体框上方绘制类别标签和置信度得分
            label = "{}: {:.2f}%".format(labels[class_id - 1], confidence * 100)
            cv2.putText(frame, label, (left, top - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), thickness=2)

    # 显示处理后的

特征提取是计算机视觉中的重要步骤,用于将图像中的信息转换成可用于后续处理的特征向量。在基于视频流的项目中,特征提取模块可以用于识别视频流中的关键特征,并将其转换为可供后续处理使用的向量。下面是在Python中实现特征提取模块的基本步骤:

  1. 加载预训练的深度学习模型,如VGG、ResNet等。
  2. 使用加载的模型对视频流中的每一帧进行特征提取。
  3. 将每一帧的特征向量保存到一个数据集中。

下面是一个基于Python和OpenCV实现特征提取模块的代码示例:

import cv2
import numpy as np
import tensorflow as tf
from tensorflow.keras.applications.vgg16 import VGG16
from tensorflow.keras.models import Model

# 加载预训练模型
model = VGG16(weights='imagenet', include_top=True)
feat_extractor = Model(inputs=model.input, outputs=model.get_layer('fc2').output)

# 定义视频流输入
cap = cv2.VideoCapture('video.mp4')

# 定义特征向量数据集
features = []

# 循环遍历视频流中的每一帧
while cap.isOpened():
    # 读取当前帧
    ret, frame = cap.read()
    if not ret:
        break
    
    # 对当前帧进行预处理
    frame = cv2.resize(frame, (224, 224))
    frame = np.expand_dims(frame, axis=0)
    frame = frame.astype(np.float32)
    frame = tf.keras.applications.vgg16.preprocess_input(frame)
    
    # 提取当前帧的特征向量
    features.append(feat_extractor.predict(frame)[0])

# 保存特征向量数据集
np.save('features.npy', features)

在上述代码中,我们使用了VGG16模型作为特征提取器,并使用了其中的全连接层'fc2'输出特征向量。我们遍历视频流中的每一帧,对其进行预处理,并将其输入到特征提取器中,最后将提取到的特征向量保存到一个数据集中。

聚合:

  1. 数据聚合:将物体检测和特征提取模块处理后得到的数据进行聚合,将同一个物体或同一个事件的数据归为一组。

  2. 数据分类:对聚合后的数据进行分类,根据具体需求将不同类型的数据分别进行处理。

  3. 数据排序:将分类后的数据按照某个指标进行排序,以便更好地展示和分析数据。

# 数据聚合
def data_aggregation(detections, features):
    """
    对物体检测和特征提取模块处理后得到的数据进行聚合
    :param detections: 物体检测结果
    :param features: 特征提取结果
    :return: 聚合后的数据
    """
    data = {}
    for i in range(len(detections)):
        label = detections[i][0]
        box = detections[i][2:]
        feature = features[i]
        key = (label, tuple(box))
        if key not in data:
            data[key] = []
        data[key].append(feature)
    return data

# 数据分类
def data_classification(data, label):
    """
    对聚合后的数据进行分类
    :param data: 聚合后的数据
    :param label: 分类标签
    :return: 分类后的数据
    """
    classified_data = {}
    for key in data:
        if key[0] == label:
            classified_data[key] = data[key]
    return classified_data

# 数据排序
def data_sorting(data, metric):
    """
    对分类后的数据按照某个指标进行排序
    :param data: 分类后的数据
    :param metric: 排序指标
    :return: 排序后的数据
    """
    sorted_data = sorted(data.items(), key=lambda x: metric(x[1]), reverse=True)
    return sorted_data

数据存储和输出模块是视频流项目的最后一个模块,它的主要作用是将处理后的数据保存到本地或者云端存储,以便后续的分析和使用。在Python中,可以使用各种数据存储和输出的库来实现这个模块,例如:

import pandas as pd

# 将数据存储为CSV格式
data = {'name': ['John', 'Mike', 'Lisa'], 'age': [25, 30, 28], 'gender': ['M', 'M', 'F']}
df = pd.DataFrame(data)
df.to_csv('data.csv', index=False)
import cv2

# 读取视频文件
cap = cv2.VideoCapture('video.mp4')

# 循环读取视频帧
while True:
    ret, frame = cap.read()
    if ret:
        # 处理视频帧
        # ...

        # 显示视频帧
        cv2.imshow('frame', frame)

        # 退出循环
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

# 释放资源
cap.release()
cv2.destroyAllWindows()
  1. 数据库的存储:使用Python自带的SQLite库或者其他第三方的数据库库来实现数据的存储和读取。
    import sqlite3
    
    # 连接到数据库
    conn = sqlite3.connect('data.db')
    
    # 创建数据表
    cursor = conn.cursor()
    cursor.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER, gender TEXT)')
    
    # 插入数据
    cursor.execute('INSERT INTO users (name, age, gender) VALUES (?, ?, ?)', ('John', 25, 'M'))
    
    # 查询数据
    cursor.execute('SELECT * FROM users')
    rows = cursor.fetchall()
    for row in rows:
        print(row)
    
    # 关闭数据库连接
    conn.commit()
    conn.close()
    

    基于上面的视频流项目,可以通过数据可视化来展示处理后的结果,增强数据表达的可读性和直观性。

    一种常见的数据可视化工具是Matplotlib,它可以绘制各种类型的图形,如折线图、柱状图、散点图等。下面是一些基于Matplotlib的数据可视化示例:

  2. 绘制折线图展示某一特定时间段内不同类别物体出现的次数变化趋势
    import matplotlib.pyplot as plt
    
    # 获取数据
    category_names = ['cat', 'dog', 'bird', 'fish']
    data = [[40, 84, 24, 15], [30, 78, 22, 10], [25, 70, 20, 8]]
    
    # 绘制折线图
    fig, ax = plt.subplots()
    for i in range(len(category_names)):
        ax.plot(data[i], label=category_names[i])
    ax.legend()
    ax.set_xlabel('Time')
    ax.set_ylabel('Count')
    ax.set_title('Object Count Trend')
    plt.show()
    
  3. 绘制柱状图展示不同场景下不同类别物体出现的次数。
    import matplotlib.pyplot as plt
    import numpy as np
    
    # 获取数据
    category_names = ['cat', 'dog', 'bird', 'fish']
    scene_names = ['Indoor', 'Outdoor', 'Urban', 'Rural']
    data = np.array([[10, 20, 15, 8], [12, 25, 18, 10], [8, 18, 13, 5], [15, 30, 20, 12]])
    
    # 绘制柱状图
    fig, ax = plt.subplots()
    bar_width = 0.2
    for i in range(len(category_names)):
        ax.bar(np.arange(len(scene_names)) + i * bar_width, data[:, i], bar_width, label=category_names[i])
    ax.legend()
    ax.set_xlabel('Scene')
    ax.set_ylabel('Count')
    ax.set_xticks(np.arange(len(scene_names)) + len(category_names) * bar_width / 2)
    ax.set_xticklabels(scene_names)
    ax.set_title('Object Count by Scene')
    plt.show()
    

    散点文章来源地址https://www.toymoban.com/news/detail-796078.html

  4. import matplotlib.pyplot as plt
    import numpy as np
    
    # 获取数据
    category_names = ['cat', 'dog', 'bird', 'fish']
    feature_names = ['Length', 'Width', 'Height']
    data = np.array([
        [[10, 5, 3], [8, 3, 5], [9, 4, 4], [7, 2, 6]],
        [[16, 8, 4], [12, 6, 5], [13, 7, 3], [14, 5, 5]],
        [[5, 2, 1], [6, 3, 2], [4, 1, 1], [7, 3, 1]],
        [[12, 4, 6], [10, 3, 5], [11, 2, 4], [8, 4, 4]]
    ])
    
    # 绘制散点图
    fig, ax = plt.subplots()
    for i
    

到了这里,关于视频流识别---python的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT实现OpenCV播放rtsp视频流

    使用OpenCV(图像处理)、FastDeploy(飞桨部署)库; 监控相机传输数据用的是码流,高清网络摄像机产品编码器都会产生两个编码格式,称为 主码流 和 子码流 。这就叫双码流技术。 目的是用于解决监控录像的本地存储和网络传输的图像的质量问题。双码流能实现本地和远程

    2024年02月03日
    浏览(37)
  • OpenCV获取网络摄像头实时视频流

    参考文章: [常用工具] OpenCV获取网络摄像头实时视频流_opencv网络摄像头 [常用工具] OpenCV获取网络摄像头实时视频流_opencv网络摄像头_落痕的寒假的博客-CSDN博客 在使用OpenCv处理视频时,无论是视频文件还是摄像头画面,都要使用VideoCapture类来进行每一帧图像的处理。当我们

    2024年02月01日
    浏览(31)
  • opencv基本操作二(读取视频流与保存视频、读取摄像头并保存视频)

    opencv常用 读视频函数 cv2.VideoCapture 、 cv2.VideoCapture.get 等,可以参考这里 opencv常用 写视频函数 cv2.VideoWriter 等可以参考这里 ,其中视频格式可以参考这里 videoCapture.read() 是按帧读取视频, ret,frame 是获 .read() 方法的两个返回值。其中 ret 是布尔值,如果读取帧是正确的则返回

    2023年04月08日
    浏览(37)
  • 基于OpenCv+Django的网络实时视频流传输(前后端分离)

    秋风阁——北溪入江流:https://focus-wind.com/ 秋风阁——基于OpenCv+Django的网络实时视频流传输(前后端分离) 使用OpenCv捕获摄像机画面后,我们有时候需要将画面显示在界面上。本博客基于Django的前后端分离模式,将视频流从后端读取,传送给前端显示。 在使用Django进行视频

    2024年02月08日
    浏览(34)
  • 树莓派学习:学习opencv+用opencv获取树莓派mjpg摄像头视频流

    目录 前提步骤 打开树莓派摄像头 查看是否有图像,登录游览器打开树莓派IP地址的8080端口 获取mjpg的视频流url 代码 先设定好mjpg的视频流的url 利用opencv库中的v2.VideoCapture类读取mjpg视频流   cv2.VideoCapture() 检查摄像头是否成功打开,如果没有,则打印错误消息并退出程序 

    2024年02月03日
    浏览(34)
  • VS+QT+Opencv使用YOLOv4对视频流进行目标检测

    对单张图像的检测,请参考:https://blog.csdn.net/qq_45445740/article/details/109659938

    2024年02月12日
    浏览(28)
  • 使用Flask+OpenCV实现浏览器/微信小程序的视频流传输

    前言 一、 Flask+浏览器实现 二、 Flask+微信小程序实现 三、Flask+uni-app小程序实现 后记 近期在做的东西涉及到实时视频的处理,碰到一些问题,因此将之记录下来,便于日后翻看,同时也希望能给遇到同样问题的小伙伴提供帮助。 实现代码如下: 分为 app.py 和index.html。 1. F

    2024年02月06日
    浏览(48)
  • WSL2通过OpenCV调用并展示本机摄像头的RTSP视频流

    本篇博客的由来如上图哈哈,WSL2 相关安装教程可以参考我之前的博客:Win11安装WSL2和Nvidia驱动 更多文章欢迎来我的博客小站看呀,会有更多的技术细节~ ubuntu上请执行 或者编译安装 如果报错 Could NOT find OpenSSL ,安装如下依赖即可解决 下载解压 EasyDarwin Easydarwin是国内团队开

    2024年02月09日
    浏览(52)
  • ZLMeidaKit在Windows上启动时:计算机中丢失MSVCR110.dll,以及rtmp推流后无法转换为flv视频流解决

    ZLMediaKit在Windows上实现Rtmp流媒体服务器以及模拟rtmp推流和http-flv拉流播放: ZLMediaKit在Windows上实现Rtmp流媒体服务器以及模拟rtmp推流和http-flv拉流播放_zlm流媒体服务器_霸道流氓气质的博客-CSDN博客 按照以上教程启动MediaServer.exe时提示: 无法启动此程序,因为计算机中缺失MS

    2024年02月09日
    浏览(44)
  • 【jetson 硬解码】使用NVDEC模块解码rtsp视频流,超低时延、比opencv更快、资源更少

    1、jetson系统:32.7.1, 2、jetpack:4.6.1, 3、deepstream:6.0.1, FastDeploy 问题1:

    2024年02月14日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包