疲勞駕駛識別專案(一)
阿新 • • 發佈:2018-12-05
接到一個小專案,做疲勞駕駛檢測(實時),剛開始著手,感覺有點古怪(其實就是難或者自己菜)。
因為專案方給的是視訊,首先特徵提取和學習(如果有學習)過程和預測應該是要用圖片做的。
給定資料為視訊,如上,要求是檢測四個專案的完成度並提出預警,首先我不認為四個類別全部使用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級別的,我心甚慰。
接下來的工作還是想用不同的方法把四個部分的二分類先做出來,然後根據聯動特徵組合出疲勞預警;
比如眼部和嘴部可能需要用底層技術解決,使用深度學習效果不一定最好的。