施工场景下违规行为识别数据集

本文探讨了施工场景下行为识别的技术挑战,包括视频跟踪和行为识别。研究发现,多目标跟踪问题中deepSort是实用性较好的方案,而行为识别选择了ECO模型。在数据采集过程中,面临光照、场景、工人行为等多种因素的影响,最终收集了640个带标签的小视频,为模型训练提供数据。

最近,转到了施工场景下的行为识别领域。该应用领域在技术上可拆分为两部分:视频跟踪和行为识别。这一周密集调研了文献,发现着实是一个大坑。其中的视频跟踪最近的各頂会论文出现最多的是单目标跟踪,而我们要解决的确是多目标跟踪,最近出的较好的能实用性的是deepSort;真实的施工场景中摄像头的远近,拍摄的遮挡,工人服装的统一,重叠,违规动作幅度的大小等都是巨大的挑战;行为识别方面最近出的论文较多,能实用性的目前敲定ECO模型;在跟踪过程中某一个工人的时空管道数据的抽取也是一个难题等等。无论如何,这块硬骨头得啃下来。

行为识别模型的训练一般是用摄像头采集某一个动作大概2-3秒的视频,然后将这些小视频打上行为标签用于训练;在测试中得结合视频跟踪出某一个目标,再抽取该目标的时空管道数据,主要数据的抽取中背景也很重要。

接下来,采集数据。带着4个工大本科生开启了为期10天的数据采集体验。为了提神效率,笔记本搭载了3个仅有的摄像头不同角度的抓取数据。充分考虑光照变化、场景变化、工人高低、行为夸张、拍摄角度等,进行不同组合来抓取行为视频数据。感谢4个本科生,这10天共收集了640个小视频以及测试用的demo。
抓取数据借用OpenCV,的代码如下:

#include "opencv2/opencv.hpp"
#include <iostream>
#include <iomanip>  

#include <windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) //必要

using namespace std;
using namespace cv;

int main() {

	// Create a VideoCapture object and use camera to capture the video
	VideoCapture cap1(0);
	VideoCapture cap2(1);

	VideoCapture cap3(2);
	// Check if camera opened successfully
	if (!cap1.isOpened() || !cap2.isOpened() || !cap3.isOpened())
	{
		cout << "Error opening video stream" << endl;
		return -1;
	}

	// Default resolution of the frame is obtained.The default resolution is system dependent. 
	//int frame_width = cap1.get(CV_CAP_PROP_FRAME_WIDTH);
	//int frame_height = cap1.get(CV_CAP_PROP_FRAME_HEIGHT);
	 
	string filename;
	string cam_num1 = "cam1";
	string cam_num2 = "cam2";
	string cam_num3 = "cam3";
	
	while (1){

		//filename << "smoking32";   //smoking27   wear_hat27
		//cam_num1 << "cam7";
		//cam_num2 << "cam8";
		//cam_num3 << "cam9";
		if (!cap1.isOpened() || !cap2.isOpened() || !cap3.isOpened())
		{
			cout << "Error opening video stream" << endl;
			break;
		}

		//cout << "please input action and cam_num." << endl << "For example:" << endl << "smoking32" << endl << "cam7" << endl << "cam8" << endl << "cam9" << endl;
		//cin >> filename >> cam_num1 >> cam_num2 >> cam_num3;

		cout << "please input action and cam_num." << endl << "For example:" << endl << "smoking32" << endl << endl;
		cout << "Now, please input (input 'q' will exit):" << endl;
		cin >> filename;

		if (filename == "q")
			break;

		// Define the codec and create VideoWriter object.The output is stored in 'outcpp.avi' file. 
		VideoWriter video1("C:\\个人\\dataset\\ASD\\" + filename + "\\" + cam_num1 + "\\" + filename + cam_num1 + ".avi", CV_FOURCC('D', 'I', 'V', 'X'), 30, Size(640, 480));
		VideoWriter video2("C:\\个人\\dataset\\ASD\\" + filename + "\\" + cam_num2 + "\\" + filename + cam_num2 + ".avi", CV_FOURCC('D', 'I', 'V', 'X'), 30, Size(640, 480));
		VideoWriter video3("C:\\个人\\dataset\\ASD\\" + filename + "\\" + cam_num3 + "\\" + filename + cam_num3 + ".avi", CV_FOURCC('D', 'I', 'V', 'X'), 30, Size(640, 480));


		long currentFrame = 1;

		while (1)
		{
			Mat frame1;
			Mat frame2;
			Mat frame3;
			// Capture frame-by-frame 
			cap1 >> frame1;
			cap2 >> frame2;
			cap3 >> frame3;

			// If the frame is empty, break immediately
			if (frame1.empty() || frame2.empty() || frame3.empty())
				break;


			stringstream str1;
			str1 << "img_" << setw(4) << setfill('0') << currentFrame << ".jpg";
			cout << "正在处理第" << currentFrame << "帧" << endl;
			printf("\n");
			// 设置每1帧获取一次帧
			if (currentFrame % 1 == 0) {
				// 将帧转成图片输出
				imwrite("C:\\个人\\dataset\\ASD\\" + filename + "\\" + cam_num1 + "\\" + str1.str(), frame1);
				imwrite("C:\\个人\\dataset\\ASD\\" + filename  + "\\" + cam_num2 + "\\" + str1.str(), frame2);
				imwrite("C:\\个人\\dataset\\ASD\\" + filename + "\\" + cam_num3 + "\\" + str1.str(), frame3);
			}


			currentFrame++;
			// Write the frame into the file 'outcpp.avi'
			video1.write(frame1);
			video2.write(frame2);
			video3.write(frame3);

			// Display the resulting frame    
			imshow("cam1", frame1);
			imshow("cam2", frame2);
			imshow("cam3", frame3);
			waitKey(5);

			if (KEY_DOWN(32))
				break;

			if (KEY_DOWN(27))
			{
				video1.release();
				video2.release();
				video3.release();
				cap1.release();
				cap2.release();
				cap3.release();
				// Closes all the windows
				destroyAllWindows();
				return 0;
			}
		}


		// When everything done, release the video capture and write object
		
		video1.release();
		video2.release();
		video3.release();	
	}
	
	cap1.release();
	cap2.release();
	cap3.release();
	// Closes all the windows
	destroyAllWindows();
	return 0;
}
一、基础信息 数据集名称:建筑工地安全设备与违规行为检测数据集 图片数量: - 训练集:3,624张 - 验证集:269张 - 测试集:135张 分类类别(19类): 1. 安全设备类:Hardhat(安全帽)、Safety-Vest(安全背心)、Harness-belt(安全带)、Reflective-raincoat(反光雨衣)、Safety-Reflective-Strip(安全反光条)、Mask(口罩) 2. 违规行为类:NO-Hardhat(未戴安全帽)、NO-Safety-Vest(未穿安全背心)、NO-Mask(未戴口罩) 3. 工地元素类:Ladder(梯子)、Lifting-hook(吊钩)、Machinery(机械)、Mobile-plant-arm(移动设备臂)、Mobile-plant-boom(移动设备吊杆)、Mobile-plant-bucket(移动设备铲斗)、Safety-Cone(安全锥)、fence(围栏)、vehicle(车辆) 4. 人员类:Person(人员) 标注格式:YOLO格式,包含边界框坐标和类别标签 数据来源:工地现场监控图像,涵盖设备操作、人员活动等典型场景 二、适用场景 1. 智能工地安全监控系统: 实时检测工人安全装备佩戴情况(安全帽/反光背心/安全带) 自动识别未佩戴安全设备的违规行为并触发告警 1. 实时检测工人安全装备佩戴情况(安全帽/反光背心/安全带) 1. 自动识别未佩戴安全设备的违规行为并触发告警 1. 重型机械作业风险预警: 识别吊钩、机械臂、铲斗等设备运行状态 检测人员进入机械危险区域的风险行为 1. 识别吊钩、机械臂、铲斗等设备运行状态 1. 检测人员进入机械危险区域的风险行为 1. 施工区域智能管理: 围栏完整性监测与安全锥摆放检测 车辆和人员活动区域的动态划分与管理 1. 围栏完整性
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值