游戏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.rhkb.cn/news/369255.html

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

相关文章

电气-伺服(6)脉冲控制

一、脉冲模式原理: 运动控制器输出脉冲信号给伺服驱动器 伺服驱动器工作于位置模式 伺服驱动器内部要完成三闭环(位置闭环 、速度闭环、电流环) 脉冲和伺服控制环:脉冲的个数作用于位置环。脉冲的频率作用于速度环 二、脉冲的两…

【高性能服务器】select模型

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 IO多路复用就是复用…

Debug-017-elementUI-el-cascader组件首次选择选项不触发表单的自定义校验

前情提要: 今天维护一个表单校验的时候发现一件事情,就是在表单中使用了 el-cascader组件,希望根据接口返回数据去动态校验一下这里面的选项,符合逻辑就通过自定义的表单校验,不符合就在这一项的下面标红提示。做的时候…

Java后端每日面试题(day1)

目录 JavaWeb三大组件依赖注入的方式Autowire和Resurce有什么区别?Spring Boot的优点Spring IoC是什么?说说Spring Aop的优点Component和Bean的区别自定义注解时使用的RetentionPolicy枚举类有哪些值?如何理解Spring的SPI机制?Spr…

初阶数据结构二叉树练习系列(1)

这个系列的文章将带大家一起刷题,并且总结思路 温馨提示:本篇文章里的练习题仅适合刚学完二叉树的小白使用 相同的树 思路 情况分析:第一种情况:两棵树都为空 → 返回true 第二种情况&am…

七、MyBatis-Plus高级用法:最优化持久层开发-个人版

七、MyBatis-Plus高级用法:最优化持久层开发 目录 文章目录 七、MyBatis-Plus高级用法:最优化持久层开发目录 一、MyBatis-Plus快速入门1.1 简介1.2 快速入门回顾复习 二、MyBatis-Plus核心功能2.1 基于Mapper接口CRUDInsert方法Delete方法Update方法Se…

Elasticsearch中的post_filter后置过滤器技术

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

数据结构笔记第3篇:双向链表

1、双向链表的结构 注意:这里的 "带头" 跟前面我们说的 "头结点" 是两个概念,实际前面的在单链表阶段称呼不严谨,但是为了同学们更好的理解就直接称为单链表的头结点。 带头链表里的头结点,实际为 "哨兵…

数字IC设计-VCS和Verdi的使用

#学习记录# 前言:本文以一个简单的计数器来说明vcs和verdi的使用 1 代码文件 1.1 计数器代码 //Engineer:Mr-pn-junction module counter(input clk,input rst,output reg [5:0] count); always(posedge clk or negedge rst)beginif(!rst)coun…

自研直播系统-直播系统实战

文章目录 1 流媒体基础本文教程下载地址1.1 流媒体1.2 流式传输方式1.2.1 顺序流式传输1.2.2 实时流式传输 1.3 流媒体传输协议1.3.1 rtmp协议1.3.2 HLS协议1.3.3 RTSP协议1.3.4 视频流的对比 1.4 视频编码(codec)1.5 分辨率的规范分辨率簡介:1.5.2 分辨率單位 1.6 …

递归(三)—— 初识暴力递归之“字符串的全部子序列”

题目1 : 打印一个字符串的全部子序列 题目分析: 解法1:非递归方法 我们通过一个实例来理解题意,假设字符串str “abc”,那么它的子序列都有那些呢?" ", “a”, “b”,…

零基础STM32单片机编程入门(七)定时器PWM波输出实战含源码视频

文章目录 一.概要二.PWM产生框架图三.CubeMX配置一个TIME输出1KHZ,占空比50%PWM波例程1.硬件准备2.创建工程3.测量波形结果 四.CubeMX工程源代码下载五.讲解视频链接地址六.小结 一.概要 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写&…

「ETL趋势」FDL定时任务区分开发/生产模式、API输入输出支持自定义响应解析

FineDataLink作为一款市场上的顶尖ETL工具,集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具,进行了新的维护迭代。本文把FDL4.1.7最新功能作了介绍,方便大家对比:(产品更新详情:…

leetcode--二叉树中的最长交错路径

leetcode地址:二叉树中的最长交错路径 给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下: 选择二叉树中 任意 节点和一个方向(左或者右)。 如果前进方向为右,那么移动到当前节点的的右子节点&…

Redis 中的通用命令(命令的返回值、复杂度、注意事项及操作演示)

Redis 中的通用命令(高频率操作) 文章目录 Redis 中的通用命令(高频率操作)Redis 的数据类型redis-cli 命令Keys 命令Exists 命令Expire 命令Ttl 命令Type命令 Redis 的数据类型 Redis 支持多种数据类型,整体来说,Redis 是一个键值对结构的,…

智能光伏开发都能用到什么软件和工具?

随着全球对可再生能源的日益重视和光伏技术的快速发展,智能光伏开发已成为推动能源转型的重要力量。在光伏项目的全生命周期中,从设计、建设到运营管理,各种软件和工具的应用发挥着至关重要的作用。 一、光伏系统设计软件 1、PVsyst PVsyst…

【ECCV 2024】首个跨模态步态识别框架:Camera-LiDAR Cross-modality Gait Recognition

【ECCV 2024】首个跨模态步态识别框架:Camera-LiDAR Cross-modality Gait Recognition 简介:主要方法:实验结果: 论文:https://arxiv.org/abs/2407.02038 简介: 步态识别是一种重要的生物特征识别技术。基…

16_更快的速度与精度:Faster R-CNN

回顾R-CNN:链接 回顾Fast R-CNN:链接 1.1 简介 Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。同样使用VGG16作推理速度在GPU上达到5fps(包括候选区域的生成),准确率为网络的backbone,也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中…

狂赚三个亿,百亿医用耗材上市公司重金押注老人轮椅

布局海外市场,轮椅销量翻两番 作者 | 艾米莉 排版 | 张思琪 抛砖引玉 1.年销售60万台轮椅,英科医疗如何做到? 2.老年人轮椅是出海,还是深耕国内市场? 3.2022年全球轮椅市场规模为48亿美元,谁在喝汤&…

一文讲解Docker入门到精通

一、引入 1、什么是虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,它允许在一台物理机上创建多个独立的虚拟环境,这些环境被称为虚拟机(VM)。每个虚拟机都可以…