日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

毕业设计-机器视觉的疲劳驾驶检测系统-python-opencv

發(fā)布時(shí)間:2024/3/24 python 84 豆豆
生活随笔 收集整理的這篇文章主要介紹了 毕业设计-机器视觉的疲劳驾驶检测系统-python-opencv 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

前言

課題背景和意義

實(shí)現(xiàn)技術(shù)思路

實(shí)現(xiàn)效果圖樣例


前言


? ? 📅大四是整個(gè)大學(xué)期間最忙碌的時(shí)光,一邊要忙著備考或?qū)嵙?xí)為畢業(yè)后面臨的就業(yè)升學(xué)做準(zhǔn)備,一邊要為畢業(yè)設(shè)計(jì)耗費(fèi)大量精力。近幾年各個(gè)學(xué)校要求的畢設(shè)項(xiàng)目越來越難,有不少課題是研究生級別難度的,對本科同學(xué)來說是充滿挑戰(zhàn)。為幫助大家順利通過和節(jié)省時(shí)間與精力投入到更重要的就業(yè)和考試中去,學(xué)長分享優(yōu)質(zhì)的選題經(jīng)驗(yàn)和畢設(shè)項(xiàng)目與技術(shù)思路。

🚀對畢設(shè)有任何疑問都可以問學(xué)長哦!

大家好,這里是海浪學(xué)長畢設(shè)專題,本次分享的課題是

🎯機(jī)器視覺的疲勞駕駛檢測系統(tǒng)

課題背景和意義

疲勞檢測系統(tǒng)是指利用駕駛員的面部特征、眼部信號、頭部運(yùn)動性等推斷駕駛員的疲勞狀態(tài),并進(jìn)行報(bào)警提示和采取相應(yīng)措施的裝置。一些汽車裝備的疲勞監(jiān)測系統(tǒng)被稱為“疲勞識別系統(tǒng)”(它從駕駛開始時(shí)便對駕駛員的操作行為進(jìn)行記錄)并能夠通過識別長途旅行中駕駛操作的變化對駕駛員的疲勞程度進(jìn)行判斷。駕駛員轉(zhuǎn)向操作頻率變低,并伴隨輕微但急驟的轉(zhuǎn)向動作以保持行駛方向是駕駛精力不集中的典型表現(xiàn)。根據(jù)以上動作的出現(xiàn)頻率,并綜合諸如旅途長度、轉(zhuǎn)向燈使用情況、駕駛時(shí)間等其他參數(shù),系統(tǒng)對駕駛員的疲勞程度進(jìn)行計(jì)算和鑒別,如果計(jì)算結(jié)果超過某一定值,儀表盤上就會閃爍一個(gè)咖啡杯的圖案,提示駕駛員需要休息。駕駛員疲勞識別系統(tǒng)將駕駛員注意力集中程度作為衡量駕駛員駕駛狀態(tài)的重要考慮因素,以致力于道路安全的提高。根據(jù)國家公路交通安全管理局的數(shù)據(jù),每年均涉及疲勞駕駛事故中導(dǎo)致超過1,550人死亡和71,000人受傷,但是實(shí)際數(shù)字可能要高得多[1]。因此,為了避免這類事故的發(fā)生,我們制作了這個(gè)系統(tǒng)。它通過檢查人的眼睛是否閉合或正在打哈欠來預(yù)測眼睛和嘴巴的標(biāo)志,從而確定一個(gè)人是否正處于疲勞駕駛。

實(shí)現(xiàn)技術(shù)思路

疲勞認(rèn)定標(biāo)準(zhǔn)

  • 眨眼:連續(xù)3幀內(nèi),眼睛長寬比為 0.2
  • 打哈欠:連續(xù)3幀內(nèi),嘴部長寬比為 0.5
  • 瞌睡點(diǎn)頭:連續(xù)3幀內(nèi),pitch(x)旋轉(zhuǎn)角為 0.3

因?yàn)槿嗽谄>霑r(shí)大概會產(chǎn)生兩種狀態(tài): 眨眼:正常人的眼睛每分鐘大約要眨動10-15次,

每次眨眼大概0.2-0.4秒,如果疲倦時(shí)眨眼次數(shù)會增多,速度也會變慢。打哈欠:此時(shí)嘴

會長大而且會保持一定的狀態(tài)。因此檢測人是否疲勞可以從眼睛的開合度,眨眼頻率,以

及嘴巴張合程度來判斷一個(gè)人是否疲勞。

檢測工具

dlib :一個(gè)很經(jīng)典的用于圖像處理的開源庫,shape_predictor_68_face_landmarks.dat是一個(gè)用于人臉68個(gè)關(guān)鍵點(diǎn)檢測的dat模型庫,使用這個(gè)模型庫可以很方便地進(jìn)行人臉檢測,并進(jìn)行簡單的應(yīng)用。

具體實(shí)現(xiàn)步驟

  • 使用dlib.get_frontal_face_detector() 獲得臉部位置檢測器
  • 使用dlib.shape_predictor獲得臉部特征位置檢測器
  • 分別獲取左右眼面部標(biāo)志的索引
  • 打開cv2 本地?cái)z像頭
  • 從視頻流進(jìn)行循環(huán),讀取圖片,并對圖片做維度擴(kuò)大,并進(jìn)灰度化
  • 使用detector(gray, 0) 進(jìn)行臉部位置檢測
  • 循環(huán)臉部位置信息,使用predictor(gray, rect)獲得臉部特征位置的信息
  • 將臉部特征信息轉(zhuǎn)換為數(shù)組array的格式
  • 提取左眼和右眼坐標(biāo)
  • 構(gòu)造函數(shù)計(jì)算左右眼的EAR值,使用平均值作為最終的EAR
  • 使用cv2.convexHull獲得凸包位置,使用drawContours畫出輪廓位置進(jìn)行畫圖操作
  • 進(jìn)行畫圖操作,用矩形框標(biāo)注人臉
  • 分別計(jì)算左眼和右眼的評分求平均作為最終的評分,如果小于閾值,則加1,如果連續(xù)3次都小于閾值,則表示進(jìn)行了一次眨眼活動
  • 進(jìn)行畫圖操作,68個(gè)特征點(diǎn)標(biāo)識
  • 進(jìn)行畫圖操作,同時(shí)使用cv2.putText將眨眼次數(shù)進(jìn)行顯示
  • 統(tǒng)計(jì)總眨眼次數(shù)大于50次屏幕顯示睡著。
def get_head_pose(shape):# 頭部姿態(tài)估計(jì)# (像素坐標(biāo)集合)填寫2D參考點(diǎn),注釋遵循h(huán)ttps://ibug.doc.ic.ac.uk/resources/300-W/# 17左眉左上角/21左眉右角/22右眉左上角/26右眉右上角/36左眼左上角/39左眼右上角/42右眼左上角/# 45右眼右上角/31鼻子左上角/35鼻子右上角/48左上角/54嘴右上角/57嘴中央下角/8下巴角image_pts = np.float32([shape[17], shape[21], shape[22], shape[26], shape[36],shape[39], shape[42], shape[45], shape[31], shape[35],shape[48], shape[54], shape[57], shape[8]])# solvePnP計(jì)算姿勢——求解旋轉(zhuǎn)和平移矩陣:# rotation_vec表示旋轉(zhuǎn)矩陣,translation_vec表示平移矩陣,cam_matrix與K矩陣對應(yīng),dist_coeffs與D矩陣對應(yīng)。_, rotation_vec, translation_vec = cv2.solvePnP(object_pts, image_pts, cam_matrix, dist_coeffs)# projectPoints重新投影誤差:原2d點(diǎn)和重投影2d點(diǎn)的距離(輸入3d點(diǎn)、相機(jī)內(nèi)參、相機(jī)畸變、r、t,輸出重投影2d點(diǎn))reprojectdst, _ = cv2.projectPoints(reprojectsrc, rotation_vec, translation_vec, cam_matrix,dist_coeffs)reprojectdst = tuple(map(tuple, reprojectdst.reshape(8, 2)))# 以8行2列顯示# 計(jì)算歐拉角calc euler angle# 參考https://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#decomposeprojectionmatrixrotation_mat, _ = cv2.Rodrigues(rotation_vec)#羅德里格斯公式(將旋轉(zhuǎn)矩陣轉(zhuǎn)換為旋轉(zhuǎn)向量)pose_mat = cv2.hconcat((rotation_mat, translation_vec))# 水平拼接,vconcat垂直拼接# decomposeProjectionMatrix將投影矩陣分解為旋轉(zhuǎn)矩陣和相機(jī)矩陣_, _, _, _, _, _, euler_angle = cv2.decomposeProjectionMatrix(pose_mat)pitch, yaw, roll = [math.radians(_) for _ in euler_angle]pitch = math.degrees(math.asin(math.sin(pitch)))roll = -math.degrees(math.asin(math.sin(roll)))yaw = math.degrees(math.asin(math.sin(yaw)))print('pitch:{}, yaw:{}, roll:{}'.format(pitch, yaw, roll))return reprojectdst, euler_angle# 投影誤差,歐拉角 def eye_aspect_ratio(eye):# 垂直眼標(biāo)志(X,Y)坐標(biāo)A = dist.euclidean(eye[1], eye[5])# 計(jì)算兩個(gè)集合之間的歐式距離B = dist.euclidean(eye[2], eye[4])# 計(jì)算水平之間的歐幾里得距離# 水平眼標(biāo)志(X,Y)坐標(biāo)C = dist.euclidean(eye[0], eye[3])# 眼睛長寬比的計(jì)算ear = (A + B) / (2.0 * C)# 返回眼睛的長寬比return eardef mouth_aspect_ratio(mouth):# 嘴部A = np.linalg.norm(mouth[2] - mouth[9]) # 51, 59B = np.linalg.norm(mouth[4] - mouth[7]) # 53, 57C = np.linalg.norm(mouth[0] - mouth[6]) # 49, 55mar = (A + B) / (2.0 * C)return mar

實(shí)現(xiàn)效果圖樣例

?

我是海浪學(xué)長,創(chuàng)作不易,歡迎點(diǎn)贊、關(guān)注、收藏、留言。

畢設(shè)幫助,疑難解答,歡迎打擾!

最后

總結(jié)

以上是生活随笔為你收集整理的毕业设计-机器视觉的疲劳驾驶检测系统-python-opencv的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。