游戏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.mzph.cn/diannao/40669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯混元文生图开源模型推出小显存版本,6G显存即可运行,并开源caption模型

7月4日,腾讯混元文生图大模型(混元DiT)宣布开源小显存版本,仅需6G显存即可运行,对使用个人电脑本地部署的开发者十分友好,该版本与LoRA、ControlNet等插件,都已适配至Diffusers库;并…

探索 Apache Paimon 在阿里智能引擎的应用场景

摘要:本文整理自Apache Yarn && Flink Contributor,阿里巴巴智能引擎事业部技术专家王伟骏(鸿历)老师在 5月16日 Streaming Lakehouse Meetup Online 上的分享。内容主要分为以下三个部分: 一、 阿里智能引擎…

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…

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 项目后右键选择 添加框架…

【Android源码】Gerrit安装

前言 如果你打开 https://android.googlesource.com/platform/manifest,就会发现,google官方管理Android源码,使用的是Gerrit。Android系统源码是非常大的,用Git肯定是不适合。对于大型项目,得用Gerrit,今…

NoSQL之Redis高可用与优化

一、Redis高可用 在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证…

二叉树的链式访问 与 二叉树专题

目录 二叉树的前、中、后序遍历求二叉树第K层节点的个数二叉树查找值为x的节点leetcode相同的树对称二叉树二叉树的前序遍历另一棵子树牛客 二叉树的遍历 二叉树的前、中、后序遍历 1.前序遍历:先访问根节点,再访问左子树,最后访问右子树 根…