---
# System prepended metadata

title: DAY4
tags: [大學專題]

---

程式碼
---

```python=
import mediapipe as mp
import numpy as np
import cv2
#將用到的函式庫引入進來

cap = cv2.VideoCapture(0) #讀取影片或鏡頭

mpface = mp.solutions.face_mesh #使用何種模型

face = mpface.FaceMesh(min_tracking_confidence=0.6, min_detection_confidence=0.6)
#以mpface呼叫FaceMesh這個函式，可以調整一些參數，按住ctrl滑鼠放solutions上面按右鍵找FaceMesh可看內部參數，()內可以調整數值

#min_tracking_confidence最低的偵測自信度，偵測臉的嚴謹度
#min_detection_confidence最低的追蹤自信度，追蹤臉的嚴謹度，越嚴謹就越要去重新偵測臉的位置

draw = mp.solutions.drawing_utils
#將畫座標的函式存進變數

faceLmsStyle = draw.DrawingSpec(color=(0, 0, 255), circle_radius = 1, thickness = 1)
#決定點的樣式，circle_radius決定圓的半徑，thickness決定粗度

faceConStyle = draw.DrawingSpec(color=(0, 255, 0), thickness=1)
#決定線的樣式

while True:
#用while去處理影片的每一幀
	ret, img = cap.read() #cap.read()會回傳兩個值，第一個表示讀取影片下一幀是否成功(布林值)，第二個為如果有則回傳取得的下一張圖片給我們
	
	rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #opencv讀取的圖片預設是BGR，更改為RGB

	result = face.process(rgb) #以process來使用mediapipe所訓練好的模型去處理圖片，並將結果存進result裡面ss

	imgHeight = img.shape[0]
	imgWidth =  img.shape[1]
        #讀取圖片的寬高大小

	if result.multi_face_landmarks: #如果有偵測到臉的話
		for i in result.multi_face_landmarks: #用for迴圈去跑偵測到的每一張臉，把點跟線畫出來
			draw.draw_landmarks(img, i, mpface.FACEMESH_CONTOURS, faceLmsStyle, faceConStyle)
			#用draw呼叫landmarks，把點畫出來，第一個參數是要畫在哪張圖上，第二個把點傳進來
			#如果要把點之間做連接則可增加第三個參數，第四個參數設定點的樣式，第五個設定線的樣式
			for x, lm in enumerate(i.landmark): #把每個點的座標找出來、印出來
				xPos = int(lm.x*imgWidth)
				yPos = int(lm.y*imgHeight)
                               #lm.x、lm.y為各座標在圖片上的比例位置，乘上圖片寬高大小，就是實際的座標位置

				print(x, xPos , yPos , lm.z) #在終端機印出每個點的號碼跟座標
				cv2.putText(img, str(x) , (xPos-25 , yPos+5) , cv2.FONT_HERSHEY_SIMPLEX , 0.4 , (0 , 0 , 255), 1)
				#在哪個影像上、顯示什麼、位置在哪、用甚麼字體、大小、顏色、粗度
			


	cv2.imshow("window", img) #顯示影像

	if cv2.waitKey(1) == ord('s'): #以按鍵s中斷影片，()內為影片速度
		cap.release() #釋放webcam的資源，避免佔用資源
		break
		cv2.destroyAllWindows() #如果要在眾多openCV視窗下關閉特定視窗，('')帶入視窗名稱即可
```

結果
---
![](https://hackmd.io/_uploads/B101W4Ou2.png)
![](https://hackmd.io/_uploads/Skug-V__3.png)

圖片中的數字依序為:特徵點座標編號(0)、x座標、y座標、z的比例位置
