游戲AI的創造思路-技術基礎-計算機視覺

讓游戲的AI具備“眼睛”和“視覺”,就是通過計算機視覺的方法進行的。現在,越來越多的游戲,特別是動捕類游戲都在使用這個方法。當然,計算機視覺不僅僅用于游戲,越來越多的應用使用到這個技術

目錄

1. 定義

2. 發展歷史

3. 公式和函數

3.1. 圖像處理基礎公式

3.1.1. 灰度化公式

3.1.2. 二值化公式

3.2.?圖像濾波公式

3.3. 邊緣檢測公式

3.4. 特征提取公式

3.5. 評估指標公式

3.5.1. 準確率(Accuracy)

3.5.2. 召回率(Recall)/ 查全率

3.5.3. 精確率(Precision)/ 查準率

3.5.4. F1分數(F1-Score)

3.6. 目標檢測指標

3.6.1. 交并比(IOU)

3.6.2. 平均精確率(AP)和平均精確率均值(mAP)

3.7. Python代碼示例

4. 運行原理

4.1. 基本原理

4.2. Python實現

5. 優缺點

6. 運用計算機視覺的游戲AI使用場景及實例

6.1. 使用場景

6.2. 實例1

6.3. 實例2

6.3.1. 實現步驟

6.2.2. Python代碼示例


1. 定義

游戲AI運用計算機視覺,是指在游戲開發和運行過程中,利用計算機視覺技術使游戲中的角色(NPC)或系統能夠識別、分析和理解游戲中的圖像和視頻數據,從而做出更加智能的決策和反應。

這種技術結合了圖像處理、模式識別和機器學習,使游戲中的非玩家角色能夠像人類一樣“看到”并理解游戲世界。

2. 發展歷史

計算機視覺的發展可以追溯到20世紀50年代,當時科學家們開始研究生物視覺的工作原理。

到了60年代,計算機視覺作為一個獨立的領域開始萌芽。

70年代,開創性地提出了識別流程。

80年代則著眼于提取特征。

90年代則進行了圖像分割的研究。

進入21世紀后,隨著計算機運算能力的增強和深度學習算法的興起,計算機視覺取得了長足的進步,特別是在目標識別、目標跟蹤和場景理解等方面。

在游戲AI領域,計算機視覺的應用也隨著技術的進步而不斷發展。

現代游戲AI利用深度學習算法,能夠處理復雜的圖像數據,并在游戲中實現高度逼真的交互和決策。

3. 公式和函數

計算機視覺是一個涉及圖像處理、模式識別、機器學習等多個領域的復雜學科,它利用計算機和相關算法來模擬人類的視覺系統,以實現對圖像和視頻的理解和分析。在計算機視覺中,公式和函數起著至關重要的作用,它們是實現各種視覺任務的基礎。以下是對計算機視覺中一些常見公式和函數的詳細介紹:

3.1. 圖像處理基礎公式

3.1.1. 灰度化公式

平均法

將彩色圖像的紅色、綠色和藍色通道的值相加后除以3,得到灰度值。公式為:

灰度值 = (R + G + B) / 3

3.1.2. 二值化公式

全局閾值法

將圖像的灰度值與一個預設的閾值進行比較,大于閾值的像素點設置為白色(或黑色),小于閾值的像素點設置為黑色(或白色)。公式可簡化為:

二值化結果 = (灰度值 > 閾值) ? 255 : 0。

3.2.?圖像濾波公式

高斯濾波

高斯濾波是一種常用的圖像平滑方法,它通過卷積操作對圖像進行模糊處理,以去除噪聲。高斯濾波的公式為:

濾波結果 = (像素點 * 濾波模板) / 濾波模板權值之和

其中,濾波模板是一個權重矩陣,其元素值由高斯函數計算得出。

3.3. 邊緣檢測公式

Sobel算子

Sobel算子是一種用于邊緣檢測的一階導數算子。它通過計算圖像在水平和垂直方向的梯度來檢測邊緣。Sobel算子的公式包括兩個3x3的矩陣,分別用于計算水平梯度Gx和垂直梯度Gy。公式如下:

Gx = [-1 0 1; -2 0 2; -1 0 1] * 像素值

Gy = [-1 -2 -1; 0 0 0; 1 2 1] * 像素值

3.4. 特征提取公式

顏色直方圖

顏色直方圖是描述圖像顏色分布的一種特征表示方法。它通過統計每個顏色通道的像素數量來構建直方圖。公式可簡單表示為:

顏色直方圖 = 統計每個顏色通道的像素數量

3.5. 評估指標公式

在計算機視覺任務中,特別是分類和目標檢測任務中,評估模型的性能是非常重要的。以下是一些常見的評估指標公式:

3.5.1. 準確率(Accuracy)

準確率是預測正確的樣本數占總樣本數的比例。公式為:

Accuracy = (TP + TN) / (TP + TN + FP + FN)

3.5.2. 召回率(Recall)/ 查全率

召回率(或查全率)是預測為正例的樣本中實際為正例的比例。公式為:

Recall = TP / (TP + FN)

3.5.3. 精確率(Precision)/ 查準率

精確率(或查準率)是預測為正例的樣本中真正為正例的比例。公式為:

Precision = TP / (TP + FP)

3.5.4. F1分數(F1-Score)

F1分數是精確率和召回率的調和平均數,用于綜合評估模型的性能。公式為:

F1-Score = 2 * (Precision * Recall) / (Precision + Recall)

3.6. 目標檢測指標

3.6.1. 交并比(IOU)

交并比(Intersection over Union, IOU)是目標檢測中衡量預測框與真實框重疊程度的指標。公式為:

IOU = |GT ∩ Predict| / |GT ∪ Predict| = intersection / (GT + Predict - intersection)

3.6.2. 平均精確率(AP)和平均精確率均值(mAP)

AP(Average Precision)是PR曲線下的面積,用于評估單個類別的檢測性能。mAP(mean Average Precision)則是對所有類別的AP取平均,用于評估整個檢測模型的性能。

3.7. Python代碼示例

以下是一個使用Python和OpenCV庫進行圖像讀取、灰度化和二值化的簡單示例:

import cv2  # 讀取圖像  
image = cv2.imread('path_to_image.jpg')  # 灰度化  
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 二值化  
_, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)  # 顯示圖像  
cv2.imshow('Original Image', image)  
cv2.imshow('Gray Image', gray_image)  
cv2.imshow('Binary Image', binary_image)  # 等待按鍵操作后關閉窗口  
cv2.waitKey(0)  
cv2.destroyAllWindows()

上述代碼示例中的path_to_image.jpg應替換為實際圖像文件的路徑。此外,二值化閾值(在示例中為127)可能需要根據具體圖像進行調整以獲得最佳效果。

對于更高級的計算機視覺任務,如目標檢測或人臉識別,通常會使用深度學習框架(如TensorFlow或PyTorch)和預訓練的模型。

4. 運行原理

4.1. 基本原理

游戲AI運用計算機視覺的運行原理主要包括以下幾個步驟:

  1. 圖像采集:從游戲環境中捕獲圖像或視頻幀。
  2. 預處理:對圖像進行縮放、裁剪、去噪等預處理操作。
  3. 特征提取:使用圖像處理算法或深度學習模型從圖像中提取關鍵特征。
  4. 分析與理解:利用機器學習或深度學習算法對提取的特征進行分析,理解圖像中的內容和上下文。
  5. 決策與反應:基于分析結果,游戲AI做出決策并生成相應的反應或動作。

4.2. Python實現

要在游戲AI中實現計算機視覺以響應玩家行為,我們可以使用Python和一些流行的庫,如OpenCV和NumPy。以下是一個簡化的實現步驟,包括圖像采集、預處理、特征提取、圖像內容分析與理解,以及決策與反應。

首先,確保你已經安裝了必要的庫:

pip install opencv-python numpy

然后,你可以使用以下Python代碼來實現這些步驟:

import cv2  
import numpy as np  # 1. 圖像采集  
# 這里我們使用OpenCV從攝像頭捕獲實時視頻流  
cap = cv2.VideoCapture(0)  # 2. 預處理  
# 定義一個簡單的預處理函數,例如轉換為灰度圖像  
def preprocess_image(image):  return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 3. 特征提取  
# 定義一個函數來提取特征,這里我們使用簡單的邊緣檢測作為示例  
def extract_features(image):  edges = cv2.Canny(image, threshold1=100, threshold2=200)  return edges  # 4. 分析與理解圖像中內容  
# 定義一個函數來分析圖像并做出決策  
def analyze_image(features):  # 假設如果檢測到的邊緣數量超過某個閾值,則玩家正在做出某種動作  edge_count = np.sum(features > 0)  return edge_count > 1000  # 這是一個示例閾值  # 5. 決策與反應  
# 定義一個函數來根據分析結果做出反應  
def react_to_player(analysis_result):  if analysis_result:  print("玩家正在做出重要動作,AI需要做出反應!")  else:  print("玩家處于靜止狀態,AI保持觀察。")  # 主循環  
while True:  ret, frame = cap.read()  if not ret:  break  # 預處理  processed_image = preprocess_image(frame)  # 特征提取  features = extract_features(processed_image)  # 分析與理解  analysis_result = analyze_image(features)  # 決策與反應  react_to_player(analysis_result)  # 顯示圖像(可選)  cv2.imshow('Game AI Vision', frame)  # 按'q'鍵退出  if cv2.waitKey(1) & 0xFF == ord('q'):  break  # 釋放攝像頭和關閉窗口  
cap.release()  
cv2.destroyAllWindows()

?這個例子非常簡化,并且不是真正的游戲AI實現。

在實際的游戲AI中,你需要使用更復雜的圖像處理技術、特征提取方法和機器學習算法來準確地識別和響應玩家的行為。

此外,你可能還需要考慮實時性能優化、多玩家支持、網絡通信等方面的問題。

5. 優缺點

優點

  • 智能化:使游戲中的角色能夠像人類一樣“看到”并理解游戲世界,提高游戲的真實感和沉浸感。
  • 靈活性:能夠適應不同的游戲環境和場景,做出更加智能和靈活的決策。
  • 可擴展性:隨著技術的不斷進步,計算機視覺在游戲AI中的應用也將不斷拓展和深化。

缺點

  • 計算復雜度高:需要處理大量的圖像數據,對計算資源要求較高。
  • 數據依賴性強:需要大量的高質量訓練數據才能獲得良好的性能。
  • 隱私和倫理問題:在某些情況下可能涉及個人隱私和倫理問題,需要合理監管和使用控制。

6. 運用計算機視覺的游戲AI使用場景及實例

6.1. 使用場景

  • NPC行為決策:使NPC能夠根據游戲場景中的圖像數據做出更加智能的行為決策。
  • 玩家行為分析:分析玩家的游戲行為模式,優化游戲設計和平衡性。
  • 環境交互:使游戲中的角色能夠與環境中的物體進行更加真實的交互。

6.2. 實例1

一個典型的實例是在一款角色扮演游戲中,利用計算機視覺技術使NPC能夠根據玩家的位置、動作和表情做出相應的反應。

例如,當玩家靠近NPC時,NPC能夠“看到”玩家并主動發起對話;當玩家做出攻擊動作時,NPC能夠識別并采取相應的防御措施。

Python代碼

這里給出的是一個概念性的偽代碼:

# 假設有一個函數detect_player(frame)用于從游戲幀中檢測玩家  
# 和一個函數analyze_player_behavior(player_info)用于分析玩家行為  def game_loop():  while game_is_running:  frame = capture_game_frame()  # 捕獲當前游戲幀  player_info = detect_player(frame)  # 檢測玩家位置和動作  behavior = analyze_player_behavior(player_info)  # 分析玩家行為  # 根據分析結果,控制NPC的行為  control_npc_behavior(behavior)  # 注意:這里的detect_player和analyze_player_behavior函數需要具體實現,  
# 并可能涉及復雜的圖像處理、模式識別和機器學習算法。

這個偽代碼展示了如何在游戲循環中使用計算機視覺技術來分析玩家行為并控制NPC的反應。然而,在實際應用中,detect_playeranalyze_player_behavior函數的實現將非常復雜,并需要借助深度學習等高級技術。

6.3. 實例2

在計算機視覺中,從攝像頭獲取的圖像中識別出人體以及人體姿態,并提取骨架及關節數據,通常涉及到使用深度學習模型,特別是卷積神經網絡(CNN)來處理圖像,并識別出圖像中的人體以及他們的姿態。

以下是一個簡化的實現步驟,以及對應的Python代碼示例,使用了OpenPose這個流行的庫來實現人體姿態估計。

6.3.1. 實現步驟

  1. 安裝必要的庫
    • 安裝OpenPose或其他類似的人體姿態估計庫。
    • 安裝處理圖像的庫,如OpenCV。
  2. 設置攝像頭
    • 使用OpenCV來捕獲攝像頭的實時視頻流。
  3. 人體姿態估計
    • 對每一幀圖像使用OpenPose進行人體檢測和姿態估計。
    • 提取出每個人的骨架和關節數據。
  4. 顯示結果
    • 在圖像上繪制骨架和關節點。
    • 顯示處理后的圖像。
  5. (可選)保存或處理數據
    • 將骨架和關節數據保存到文件或數據庫中。
    • 進行進一步的數據分析或處理。

6.2.2. Python代碼示例

import cv2  
import pyopenpose as op  # 配置OpenPose參數  
params = {  "model_folder": "/path/to/openpose/models/",  "hand": False,  "face": False,  "body": 1,  
}  # 初始化OpenPose對象  
opWrapper = op.WrapperPython()  
opWrapper.configure(params)  
opWrapper.start()  # 打開攝像頭  
cap = cv2.VideoCapture(0)  while True:  # 讀取一幀圖像  ret, frame = cap.read()  if not ret:  break  # 使用OpenPose處理圖像  datum = op.Datum()  datum.cvInputData = frame  opWrapper.emplaceAndPop([datum])  # 提取骨架和關節數據  if datum.poseKeypoints is not None:  print("Detected people and their keypoints:")  for person in datum.poseKeypoints:  print(person)  # 這里打印出每個人的關節數據  # 在圖像上繪制骨架和關節點  cv2.imshow("OpenPose", datum.cvOutputData)  # 按'q'鍵退出  if cv2.waitKey(1) & 0xFF == ord('q'):  break  # 釋放攝像頭和關閉窗口  
cap.release()  
cv2.destroyAllWindows()

請注意,你需要將"/path/to/openpose/models/"替換為你的OpenPose模型文件夾的實際路徑。此外,確保你已經正確安裝了OpenPose和所有必要的依賴項。

這個代碼示例提供了一個基本的框架,你可以根據自己的需求進行修改和擴展。

例如,你可以添加代碼來保存關節數據,或者對數據進行進一步的分析和處理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40669.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40669.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40669.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spring 枚舉、策略模式、InitializingBean初使化組合使用示例

實現一個簡單的文本處理系統。 在這個系統中,我們將定義不同類型的文本處理策略,比如大小寫轉換、添加前綴后綴等,并使用工廠模式來管理這些策略。 1 定義一個枚舉來標識不同的文本處理類型 public enum TextProcessTypeEnum {UPPER_CASE,LO…

騰訊混元文生圖開源模型推出小顯存版本,6G顯存即可運行,并開源caption模型

7月4日,騰訊混元文生圖大模型(混元DiT)宣布開源小顯存版本,僅需6G顯存即可運行,對使用個人電腦本地部署的開發者十分友好,該版本與LoRA、ControlNet等插件,都已適配至Diffusers庫;并…

探索 Apache Paimon 在阿里智能引擎的應用場景

摘要:本文整理自Apache Yarn && Flink Contributor,阿里巴巴智能引擎事業部技術專家王偉駿(鴻歷)老師在 5月16日 Streaming Lakehouse Meetup Online 上的分享。內容主要分為以下三個部分: 一、 阿里智能引擎…

【LeetCode】全排列

目錄 一、題目二、解法完整代碼 一、題目 給定一個不含重復數字的數組 nums ,返回其 所有可能的全排列 。你可以 按任意順序 返回答案。 示例 1: 輸入:nums [1,2,3] 輸出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] …

LVS+Nginx高可用集群--基礎篇

1.集群概述 單體部署: 可以將上面內容分別部署在不同的服務器上。 單體架構的優點: 小團隊成型就可完成開發,測試,上線 迭代周期短,速度快 打包方便,運維簡單 單體架構的挑戰:單節點宕機造成…

DVWA sql手注學習(巨詳細不含sqlmap)

這篇文章主要記錄學習sql注入的過程中遇到的問題已經一點學習感悟,過程圖片會比較多,比較基礎和詳細,不存在看不懂哪一步的過程 文章目錄 靶場介紹SQL注入 lowSQL注入 MediumSQL注入 HighSQL注入 Impossible 靶場介紹 DVWA(Damn…

必備的 Adobe XD 輔助工具

想要高效便捷的使用 Adobe XD, Adobe XD 插件是必不可少的, Adobe XD 的插件非常多,但 90%都是英文,并且良莠不齊。在這兒挑選 9 個好用的 Adobe XD 插件給大家,這里是我整理的一些實用 Adobe XD 插件,讓你…

大屏開發系列——Echarts的基礎使用

本文為個人近期學習總結,若有錯誤之處,歡迎指出! Echarts在vue2中的基礎使用 一、簡單介紹二、基本使用(vue2中)1.npm安裝2.main.js引入3.使用步驟(1)準備帶有寬高的DOM容器;(2)初始化echarts實例&#xff…

gcc: warning: -Wunused-function;加了選項,為什么就不報警告呢?

文章目錄 問題clang的編譯而使用gcc是就不報問題分析原因如果是非static的函數問題 下面這個代碼段,其中這個函數hton_ext_2byte,在整個程序里就沒有使用。 static inline uint16_t hton_ext_2byte(uint8_t **p) {uint16_t v;******return v;

PHP宜邦家政服務管理系統-計算機畢業設計源碼04426

目 錄 摘要 1 緒論 1.1 選題背景與意義 1.2開發現狀 1.3論文結構與章節安排 2 宜邦家政服務管理系統系統分析 2.1 可行性分析 2.1.1 技術可行性分析 2.1.2 經濟可行性分析 2.1.3 操作可行性分析 2.2 系統功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系統用…

國標GB28181視頻匯聚平臺LntonCVS視頻監控安防平臺與國標協議對接解決方案

應急管理部門以“以信息化推動應急管理能力現代化”為總體目標,加快現代信息技術與應急管理業務深度融合,全面支持現代應急管理體系建設,這不僅是國家加強和改進應急管理工作的關鍵舉措,也是應對日益嚴峻的應急管理形勢和滿足公眾…

微信小程序的運行機制與更新機制

1. 小程序運行機制 1.1. 冷啟動與熱啟動 冷啟動為用戶第一次打開小程序時,因為之前沒有打開過,這是第一種冷啟動的情兌。第二種情況為雖然之前用戶打開過,但是小程序被用戶主動的銷毀過,這種情況下我們再次打開小程序&#xff0…

【PALM、WRF-LES】微尺度氣象數值模擬—大渦模擬技術

針對微尺度氣象的復雜性,大渦模擬(LES)提供了一種無可比擬的解決方案。微尺度氣象學涉及對小范圍內的大氣過程進行精確模擬,這些過程往往與天氣模式、地形影響和人為因素如城市布局緊密相關。在這種規模上,傳統的氣象模…

doc文檔下載

目錄 下載 安裝谷歌瀏覽器(chrome)Microsoft Edge瀏覽器 常見問題 下載 見郵件附件 安裝 谷歌瀏覽器(chrome) 打開瀏覽器,地址欄輸入:chrome://extensions/ 右上角打開開發者模式 點擊如上圖左上角的加載已解壓的拓展程序,并選擇剛剛解壓…

安卓應用開發學習:通過騰訊地圖SDK實現定位功能

一、引言 這幾天有些忙,耽誤了寫日志,但我的學習始終沒有落下,有空我就會研究《 Android App 開發進階與項目實戰》一書中定位導航方面的內容。在我的手機上先后實現了“獲取經緯度及地理位置描述信息”和“獲取導航衛星信息”功能后&#x…

afrog-漏洞掃描(挖洞)工具【了解安裝使用詳細】

★★免責聲明★★ 文章中涉及的程序(方法)可能帶有攻擊性,僅供安全研究與學習之用,讀者將信息做其他用途,由Ta承擔全部法律及連帶責任,文章作者不承擔任何法律及連帶責任。 1、afrog介紹 afrog 是一款性能卓越、快速穩定、PoC可定…

MySQL篇-SQL優化實戰-減少子查詢

回顧 上一篇了解了分析SQL使用的explain,可以點擊查看MySQL篇-SQL優化實戰了解我在寫sql的注意事項還有explain的說明,這次拿一段生產使用的sql進行優化說明。從14s優化到2.6s 待優化的SQL SELECT DISTINCTswpe.tag_number,hca.ACCOUNT_NAME customer…

VBA中類的解讀及應用第十三講:限制復選選擇,窗體模塊的搭建

《VBA中類的解讀及應用》教程【10165646】是我推出的第五套教程,目前已經是第一版修訂了。這套教程定位于最高級,是學完初級,中級后的教程。 類,是非常抽象的,更具研究的價值。隨著我們學習、應用VBA的深入&#xff0…

02-部署LVS-DR群集

1.LVS-DR工作原理 LVS-DR模式,Director Server作為群集的訪問入口,不作為網購使用,節點Director Server 與 Real Server 需要在同一個網絡中,返回給客戶端的數據不需要經過Director Server 為了響應對整個群集的訪問,…

Java WebService記

Web Services開發 常用的 Web Services 框架有 Apache Axis1 、 Apache Axis2 、 Apache CXF ,而 Apache Axis1 已經逐漸被淘汰所以本文不會討論,重點關注 Apache Axis2 及 Apache CXF 。 Apache Axis2 在IDEA中新建 Axis2Demo 項目后右鍵選擇 添加框架…