Unity AI Sentis 基础教程

news2024/10/5 16:25:08

Unity AI Sentis基础教程

  • Unity AI Sentis基础教程
    • Unity AI 内测资格申请
    • Unity 项目
      • Package Manager
      • 开始尝试
      • 模型下载
      • 识别图片
      • 完整代码
      • 代码搭载运行
    • 射线绘画 URP(扩展)
      • 射线绘画脚本
      • 脚本搭载
      • 效果

Sentis 是 AI 模型的本地推理引擎,它利用最终用户设备上的计算,而不是云服务器。它可以在可以部署 Unity 运行时的任何位置运行。它取代了 Barracuda 并解决了我们在 Barracuda 处于早期原型阶段时收到的许多反馈。最重要的是,Sentis 可以以游戏速度运行许多神经网络。Sentis 目前处于开放测试阶段,公开发布时可用于商业用途。届时Sentis 将对所有 Unity 用户免费开放,并可用于无限制的本地推理。

Unity AI Sentis基础教程

Sentis 允许您在ONNX 格式 进入 Unity 编辑器,然后在所有 Unity 的用户设备上实时优化和运行推理支持的平台。

可应用示例:
1.图像放大:放大低分辨率图像、模型、纹理等
2.风格迁移:将场景的外观或图像效果转换为新风格
3.不可玩角色 (NPC):自动对话
4.语音识别 (NLP):解释实时语音
5.身体/物体检测:使用相机
6.深度估计:使用相机(检测物体)
7.图像、视频和 3D 模型分类:检测屏幕上的对象(检测深度)
8.手写分类:检测手写字母、符号或数字
9.创造独一无二的玩家体验:生成无限独特的游戏场景
10.动画:将自动姿势绑定应用于刚体
11.模拟助手:用神经网络近似一个复杂的函数来驱动游戏逻辑
12.时间序列:异常检测、预测/预测

版本需求:Unity 2021.3 LTS(或更高版本)

Unity AI 内测资格申请

Unity AI 内测资格申请链接: Unity AI

请添加图片描述

Unity 项目

项目创建

在这里插入图片描述

Package Manager

1. 打开 Window -> Package Manager
2. 点击 加号
3. 选择 Add package by name

请添加图片描述

在输入框 键入 com.unity.sentis 并点击添加

请添加图片描述

在搜索框搜索 Sentis 如果有那就证明下载正确 
如果没有就可能是 Unity AI 内测资格 暂时还未通过

请添加图片描述

开始尝试

层级创建

请添加图片描述

代码搭载

请添加图片描述

模型下载

随便下载一个就行 我下载的是 MNIST-12

手写数字识别: 模型下载地址

请添加图片描述

只在放在 Assets 之下都行

请添加图片描述

识别图片

在这下载我不知道会不会有问题  要是下载完之后有问题的话  大家就在PS 中随便画一下就行

我这里的长宽是 28*28 

需要注意的是图片越大越消耗性能

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

完整代码

using UnityEngine;
using Unity.Sentis;
using Unity.Sentis.Layers;

/// <summary>
/// 手写体数字 识别
/// </summary>
public class ClassifyHandwrittenDigit_ZH : MonoBehaviour
{
    [Header("需要辨别的 输入")]
    public Texture2D _InputTexture;
    [Header("使用模型")]
    public ModelAsset _ModelAsset;

    //加载模型
    Model _RuntimeModel;
    //工作流
    IWorker _Worker;

    [Header("返回 概率列表")]
    public float[] _Results;

    void Start()
    {

    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Q))
        {
            DiscernAndJudge(_InputTexture);
        }
    }

    /// <summary>
    /// 识别于判断
    /// </summary>
    public void DiscernAndJudge(Texture2D _Texture2D)
    {
        // 创建运行时模型
        _RuntimeModel = ModelLoader.Load(_ModelAsset);

        // 将 softmax 层添加到模型的末尾,而不是非 softmax 输出
        string _SoftmaxOutputName = "Softmax_Output";
        _RuntimeModel.AddLayer(new Softmax(_SoftmaxOutputName, _RuntimeModel.outputs[0]));
        _RuntimeModel.outputs[0] = _SoftmaxOutputName;

        // 将输入数据创建为张量
        using Tensor _InputTensor = TextureConverter.ToTensor(_Texture2D, width: 28, height: 28, channels: 1);

        // 创建引擎
        //在 Sentis 中,工作线程是推理引擎。您可以创建一个工作线程以将模型分解为可执行任务,在 GPU 或 CPU 上运行任务,然后输出结果。
        //例如,创建一个使用 Sentis 计算着色器在 GPU 上运行的工作线程:
        _Worker = WorkerFactory.CreateWorker(BackendType.GPUCompute, _RuntimeModel);

        // 使用输入数据运行模型
        _Worker.Execute(_InputTensor);

        // 获得结果
        using TensorFloat _OutputTensor = _Worker.PeekOutput() as TensorFloat;

        // 在读取张量数据之前将其移动到CPU
        _OutputTensor.MakeReadable();

        //返回数据填充
        _Results = _OutputTensor.ToReadOnlyArray();
    }

    /// <summary>
    /// 当前脚本处于 禁用或非活动时执行
    /// </summary>
    void OnDisable()
    {
        // 告诉GPU我们已经处理完引擎使用的内存了
        _Worker.Dispose();
    }
}

代码搭载运行

总体来说 只要大于 0.90 就证明是该的数字
下列 Results 返回数组 第几位就是 数字几
1

请添加图片描述

5

请添加图片描述

2

请添加图片描述

射线绘画 URP(扩展)

射线绘画:
连连看  Shader Graph

请添加图片描述

局部 1

请添加图片描述

局部 2

请添加图片描述

为什么要这样连接

请添加图片描述

Graph 基础设置

请添加图片描述

射线绘画脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 绘画
/// </summary>
public class Drawing_ZH : MonoBehaviour
{

    [Header("Camera")]
    public Camera _MainCamera;

    [Header("画布贴图")]
    public RenderTexture _CurrentRT;
    [Header("临时贴图")]
    public RenderTexture _TempRT;

    [Header("绘画 材质球")]
    private Material _DrawMat;

    [Header("画布贴图  大小")]
    public int _TextureSize = 512;

    [Header("绘画 笔刷大小")]
    [Range(0, 1)]
    public float _DrawRadius = 0.2f;


    void Start()
    {
        _MainCamera = Camera.main;

        _CurrentRT = CreateRT();
        _TempRT = CreateRT();

        _DrawMat = GetComponent<MeshRenderer>().material;
    }

    void Update()
    {
        //鼠标左键 射线检测
        if (Input.GetMouseButton(1))
        {
            //射线生成
            Ray _Ray = _MainCamera.ScreenPointToRay(Input.mousePosition);
            //返回结构体
            RaycastHit _Hit;
            //触发
            if (Physics.Raycast(_Ray, out _Hit))
            {
                //图案绘制

                DrawAt(_Hit.textureCoord.x, _Hit.textureCoord.y, _DrawRadius);

                print("射线绘画");
            }
        }
    }

    /// <summary>
    /// 图像绘制
    /// </summary>
    /// <param 坐标 X="x"></param>
    /// <param 坐标 Y="y"></param>
    /// <param 半径="_Radius"></param>
    private void DrawAt(float x, float y, float _Radius)
    {
        //原本绘制贴图
        _DrawMat.SetTexture("_SourceTex", _CurrentRT);

        //绘制的位置和大小
        _DrawMat.SetVector("_Pos", new Vector4(x, y, _Radius, 0));

        //绘制 提交
        Graphics.Blit(null, _TempRT, _DrawMat);

        //贴图交换
        RenderTexture _Rt = _TempRT;
        _TempRT = _CurrentRT;
        _CurrentRT = _Rt;
    }

    /// <summary>
    /// 新建 RenderTexture 画布
    /// </summary>
    /// <returns></returns>
    public RenderTexture CreateRT()
    {
        RenderTexture _Rt = new RenderTexture(_TextureSize, _TextureSize, 0, RenderTextureFormat.RFloat);
        _Rt.Create();
        return _Rt;
    }
}

脚本搭载

请添加图片描述

效果

请添加图片描述

暂时先这样吧,如果有时间的话就会更新 Muse 精灵 AI,实在看不明白就留言,看到我会回复的。
路漫漫其修远兮,与君共勉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1066548.html

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

相关文章

漏洞扫描与利用

1.通过Kali对服务器场景server2003以半开放式不进行ping的扫描方式并配合a&#xff0c;要求扫描信息输出格式为xml文件格式&#xff0c;从生成扫描结果获取局域网&#xff08;例如172.16.101.0/24&#xff09;中存活靶机&#xff0c;以xml格式向指定文件输出信息&#xff08;使…

轻量级接口自动化测试框架

大致思路: jmeter完成接口脚本,Ant完成脚本执行并收集结果生成报告,最后利用jenkins完成脚本的自动集成运行. 环境安装: 1.jdk1.7 配置环境变量(参考前面的分页) 2.jmeter解压到本地,ant解压到本地 3.Ant解压到本地,并配置环境变量 ANT_HOME:D:\jmeter\apache-ant-1.9.6 P…

学习css 伪类:has

学习抖音&#xff1a; 渡一前端提薪课 首先我们看下:has(selector)是什么 匹配包含&#xff08;相对于 selector 的 :scope&#xff09;指定选择器的元素。可以认为 selector 的前面有一个看不见的 :scope 伪类。它的强大之处是&#xff0c;可以实现父选择器和前面兄弟选择器…

2023年最新问卷调查工具排行榜:揭秘实力榜单

问卷调查是从目标受众那里收集有价值的反馈和见解的有效方式。正确的调查问卷工具可以使问卷的创建、分发和分析变得更加容易和高效。在本文中&#xff0c;我们将问卷调查工具排行榜实力榜&#xff0c;为大家选择问卷平台的时候提供有价值的参考意见。 1、Zoho Survey Zoho S…

三分钟阿里云服务器全方位介绍(看一篇就够了)

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云百科aliyunbai…

经典文献阅读之--MapTR(环视车道线地图提取)

0. 简介 最近环视图像处理其实已经非常火了&#xff0c;最近地平线&华科则是提出了一种新的环视车道线地图提取工具。高清&#xff08;HD&#xff09;地图提供了驾驶场景丰富而精确的环境信息&#xff0c;是自动驾驶系统规划中基础且不可或缺的组成部分。《MapTR: Structu…

“益路同行”栏目专访 第06期—小星星关爱联盟创始人魏洁荣老师

中国善网在本届&#xff08;第十届&#xff09;慈展会上特别推出了《益路同行》采访栏目&#xff0c;《益路同行》栏目旨在寻觅公益之路上同行者的故事&#xff0c;挖掘公益更深层次的内涵&#xff0c;探索新时代公益发展道路。希望公益企业、人物、故事被更多人看到&#xff0…

软件测试/测试开发丨App自动化测试-弹窗异常处理

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27692 黑名单处理 运行过程中不定时弹框&#xff08;广告弹窗&#xff0c;升级提示框&#xff0c;新消息提示框等等&#xff09; 弹框不是 BUG&#xff0…

2023/9/28 -- ARM

【内存读写指令】 int *p0X12345678 *p100;//向内存中写入数据 int a *p;//从内存读取 1.单寄存器内存读写指令 1.1 指令码以及功能 向内存中写&#xff1a; str:向内存中写一个字(4字节)的数据 strh:向内存写半个字&#xff08;2字节&#xff09;的数据 strb:向内存写一个字…

TS中Class类的继承

我们有下面一个代码&#xff0c;其中创建了一个Dog类和Cat类&#xff0c;这两个类中都有姓名和年龄属性和bark方法 class Dog {name: string;age: number;constructor(name: string, age: number) {this.name name;this.age age;}bark() {console.log(this.name "汪汪…

温故 Spring5 特性

一、前言 随着技术的不断发展&#xff0c;Spring框架也在不断地更新迭代。我们将温故Spring 5的特性&#xff0c;并探讨如何在实际项目中应用这些特性来提升开发效率和系统性能。 Spring 5是Spring框架的一个重要版本&#xff0c;它带来了许多新特性&#xff0c;包括对Java 8…

Eclipse iceoryx(千字自传)

1 在固定时间内实现无任何限制的数据传输 在汽车automotive、机器人robotics和游戏gaming等领域,必须在系统的不同部分之间传输大量数据。使用Linux等操作系统时,必须使用进程间通信(IPC)机制传输数据。Eclipse iceoryx是一种中间件,它使用零拷贝Zero-Copy、共享内存Share…

MySQL笔记(进阶篇)

包含内容: 存储引擎 索引 SQL优化 视图/存储过程/触发器 锁 InnoDB引擎 MySQL管理 存储引擎 MySQL体系结构 连接层:最上层是一些客户端和连接服务,主要完成一些类似于连接处理,授权认证,及相关的安全方案.服务器也会为安全接入的每个客户验证它所…

SAP配置BOM数据结构详解-整车(SAP配置BOM攻略十)

一、MBOM数据 1、一个产品由多个物料构成&#xff0c;每个物料构成MBOM的一行。 2、工程变更号在BOM数据中是必须的。变更号的实质是通过变更号指向某个生效日期。通过变更号关联的日期区间&#xff0c;可用决定这个物料数据是否启用。 二、特征数据 1、一个车可用分类为多个…

P1-P5_动手学深度学习-pytorch(李沐版,粗浅的笔记)

目录 预告  1.学习深度学习的关键是动手  2.什么是《动手学深度学习》  3.曾经推出的版本&#xff08;含github链接&#xff09; 一、课程安排  1.目标  2.内容  3.上课形式  4.你将学到什么  5.资源 二、深度学习的介绍  1.AI地图  2.深度学习在一些应用上…

【数据结构与算法】之“堆”介绍

目录 堆的基本存储 一、概念及其介绍 二、适用说明 三、结构图示 堆的 shift up 堆的 shift down 基础堆排序 一、概念及其介绍 二、适用说明 三、过程图示 优化堆排序 索引堆及其优化 一、概念及其介绍 二、适用说明 三、结构图示 堆的基本存储 一、概念及其介…

SiegedSec 黑客组织袭击北约网络系统

Security Affairs 网站披露&#xff0c;一个名为 SiegedSec 的网络攻击组织近期成功入侵了北约网络系统&#xff0c;并在网上散布盗取的大量非机密文件。 目前&#xff0c;北约正在就此事展开积极调查&#xff0c;其所属官员发表声明表示&#xff0c;北约内部已经组织了大量的网…

智能导览与实时监测:数字孪生助力景区管理

在当今旅游业快速发展的背景下&#xff0c;景区“人流管理”成为了一个越来越重要的问题。数字孪生技术由于其自身优势&#xff0c;可以为景区管理者提供更智能、更高效的管理方案。本文结合山海鲸可视化几个数字孪生案例带大家一起了解数字孪生在景区人流管理方面的应用&#…

计算机竞赛 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基…

架构师选择题--计算机网络

架构师选择题--计算机网络 真题 真题 d http:80 https:httpssl &#xff1a;443 b b pop3是邮件接收协议&#xff1a;110 SMTP是邮件发送协议&#xff1a;25 http:80 A 网络隔离&#xff1a;防火墙&#xff08;逻辑&#xff09;&#xff0c;网闸&#xff08;物理&#xff09; …