1)定義乙個具有n個關鍵點的3d臉部模型,以6個關鍵點的3d臉部模型為例(左眼角,右眼角,鼻尖,左嘴角,右嘴角,下頜):
2)採用人臉檢測以及面部關鍵點檢測得到2d人臉關鍵點;
3)採用opencv的solvepnp函式解出旋轉向量;
k = [6.5308391993466671e+002, 0.0, 3.1950000000000000e+002,
0.0, 6.5308391993466671e+002, 2.3950000000000000e+002,
0.0, 0.0, 1.0]
d = [7.0834633684407095e-002, 6.9140193737175351e-002, 0.0, 0.0, -1.3073460323689292e+000]
# # 相機內參矩陣
camera_matrix = np.array(k).reshape(3, 3).astype(np.float32)
# # 相機畸變係數
dist_coeffs = np.array(d).reshape(5, 1).astype(np.float32)
(success, rotation_vector, translation_vector) = cv2.solvepnp(model_points, image_points, camera_matrix,dist_coeffs, flags=4) # cv2.cv_iterative
4)將旋轉向量轉換為尤拉角;
# calculate rotation angles
theta = cv2.norm(rotation_vector, cv2.norm_l2)
# transformed to quaterniond
w = math.cos(theta / 2)
x = math.sin(theta / 2) * rotation_vector[0][0] / theta
y = math.sin(theta / 2) * rotation_vector[1][0] / theta
z = math.sin(theta / 2) * rotation_vector[2][0] / theta
ysqr = y * y
# pitch (x-axis rotation)
t0 = 2.0 * (w * x + y * z)
t1 = 1.0 - 2.0 * (x * x + ysqr)
pitch = math.atan2(t0, t1)
# yaw (y-axis rotation)
t2 = 2.0 * (w * y - z * x)
if t2 > 1.0:
t2 = 1.0
if t2 < -1.0:
t2 = -1.0
yaw = math.asin(t2)
# roll (z-axis rotation)
t3 = 2.0 * (w * z + x * y)
t4 = 1.0 - 2.0 * (ysqr + z * z)
roll = math.atan2(t3, t4)
# print('pitch:{}, yaw:{}, roll:{}'.format(pitch, yaw, roll))
# 單位轉換:將弧度轉換為度
# y = int((pitch / math.pi) * 180)
# x = int((yaw / math.pi) * 180)
# z = int((roll / math.pi) * 180)
(c++:計算旋轉角度/人臉轉正) 基於landmark的疲勞檢測
經查閱相關文獻,疲勞在人體面部表情中表現出大致三個型別 打哈欠 嘴巴張大且相對較長時間保持這一狀態 眨眼 或眼睛微閉,此時眨眼次數增多,且眨眼速度變慢 點頭 瞌睡點頭 1 首先是檢測眨眼,可以通過landmark點的標號直接定位眼睛位置,經實驗驗證,該一系列的點能夠準確定位。下面重點分析一下眼部,6...
疲勞駕駛監測方案 疲勞駕駛檢測方法
疲勞駕駛檢測方法 疲勞駕駛是指駕駛員在長時間連續駕車後,產生心理機能和生理機能的失調,出現諸如視線模糊 反應遲鈍 動作呆板 腰痠背疼 駕駛能力下降等現象。疲勞駕駛的誘因 疲勞駕駛是駕駛員在人 車 環境這個大系統中產生的。駕駛過程中,駕駛員需要時刻接收相關資訊,並實時地對之進行判斷,做出相關決定和動作...
疲勞駕駛監測方案 一種疲勞駕駛檢測方法
一種疲勞駕駛檢測方法 專利摘要 本發明公開了一種疲勞駕駛檢測方法,屬於汽車安全駕駛領域,通過採集駕駛員的行為指標 主要為方向盤資料 駕駛時間和駕駛車速 進行資訊預處理,得到疲勞生理引數作為檢測指標變數,然後利用疲勞指標變數對bp神經網路進行訓練建立相應的疲勞檢測網路模型,利用該模型進行疲勞檢測。本發...