疲劳驾驶识别项目(一)

接到一个小项目,做疲劳驾驶检测(实时),刚开始着手,感觉有点古怪(其实就是难或者自己菜)。
因为项目方给的是视频,首先特征提取和学习(如果有学习)过程和预测应该是要用图片做的。
在这里插入图片描述
给定数据为视频,如上,要求是检测四个项目的完成度并提出预警,首先我不认为四个类别全部使用DL或底层的特征分类的其中一种会得到最好的效果,肯定是要尝试。
最先开始做的肯定是最简单的,个人认为不需要ROI,并且可以使用流行的DL模型做的是calling,数据集我展示一小部分。
在这里插入图片描述
由于拍摄用的是红外,所以只有calling这一部分是不失真的,完全可以不经预处理直接去训练的。
下面是我的训练过程和结果:(代码就不放了太长了)

首先手动给VGG16加上下面几层:
在这里插入图片描述

train_data_dir = 'data_call/train'
validation_data_dir = 'data_call/val'

nb_train_samples = 748
nb_validation_samples = 196
epochs = 40
batch_size = 32
train_datagen = ImageDataGenerator(
#    samplewise_center = True,
    rotation_range=10,
    width_shift_range=0.3,
    height_shift_range=0.3,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip= True,
  #  vertical_flip=True,
    rescale=1. / 255
    )
imagedatagenerator部分还在求助,是真的看不太懂。
# this is the augmentation configuration we will use for testing:
# only rescaling
validation_datagen = ImageDataGenerator(rescale=1. / 255)

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='categorical')

validation_generator = validation_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='categorical')
    

fit部分:

history = model.fit_generator(
    train_generator,
    steps_per_epoch=nb_train_samples // batch_size,
    epochs=40,
    validation_data=validation_generator,
    validation_steps=nb_validation_samples // batch_size,
    verbose=1,   
    #callbacks=None)
    callbacks=callbacks)
#callbacks=[batch_parms])

训练过程:
在这里插入图片描述

test预处理和预测部分:
#files = glob.glob("validation/P_NG/*")
files = glob.glob("data_call/test/*bmp")
image_list = [] 
for f in files:
    print (f)
    image = cv2.imread(f)
    if  np.all(image ==None):  
        pass
    else:
        image = cv2.resize(image,(128,128))
        image = image/ 255.
        image = np.expand_dims(image,axis=0)
       # image_list.append(image)
        pre=model.predict(image, verbose=1, batch_size=32)
        #pre.append(f)
        print(pre)
        if pre[0][0]>pre[0][1]:
           image_list.append(f)
            
# image_list = np.array(image_list)
# predictions = model.predict(image_list, verbose=1, batch_size=32)
print(image_list)

预测结果展示:
在这里插入图片描述
acc和loss:
在这里插入图片描述
在这里插入图片描述
loss是可以轻松做到0.01级别的,我心甚慰。

接下来的工作还是想用不同的方法把四个部分的二分类先做出来,然后根据联动特征组合出疲劳预警;
比如眼部和嘴部可能需要用底层技术解决,使用深度学习效果不一定最好的。

猜你喜欢

转载自blog.csdn.net/qq_18998101/article/details/84818319