视频监控人员行为识别算法通过opencv+python网络模型框架算法,视频监控人员行为识别算法可以识别和判断员工的行为是否符合规范要求,一旦发现不符合规定的行为,视频监控人员行为识别算法将自动发送告警信息。
一、行为识别
在视频监控人员行为识别算法识别中,有很大一部分研究是针对于人体行为识别的,主要进行识别的也是一些家庭内的危险行为,如小孩、老人摔倒检测,外来人员闯入等,这些都可归为人体行为识别的范畴之内。
视频监控人员行为识别算法(action recognition),即根据视频图像完成对于人体动作的区分,这其中包括但不限于摔倒等危险动作。
在视频监控人员行为识别算法领域,主要包含以下几个子领域:
Untrimmed Video Classification:一段未修剪很长的视频序列,其中在时序上包含多个类型的动作,且其中很多动作并不需要特别关注,所以这类视频需要进行全局分析进行分类。
Trimmed Action Recognition:一段修剪的视频序列包含一类动作,序列时间长度不定,根据视频标签进行学习分类。
Temporal Action Proposal:在一段较长的视频序列中找到含有动作的视频段,并将其提取分类,类似于图像目标检测任务中的候选框提取分类。
Temporal Action Localization:与上述的类似,即在长视频序列中找到存在动作行为的视频段,然后对视频段进行分类研究。
Dense-Captioning Events:对于一段未经修剪的长视频序列,里面可能包含很多动作,找到存在的动作视频行为段,并对其进行视频行为描述。
接下来,将对视频监控人员行为识别算法领域的相关技术研究现状进行简单的分析和总结。
1.1 视频监控人员行为识别算法相关数据集
关于视频监控人员行为识别算法领域内的数据库有很多,而较为常用的主要是UCF101、HMDB51、Kinetics、THUMOS 2014和ActivityNet。
前三个主要用于动作识别分类常用,主要包含大量不同类型的动作,其中UCF101含13320段视频及101类动作、HMDB51含7000段视频及51类动作、Kinetics含300k段视频及400类动作。
后两个主要用于行为检测,数据来源为youtube,也较为常用。
1.2 视频监控人员行为识别算法研究现状
考虑到对于视频监控人员行为识别算法的检测主要是实时的,需要对视频的每一帧进行检测分析,故对于视频序列的处理分析更符合于上述的Temporal Action Proposal、Temporal Action Localization以及Dense-Captioning Events相关领域,当然其他领域的相关研究也会在这里介绍。
首先进行密集采样特征,将视频的每一帧分为不同尺度,并对不同尺度的图片进行网格划分采集特征点,并在时间序列上跟踪特征点变化,形成轨迹;之后对提取的轨迹进行操作,得到轨迹描述子和运动/结构描述子(HOG,HOF,MBH),并对其使用Bag of Features的方法进行特征编码,并利用SVM分类器分类。
可以看到,DT算法可对任意长度的视频序列进行特征提取,提取主要基于人体光流变化的相关特征。
来源:论文Dense Trajectories and Motion Boundary Descriptors for Action Recognition
关于视频监控人员行为识别算法目标检测的方法,现在主流的算法可分为两类。一类是基于Region Proposal的R-CNN系算法,包括R-CNN,Fast R-CNN,Faster R-CNN等,它们都是two-stage的,即需要先产生目标候选框,也就是目标位置,然后再对候选框做分类与回归。另一类是Yolo,SSD这类one-stage算法,其仅仅使用一个卷积神经网络CNN直接预测不同目标的类别与位置。相对来说,第一类方法的准确度更高,但是速度慢,第二给算法速度快,但是准确性要低一些。
视频监控人员行为识别算法针对于摔倒检测,现在有很多的研究都是基于可便携穿戴传感器检测实现的,而针对于计算机视觉的摔倒检测十分有限,接下来将介绍调研到的近些年关于通过视觉方法进行摔倒检测的研究。
"""
2023.1.1
该代码实现了labelme导出的json文件,批量转换成yolo需要的txt文件,且包含了坐标归一化
原来labelme标注之后的是:1.jpg 1.json
经过该脚本处理后,得到的是1.jpg 1.json 1.txt
"""
import os
import numpy as np
import json
from glob import glob
import cv2
from sklearn.model_selection import train_test_split
from os import getcwd
classes = ["NOFight", "Fight", "Person"]
# 1.标签路径
labelme_path = "Data20200108/"
isUseTest = False # 是否创建test集
# 3.获取待处理文件
files = glob(labelme_path + "*.json")
files = [i.replace("\\", "/").split("/")[-1].split(".json")[0] for i in files]
print(files)
if isUseTest:
trainval_files, test_files = train_test_split(files, test_size=0.1, random_state=55)
else:
trainval_files = files
# split
train_files, val_files = train_test_split(trainval_files, test_size=0.1, random_state=55)
def convert(size, box):
dw = 1. / (size[0])
dh = 1. / (size[1])
x = (box[0] + box[1]) / 2.0 - 1
y = (box[2] + box[3]) / 2.0 - 1
w = box[1] - box[0]
h = box[3] - box[2]
x = x * dw
w = w * dw
y = y * dh
h = h * dh
return (x, y, w, h)
wd = getcwd()
print(wd)
def ChangeToYolo5(files, txt_Name):
if not os.path.exists('tmp/'):
os.makedirs('tmp/')
list_file = open('tmp/%s.txt' % (txt_Name), 'w')
for json_file_ in files:
json_filename = labelme_path + json_file_ + ".json"
imagePath = labelme_path + json_file_ + ".jpg"
list_file.write('%s/%s\n' % (wd, imagePath))
out_file = open('%s/%s.txt' % (labelme_path, json_file_), 'w')
json_file = json.load(open(json_filename, "r", encoding="utf-8"))
height, width, channels = cv2.imread(labelme_path + json_file_ + ".jpg").shape
for multi in json_file["shapes"]:
points = np.array(multi["points"])
xmin = min(points[:, 0]) if min(points[:, 0]) > 0 else 0
xmax = max(points[:, 0]) if max(points[:, 0]) > 0 else 0
ymin = min(points[:, 1]) if min(points[:, 1]) > 0 else 0
ymax = max(points[:, 1]) if max(points[:, 1]) > 0 else 0
label = multi["label"]
if xmax <= xmin:
pass
elif ymax <= ymin:
pass
else:
cls_id = classes.index(label)
b = (float(xmin), float(xmax), float(ymin), float(ymax))
bb = convert((width, height), b)
out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
print(json_filename, xmin, ymin, xmax, ymax, cls_id)
ChangeToYolo5(train_files, "train")
ChangeToYolo5(val_files, "val")
# ChangeToYolo5(test_files, "test")
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。