随着经济与社会的发展,各大城市车辆保有量不断提高,越来越多的人选择乘车出行,非机动车事故问题也越来越 严重。驾驶人不得在乘坐人员未按照规定使用安全头盔的情况下驾驶摩托车。因此,检测非机动车驾驶员与乘坐者是否佩戴头盔对生命财产安全至关重要。本文采用深度学习的方法,结合 YOLOv4 模型的特点,建立相应头盔检测神经网络模型,在搭建的神经网络各层次中调整偏置项,进而训练得到有效的神经网络模型,实现检测非机动车驾驶 人是否戴头盔的功能,即实现头盔识别,并保证其较高的精确度。
目标检测数据集及其标注:
读取数据集的代码如下:
HELMET = []
NO_HELMET = []
DIRECTORY = r"annotations"
DIRECTORY2 = r"images"
for xml_file in os.listdir(DIRECTORY):
path = os.path.join(DIRECTORY,xml_file)
tree = ET.parse(path)
root = tree.getroot()
img_path = os.path.join(DIRECTORY2,str(root.find('filename').text))
frame = cv2.imread(img_path)
for member in root.findall('object'):
Switch = member.find('name').text
for i in member.findall('bndbox'):
xmin = int(i.find('xmin').text) - 20
ymin = int(i.find('ymin').text) - 20
xmax = int(i.find('xmax').text) + 20
ymax = int(i.find('ymax').text) + 20
if xmin < 0 :
xmin = int(i.find('xmin').text)
if ymin < 0 :
ymin = int(i.find('ymin').text)
if Switch == 'With Helmet':
temp = frame[ymin:ymax,xmin:xmax]
if temp.shape[0] != 0 and temp.shape[1] != 0 :
temp = cv2.resize(temp,(224,224))
HELMET.append(temp)
else:
temp = frame[ymin:ymax,xmin:xmax]
if temp.shape[0] != 0 and temp.shape[1] != 0 :
temp = cv2.resize(temp,(224,224))
NO_HELMET.append(temp)
应用完成的实现界面如下所示:
上传需要检测的图像数据:
点击检测后的输出结果:
结论:
本文建立相应头盔检测神经网络模型,完整代码加Q:525894654, 在搭建的神经网络各层次中调整偏置项,进而训练得到有效的神经网络模型,实现非机动车驾驶人是否戴头盔检测功能并保证其较好的应用性。可以有效减少非机动车和电动自行车的交通事故,使人们养成良好的交通习惯,规范驾驶员的交通行为。点击添加群:正在跳转正在跳转