搜尋
首頁科技週邊人工智慧人臉辨識還能這麼玩

人臉辨識還能這麼玩

May 11, 2023 pm 12:34 PM
鍵盤按鍵人臉辨識

今天我們來擴充一下,用人臉玩飛機大戰。雖然想法跟手勢辨識類似,但代碼量比手勢辨識版稍多。

使用的人臉演算法是毫秒的,幀率能到 30,用電腦CPU運作也很流暢。

下面我分享下專案實作過程,文末取得專案完整的原始碼。

準備飛機大戰程序

Github上找到一個Python版本的飛機大戰程序,安裝Pygame即可運作。

人臉辨識還能這麼玩

用鍵盤的A、D、W、S鍵用來控制飛機的移動方向,分別對應左、右、上、下。

所以,接下來我們要做的是辨識人臉,並對人臉姿態進行估計,將估計後的結果映射到左、右、上、下,從而控制飛機的運行。

人臉辨識

這裡,我們用opencv讀取攝影機中的視訊串流。

將視訊串流中的每個畫面送入mediapipe中的人臉辨識模型,進行辨識。

人臉辨識還能這麼玩

圖片mediapipe 不只辨識人臉,還能標示出人臉 6 點左眼、右眼、左耳、右耳、鼻子、嘴巴。

核心程式碼:

with self.mp_face_detection.FaceDetection(
model_selection=0, min_detection_confidence=0.9) as face_detection:
while cap.isOpened():
success, image = cap.read()
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
results = face_detection.process(image)
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
if results.detections:
for detection in results.detections:
# 获取人脸框坐标
face_box = detection.location_data.relative_bounding_box
face_w, face_h = int(face_box.width * frame_w), int(face_box.height * frame_h)
face_l = int(face_box.xmin * frame_w) + face_w
face_t = int(face_box.ymin * frame_h)
face_r, face_b = face_l - face_w, face_t + face_h
# 显示人脸框
cv2.rectangle(image, (face_l, face_t), (face_r, face_b), (0, 255, 255), 2)
self.draw_zh_img(image, self.face_box_name_img, (face_r + face_l) // 2, face_t - 5)

pose_direct, pose_key_points = self.pose_estimate(detection)
# 显示人脸 6 个关键点
for point_name in FaceKeyPoint:
mp_point = self.mp_face_detection.get_key_point(detection, point_name)

point_x = int(mp_point.x * frame_w)
point_y = int(mp_point.y * frame_h)

point_color = (0, 255, 0) if point_name in pose_key_points else (255, 0, 255)
cv2.circle(image, (point_x, point_y), 4, point_color, -1)
# 显示关键点中文名称
point_name_img = self.face_key_point_name_img[point_name]
self.draw_zh_img(image, point_name_img, point_x, point_y-5)

這裡有個小知識點需要大家注意。

程式碼中用draw_zh_img來顯示中文,由於opencv不支援直接顯示中文。因此,我用PIL模組中Image方法提前繪製中文圖片,並轉為opencv格式。

人臉辨識還能這麼玩

在需要的時候,直接與視訊串流合併,效率高,不掉幀。

人臉姿態估計

之前手勢識別,我們用相鄰幀來判斷手勢的移動。人臉姿態估計只用當前幀就可以,相對容易一些。

我們透過人臉6 個關鍵點的座標距離,就可以判斷出人臉的姿態

人臉辨識還能這麼玩

這裡,左耳和鼻子的水平距離很近,因此,我們可以估計臉向左轉,從而可以用隻飛機向左移動。

同樣的,用其他關鍵點,我們可以估計出人臉向右轉、向上(抬頭)和向下(低頭)

核心代碼:

# 左耳与鼻子水平距离,判断面部左转
left_ear_to_nose_dist = left_ear.x - nose_pos.x 
# 右耳与鼻子水平距离,判断面部右转
nose_to_right_ear_dist = nose_pos.x - right_ear.x

# 鼻子与左眼垂直距离,判断面部向上
nose_to_left_eye_dist = nose_pos.y - left_eye.y
# 左耳与左眼垂直距离,判断面部向下
left_ear_to_left_eye_dist = left_ear.y - left_eye.y

if left_ear_to_nose_dist < 0.07:
# print('左转')
self.key_board.press_key('A')
time.sleep(0.07)
self.key_board.release_key('A')

return 'A', [FaceKeyPoint.NOSE_TIP, FaceKeyPoint.LEFT_EAR_TRAGION]
if nose_to_right_ear_dist < 0.07:
# print('右转')
self.key_board.press_key('D')
time.sleep(0.07)
self.key_board.release_key('D')
return 'D', [FaceKeyPoint.NOSE_TIP, FaceKeyPoint.RIGHT_EAR_TRAGION]

姿態控制飛機移動

辨識出人臉姿態,我們就可以用程式控制鍵盤,從而控制飛機移動。

這裡我用PyKeyboard模組控制鍵盤按鍵。

self.key_board = PyKeyboard()
# print('左转')
self.key_board.press_key('A')
time.sleep(0.07)
self.key_board.release_key('A')

press_key和release_key函數分別是按鍵和釋放按鍵。

它們之間,呼叫了time.sleep(0.07)控制按鍵的時長,按鍵時間長,則飛機移動距離就長,反之,按鍵時間短,則飛機移動距離就短,大家可以根據自己的需求來調節。

以上是人臉辨識還能這麼玩的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:51CTO.COM。如有侵權,請聯絡admin@php.cn刪除
一個提示可以繞過每個主要LLM的保障措施一個提示可以繞過每個主要LLM的保障措施Apr 25, 2025 am 11:16 AM

隱藏者的開創性研究暴露了領先的大語言模型(LLM)的關鍵脆弱性。 他們的發現揭示了一種普遍的旁路技術,稱為“政策木偶”,能夠規避幾乎所有主要LLMS

5個錯誤,大多數企業今年將犯有可持續性5個錯誤,大多數企業今年將犯有可持續性Apr 25, 2025 am 11:15 AM

對環境責任和減少廢物的推動正在從根本上改變企業的運作方式。 這種轉變會影響產品開發,製造過程,客戶關係,合作夥伴選擇以及採用新的

H20芯片禁令震撼中國人工智能公司,但長期以來一直在為影響H20芯片禁令震撼中國人工智能公司,但長期以來一直在為影響Apr 25, 2025 am 11:12 AM

最近對先進AI硬件的限制突出了AI優勢的地緣政治競爭不斷升級,從而揭示了中國對外國半導體技術的依賴。 2024年,中國進口了價值3850億美元的半導體

如果Openai購買Chrome,AI可能會統治瀏覽器戰爭如果Openai購買Chrome,AI可能會統治瀏覽器戰爭Apr 25, 2025 am 11:11 AM

從Google的Chrome剝奪了潛在的剝離,引發了科技行業中的激烈辯論。 OpenAI收購領先的瀏覽器,擁有65%的全球市場份額的前景提出了有關TH的未來的重大疑問

AI如何解決零售媒體的痛苦AI如何解決零售媒體的痛苦Apr 25, 2025 am 11:10 AM

儘管總體廣告增長超過了零售媒體的增長,但仍在放緩。 這個成熟階段提出了挑戰,包括生態系統破碎,成本上升,測量問題和整合複雜性。 但是,人工智能

'AI是我們,比我們更多''AI是我們,比我們更多'Apr 25, 2025 am 11:09 AM

在一系列閃爍和惰性屏幕中,一個古老的無線電裂縫帶有靜態的裂紋。這堆易於破壞穩定的電子產品構成了“電子廢物之地”的核心,這是沉浸式展覽中的六個裝置之一,&qu&qu

Google Cloud在下一個2025年對基礎架構變得更加認真Google Cloud在下一個2025年對基礎架構變得更加認真Apr 25, 2025 am 11:08 AM

Google Cloud的下一個2025:關注基礎架構,連通性和AI Google Cloud的下一個2025會議展示了許多進步,太多了,無法在此處詳細介紹。 有關特定公告的深入分析,請參閱我的文章

IR的秘密支持者透露,Arcana的550萬美元的AI電影管道說話,Arcana的AI Meme,Ai Meme的550萬美元。IR的秘密支持者透露,Arcana的550萬美元的AI電影管道說話,Arcana的AI Meme,Ai Meme的550萬美元。Apr 25, 2025 am 11:07 AM

本週在AI和XR中:一波AI驅動的創造力正在通過從音樂發電到電影製作的媒體和娛樂中席捲。 讓我們潛入頭條新聞。 AI生成的內容的增長影響:技術顧問Shelly Palme

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能