実際のOpenCVのコンピュータビジョン(パイソン版)

疲労検出

#导入工具包
DISTとしてscipy.spatialインポート距離から
コレクションからOrderedDictインポート
NPとしてインポートnumpyのを
インポートargparseの
インポート時間
インポートDLIBの
インポートCV2 

FACIAL_LANDMARKS_68_IDXS = OrderedDict([ 
	( "口"、(48、68))、
	"right_eyebrow"、 (17、22))、 "left_eyebrow"、(22、27))、 "right_eye"、(36、42))、 "left_eye"、(42、48))、 "鼻"、(27 、36))、 "ジョー"、(0、17))
])

#http://vision.fe.uni-lj.si/cvww2016/proceedings/papers/05.pdf 
DEF eye_aspect_ratio(眼): 计算距离、竖直的
	A = dist.euclidean(目[1]、眼[5])
	B = dist.euclidean(目[2]眼[4])眼[4]) 
	#のレベルを距離を計算します
	Dist.euclidean = C([3]アイ[0]、アイ)
	#値のEAR 
	EAR =(A + B)/(2.0 * C)
	リターンEAR 
 
#入力パラメータ
AP = argparse.ArgumentParser()
ap.add_argument(「 - p型"" "= Trueの場合、必要に応じ、--shape-予測
	ひげランドマーク予測へのパスヘルプ=は" ")
ap.add_argument(" - 「 "=タイプ= strの、デフォルトの、" V "" --video、
	ヘルプ= "入力された映像ファイルへのパス")
引数= VARS(ap.parse_args()) 
 設定決意パラメータ
EYE_AR_THRESH = 0.3 
EYE_AR_CONSEC_FRAMES。3 = 

#は、カウンタを初期化する
カウンタ= 0 
TOTAL = 0 

#検出および局在ツール
プリント(「[INFO]ローディングランドマーク予測...ひげ") 
検出器= dlib.get_frontal_face_detector()
= dlib.shape_predictor予測(引数[ "shape_predictor"]) 
取られた2つの目の領域 
各フレームを通して位
真つつ。
	#前処理
(LSTART、貸す)= FACIAL_LANDMARKS_68_IDXS [ "left_eye"] 
(RSTART、レンド)= FACIAL_LANDMARKS_68_IDXS [ "right_eye"] 
读取视频
プリント( "[INFO]ビデオストリームスレッドを開始...")
= cv2.VideoCapture(引数対【 "ビデオ"])
#vs = FileVideoStream(引数[ "ビデオ"])開始()。
time.sleep(1.0)

DEF shape_to_np(形状、DTYPE = "INT"):
	* 2#创建68 
	COORDSの=のnp.zeros ((shape.num_parts、2)、DTYPE = DTYPE)
	遍历每一个关键点
	#得到坐标
	Iの範囲内(0、shape.num_parts)用:
		COORDS [I] =(shape.part(I).X、形状.part(I).Y)
	リターンCOORDSの

	フレーム= vs.read()[1] 
	フレームがNone場合:
		ブレーク
	
	(H、W)= frame.shape [。2] 
	幅= 1200 
	R&LT =幅/フロート(W)
	薄暗い=(幅、INT(* R&LT H))
	フレーム= cv2.resize(フレーム、薄暗い、補間= CV2。 INTER_AREA)
	グレー= cv2.cvtColor(フレーム、cv2.COLOR_BGR2GRAY) 
顔検出
	rects =検出器(グレー、0)

	各検出された顔を介し#
	rectsでRECT用:
		#1を取得する座標
		形状=予測(灰色、RECTを)
		形状= shape_to_np(形状)

		#耳値を算出する
		左眼用=シェイプ[LSTART:LEND] 
		rightEye =シェイプ[RSTART:REND] 
		leftEAR = eye_aspect_ratio(左眼用)
		rightEAR = eye_aspect_ratio(rightEye) 
カウント平均
		耳=(leftEAR + rightEAR)/ 2.0 

		#描画目領域 
		leftEyeHull = cv2.convexHull(左眼用)
		rightEyeHull = CV2。凸包(rightEye) 
		cv2.drawContours(フレーム、[leftEyeHull] -1、(0、255、0),. 1)
		cv2.drawContours(フレーム、[rightEyeHull]、 - 1は、(0、255、0)、1) 
をチェックするかどうかのしきい値
		IF EAR <EYE_AR_THRESH:
			COUNTER + 1 = 

		他:
			いくつかの連続したフレームは、合計とを、目を閉じている場合は#
			COUNTER IF> = EYE_AR_CONSEC_FRAMES:
				TOTAL + = 1 

			#リセット
			カウンタ= 0 

		#表示
		cv2.putText(フレーム、 "[点滅:{}"形式(TOTAL)、(10、30)、
			cv2.FONT_HERSHEY_SIMPLEX、0.7、(0、0、255)、2)
		cv2.putText(フレーム、 "EAR:{:}。.2f"フォーマット(EAR)、(300、30)、
			cv2.FONT_HERSHEY_SIMPLEX、0.7、(0、0、255)、2)

	cv2.imshow( "フレーム"、フレーム)
	キー= cv2.waitKey(10)&0xFFで
 
	あれば、キー== 27:
		ブレーク

vs.release()
cv2.destroyAllWindows()

  

OpenCVのコンピュータビジョンの戦闘 

非常に良いの話はもちろん唐ゆうディ先生は少し高価です

コースカタログ

01コースの概要と環境設定

02基本操作イメージ

03しきい値スムージング

04画像形態学的処理

画像勾配05を算出します

06エッジ検出

07画像ピラミッドと輪郭検出

08ヒストグラムとフーリエ変換します

09プロジェクトの戦闘 - クレジットカード番号を識別するために、

10プロジェクトの戦闘 - ドキュメントスキャンOCR認識

11画像特徴-harris

12画像特徴-sift

実際の戦闘の13例 - パノラマ画像ステッチ

14プロジェクトの戦闘 - 認識のための駐車場

15プロジェクトの戦闘 - 解答用紙年生を識別するために、

16背景モデリング

17オプティカルフロー推定

DNNモジュールの18Opencv

19プロジェクトの戦闘 - ターゲット追尾

操作の20原則、コンボリューション

21プロジェクトの戦闘 - 疲労検出

 

 

 

 

 

 

 

 

 

#导入工具包scipy.spatialインポート距離からdistfromコレクションはnpimport argparseimport timeimport dlibimport CV2としてOrderedDictimportのnumpyのをインポートするよう
FACIAL_LANDMARKS_68_IDXS = OrderedDict([( "口"、(48、68))、( "right_eyebrow"、(17、22)) 、( "left_eyebrow"、(22、27))、( "right_eye"、(36、42))、( "left_eye"、(42、48))、( "鼻"、(27、36))、( "ジョー"、(0、17))])
#Http://vision.fe.uni-lj.si/cvww2016/proceedings/papers/05.pdfdef eye_aspect_ratio(眼):#距離を計算し、垂直A = dist.euclidean(目[1] 、眼[5 】)B = dist.euclidean(目[ 2]、眼[4])#は、C = dist.euclidean(眼[0]のレベルの距離を計算する 、眼[3])#耳値耳=(+ B)を/(2.0 * C)リターン耳 #の入力パラメータAP = argparse.ArgumentParser()ap.add_argument( " - P"、 "--shape予測器"、必須= trueの場合、ヘルプ= "顔のランドマーク予測パス")AP .add_argument( " - V"、 " --video"、タイプ= STR、デフォルト= ""、ヘルプ= ""入力された映像ファイルのパス)引数=のVARS(ap.parse_args())#の設定決意パラメータEYE_AR_THRESH = 0.3 =。3 EYE_AR_CONSEC_FRAMESの
位カウンタ0TOTAL = 0 =を初期化カウンタ
#検出および局在ツールプリント( "[INFO]ローディング顔ランドマーク予測...")検出器= dlib.get_frontal_face_detector()予測= dlib.shape_predictor(引数[ "shape_predictor"])
#取られた2つの目の領域(LEND LSTART)FACIAL_LANDMARKS_68_IDXS = [ "left_eye"](RSTART、REND)FACIAL_LANDMARKS_68_IDXS = [ "right_eye"]
読み取りビデオ印刷( "[INFO]ビデオ出発ストリームスレッドを...") = cv2.VideoCapture VS(引数[ "ビデオ"])#VS = FileVideoStream(引数[ "ビデオ"])スタート()time.sleep(1.0)。
DEF shape_to_np(形状、DTYPE = "INT"):#68を作成します* = 2coordsのnp.zeros((shape.num_parts、 2)、DTYPE = DTYPE)#の各キーポイントを介し位に範囲(0、shape.num_partsでIの座標を取得する ):COORDS [I] =は(shape.part( I).X、shape.part(I).Y)COORDSリターン
真ながら、各フレームを介し番号:#前処理フレーム= vs.read()[1]ブレーク(H、W)=フレーム:フレームはどれもない場合.shapeは:[2]幅= 1200Rグレー= cv2.cvtColor(W)DIM =(幅、INT(時間*の商標))フレーム= cv2.resize(フレーム、DIM、補間= cv2.INTER_AREA)=幅/フロート( フレーム、CV2。COLOR_BGR2GRAY)
#)は、ヒトの顔rects =検出器(灰色、0を検出
#rectsにRECT各検出された顔を横断します。#取得は、形状=予測(グレー、RECT)シェイプ= shape_to_np(形状)座標
[:貸すLSTART]#耳値左眼用=形状を算出 rightEye =形状[RSTARTました: REND] leftEAR = eye_aspect_ratio(左眼用)rightEAR = eye_aspect_ratio(rightEye)
#=平均EAR(leftEAR rightEAR +)/ 2.0計算
#描画目領域leftEyeHull = cv2.convexHull(左眼用)rightEyeHull = cv2.convexHull(rightEye)CV2。 drawContours(フレーム、[leftEyeHull] -1、(0、255、0),. 1)cv2.drawContours(フレーム、[rightEyeHull] -1、(0、255、0),. 1)
閾値があれば満たされているかどうかチェック# EAR <EYE_AR_THRESH:+ = COUNTER 1。
他:#いくつかの連続したフレームが閉じている場合は、目、合計およびCOUNTER IF> = EYE_AR_CONSEC_FRAMES:TOTAL = 1 +
#COUNTER = 0にリセット
#1显示のcv2.putText(フレーム、 "点滅:{}"形式(TOTAL)、(10、30)、cv2.FONT_HERSHEY_SIMPLEX、0.7、(0、0、255)、2)cv2.putText(フレーム、「EAR :{:.2f}」形式(耳)、(300、30)、cv2.FONT_HERSHEY_SIMPLEX、0.7、(0、0、255)、2)
cv2.imshow( "フレーム"、フレーム)キー= cv2.waitKey (10)&0xFFであれば、キー== 27:ブレーク
vs.release()cv2.destroyAllWindows()

おすすめ

転載: www.cnblogs.com/zhaofuyun/p/11356955.html