工厂人员作业行为动作识别检测算法

2023-09-22 10:11:31 浏览数 (2)

工厂人员作业行为动作识别检测算法通过SVM R-CNN深度学习算法框架模型,工厂人员作业行为动作识别检测算法实时识别并分析现场人员操作动作行为是否符合SOP安全规范流程作业标准,如果不符合则立即抓拍告警提醒。人员作业行为动作识别检测算法首先基于R-CNN进行人体检测,之后并对其进行追踪,并以相同的帧率生成MHI。之后,将所有边界框映射到由相同RGB图像序列生成的相应MHI,并在边界框中提取每个子MHI的HOG特征,最后使用SVM进行分类。

在人员作业行为动作识别检测算法识别中,有很大一部分研究是针对于人体行为识别的,主要进行识别的也是一些家庭内的危险行为,如小孩、老人摔倒检测,外来人员闯入等,这些都可归为人体行为识别的范畴之内。人员作业行为动作识别检测算法(action recognition),即根据视频图像完成对于人体动作的区分,这其中包括但不限于摔倒等危险动作。

代码语言:javascript复制
import numpy as np
import cv2
 
# 空函数
def nothing(x):
    pass
 
img = cv2.imread('messi5.jpg', 0)
cv2.namedWindow('image')
 
cv2.createTrackbar('min', 'image', 10, 200, nothing)
cv2.createTrackbar('max', 'image', 0, 255, nothing)
 
cv2.setTrackbarPos('min', 'image', 50)
cv2.setTrackbarPos('max', 'image', 150)
 
 
while(1):
    cv2.imshow('image', img)
    if cv2.waitKey(2) & 0xFF == 27:
        break
    
    minVal = cv2.getTrackbarPos('min', 'image')
    maxVal = cv2.getTrackbarPos('max', 'image')
    
    if maxVal < minVal:
        maxVal = minVal   10
        cv2.setTrackbarPos('max', 'image', maxVal)
 
    edges = cv2.Canny(img, minVal, maxVal)
    cv2.imshow('canny', edges)
 
cv2.destroyAllWindows()

人员作业行为动作识别检测算法基于手工特征的检测方法主要分为三类:帧间差分法、光流法以及背景差分法,其中背景差分法又包含混合高斯建模方法、codebook方法以及ViBe算法,其中尤其是ViBe算法的实时性和准确率最高,被广泛用于运动的目标检测,包括摔倒等行为。ViBe等手工特征提取算法主要用于从RGB图像视频中比较前后帧从而判断前景和后景,由此划分出运动的人体,之后基于上述方法进行滤波操作以及有关HOG、LBH等特征提取,并融合有关CNN提取特征的方式,进而输入到分类器进行分类检测。该方法较为简单,但相比于R-CNN系得到边界框的方法效果较差,同时可能出现识别精度低的问题,但也可以作为一个备选方案。

人员作业行为动作识别检测算法通过OpenPose进行人体动作关键点的提取,之后利用CNN及SVM来判断是否摔倒。该方案的特色在于可通过OpenPose的方法取得人体姿态的关节点位置,从这一方面考虑进行后续识别,人员作业行为动作识别检测算法具有很好的鲁棒性,而后续的工作也可以结合采用CNN等深度学习的方式来进行动作的高识别率检测。

人员作业行为动作识别检测算法基于LSTM的方法主要是从时间序列上处理不同帧之间的变化情况,可专注于人体运动从而忽略静态场景图象,因此就不需要背景差分建模来处理前后景,解决了每次需对场景配置进行校准的工作。人员作业行为动作识别检测算法基于特征提取方面,也可以采用卷积网络等表现好的深度网络,提高识别准确率。该方法的创新之处在于利用LSTM来进行序列间模型的学习,实时性和准确度都可以得到很好的保证。

代码语言:javascript复制
import torch 
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets, transforms
 
training_data = datasets.FashionMNIST(
    root = "../../data/",
    train = True,
    download = True, 
    transform = transforms.ToTensor()
)
 
test_data = datasets.FashionMNIST(
    root = "../../data/",
    train = False,
    download = True, 
    transform = transforms.ToTensor()
)
 
train_dataloader = DataLoader(training_data, batch_size = 32, shuffle = True)
test_dataloader = DataLoader(test_data, batch_size = 32, shuffle = True)
 
class NeuralNetwork(nn.Module):
    def __init__(self):
        super(NeuralNetwork, self).__init__()
        self.flatten = nn.Flatten()
        self.linear_relu_stack = nn.Sequential(
            nn.Linear(28 * 28, 512),
            nn.ReLU(),
            nn.Linear(512, 512),
            nn.ReLU(),
            nn.Linear(512, 10)  
        )
  
    def forward(self, x):
        out = self.flatten(x)
        out = self.linear_relu_stack(out)
        return out
 
 
model = NeuralNetwork()

0 人点赞