智慧工地数据集是一个专为建筑工地智能化管理而设计的数据集合,它特别聚焦在可移动生产要素的检测与分割上。该数据集由一系列高分辨率图像组成,这些图像拍摄于武汉火神山及雷神山医院建设现场,记录了在紧急医疗设施建设过程中所使用的各种机械设备以及工人活动。数据集不仅对研究建筑领域的自动化、智能化具有重要意义,同时也为应对公共卫生突发事件提供了宝贵的数据支持。
数据集概览
图像质量与数量:
- 超高清数据:所有图像均为高分辨率,确保了细节的清晰可见,适合进行细粒度的物体识别与行为分析。
- 图像总量:约4万张图像,包括1.8万张用于测试的图像。
- 数据存储容量:总数据量约为15GB,其中测试用图占据大约6GB的空间。
标注类型与格式:
- 检测任务:使用YOLO目标检测格式进行标注,便于训练与评估物体检测模型。
- 分割任务:采用JSON格式进行标注,同时支持YOLO格式,以适应不同的应用场景与算法需求。
可移动生产要素分类
数据集详细记录了13种常见的建筑工地上的移动目标,具体如下:
- 推土机 (Bulldozer):用于平整土地、挖掘或推动大量土壤等材料。
- 混凝土搅拌机 (Concrete mixer):用于混合水泥、沙子和其他材料制作混凝土。
- 起重机 (Crane):用于吊装重物到高空位置。
- 挖掘机 (Excavator):用于挖掘地基、沟渠等工程。
- 吊装头 (Hanging head):起重机的一部分,专门用来提升或搬运重物。
- 装载机 (Loader):用于将材料装载到运输工具上或将材料从一处移到另一处。
- 其他车辆 (Other vehicle):涵盖上述未列出的各种车辆,如运输建筑材料的小型卡车等。
- 打桩机 (Pile driving):用于将桩打入地面,作为建筑物的基础支撑。
- 泵车 (Pump truck):用于将混凝土输送到施工地点。
- 压路机 (Roller):用于压实路面或其他地面结构。
- 塔吊 (Static crane):固定式的重型起重设备,用于高层建筑的物料搬运。
- 卡车 (Truck):用于运输各种建筑材料和工具。
- 工人 (Worker):包括但不限于操作机器、监督施工进度的人员。
应用场景
此数据集的应用场景广泛,从智能监控系统到自动化的施工过程管理,再到基于AI的安全性评估,都离不开高质量的数据支持。例如,在施工现场部署基于AI的摄像头系统,可以实时监测是否有违规操作,及时发现安全隐患;或者通过分析工人的活动模式来优化工作流程,提高施工效率。
JSON转YOLO格式转换代码示例
为了方便处理和兼容不同的模型训练框架,有时需要将原始的标注格式(如JSON)转换为YOLO格式。下面是一个Python脚本示例,展示如何将JSON格式的标注文件转换成YOLO格式的标签文件。假设原始的JSON文件包含每个图像的边界框信息,并且每个对象都有一个类别标签。
首先,我们需要安装必要的库,如果尚未安装,可以通过以下命令安装:
pip install json
pip install numpy
接下来是转换脚本:
import json
import os
import numpy as np
def json_to_yolo(json_path, image_path, output_dir):
"""
将JSON格式的标注文件转换为YOLO格式的标签文件。
参数:
json_path (str): JSON文件路径。
image_path (str): 图像文件夹路径。
output_dir (str): 输出标签文件的目录路径。
"""
# 加载JSON文件
with open(json_path, 'r') as file:
data = json.load(file)
# 定义类别名称到ID的映射
class_names = ['Bulldozer', 'Concrete mixer', 'Crane', 'Excavator', 'Hanging head',
'Loader', 'Other vehicle', 'Pile driving', 'Pump truck', 'Roller',
'Static crane', 'Truck', 'Worker']
class_map = {name: idx for idx, name in enumerate(class_names)}
# 遍历每一个图像及其标注信息
for img_info in data.values():
img_name = img_info['filename']
img_width = img_info['width']
img_height = img_info['height']
# 创建输出文件路径
out_file = os.path.join(output_dir, os.path.splitext(img_name)[0] + '.txt')
# 检查输出文件夹是否存在,不存在则创建
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 写入YOLO格式的标签文件
with open(out_file, 'w') as f:
for obj in img_info['objects']:
class_name = obj['name']
bbox = obj['bbox'] # [xmin, ymin, xmax, ymax]
# 计算中心点坐标和宽度高度
x_center = (bbox[0] + bbox[2]) / 2.0
y_center = (bbox[1] + bbox[3]) / 2.0
width = bbox[2] - bbox[0]
height = bbox[3] - bbox[1]
# 归一化坐标
x_center /= img_width
y_center /= img_height
width /= img_width
height /= img_height
# 获取类别ID
class_id = class_map[class_name]
# 写入一行标签数据
line = f"{class_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n"
f.write(line)
if __name__ == "__main__":
# 示例调用
json_to_yolo('path/to/your/json/file.json', 'path/to/images', 'path/to/output/directory')
这段代码定义了一个json_to_yolo
函数,用于读取JSON格式的标注文件,并将其转换为YOLO格式的文本标签文件。每个图像对应一个文本文件,其中包含了该图像中所有对象的位置信息和类别标签。
请注意,这个示例假设JSON文件中的每个图像都有一个包含filename
、width
、height
属性的对象,以及一个名为objects
的列表,列表中的每个元素代表图像中的一个对象,包含name
(类别名)和bbox
(边界框坐标)属性。实际使用时,请根据您的JSON文件结构调整代码。
此外,您可能还需要根据实际情况修改输入输出路径以及其他配置参数。希望这段代码能帮助您更好地管理和使用智慧工地数据集。
结论
智慧工地数据集是针对建筑领域中移动要素检测与分割的一次重要尝试,其不仅有助于推动人工智能技术在建筑业的应用,也为未来类似项目的快速响应积累了宝贵经验。通过对这些高精度图像的深入研究,我们期待能够进一步提升建筑行业的安全性和效率,实现更加智能化的施工现场管理。