Sentis 是 AI 模型的本地推理引擎,它利用最終用戶設(shè)備上的計算,而不是云服務(wù)器。它可以在可以部署 Unity 運(yùn)行時的任何位置運(yùn)行。它取代了 Barracuda 并解決了我們在 Barracuda 處于早期原型階段時收到的許多反饋。最重要的是,Sentis 可以以游戲速度運(yùn)行許多神經(jīng)網(wǎng)絡(luò)。Sentis 目前處于開放測試階段,公開發(fā)布時可用于商業(yè)用途。屆時Sentis 將對所有 Unity 用戶免費(fèi)開放,并可用于無限制的本地推理。
Unity AI Sentis基礎(chǔ)教程
Sentis 允許您在ONNX 格式 進(jìn)入 Unity 編輯器,然后在所有 Unity 的用戶設(shè)備上實(shí)時優(yōu)化和運(yùn)行推理支持的平臺。
可應(yīng)用示例:
1.圖像放大:放大低分辨率圖像、模型、紋理等
2.風(fēng)格遷移:將場景的外觀或圖像效果轉(zhuǎn)換為新風(fēng)格
3.不可玩角色 (NPC):自動對話
4.語音識別 (NLP):解釋實(shí)時語音
5.身體/物體檢測:使用相機(jī)
6.深度估計:使用相機(jī)(檢測物體)
7.圖像、視頻和 3D 模型分類:檢測屏幕上的對象(檢測深度)
8.手寫分類:檢測手寫字母、符號或數(shù)字
9.創(chuàng)造獨(dú)一無二的玩家體驗(yàn):生成無限獨(dú)特的游戲場景
10.動畫:將自動姿勢綁定應(yīng)用于剛體
11.模擬助手:用神經(jīng)網(wǎng)絡(luò)近似一個復(fù)雜的函數(shù)來驅(qū)動游戲邏輯
12.時間序列:異常檢測、預(yù)測/預(yù)測
版本需求:Unity 2021.3 LTS(或更高版本)
Unity AI 內(nèi)測資格申請
Unity AI 內(nèi)測資格申請鏈接: Unity AI
Unity 項目
項目創(chuàng)建
Package Manager
1. 打開 Window -> Package Manager
2. 點(diǎn)擊 加號
3. 選擇 Add package by name
在輸入框 鍵入 com.unity.sentis 并點(diǎn)擊添加
在搜索框搜索 Sentis 如果有那就證明下載正確
如果沒有就可能是 Unity AI 內(nèi)測資格 暫時還未通過
開始嘗試
層級創(chuàng)建
代碼搭載
模型下載
隨便下載一個就行 我下載的是 MNIST-12
手寫數(shù)字識別: 模型下載地址
只在放在 Assets 之下都行
識別圖片
在這下載我不知道會不會有問題 要是下載完之后有問題的話 大家就在PS 中隨便畫一下就行
我這里的長寬是 28*28
需要注意的是圖片越大越消耗性能
完整代碼
using UnityEngine;
using Unity.Sentis;
using Unity.Sentis.Layers;
/// <summary>
/// 手寫體數(shù)字 識別
/// </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)
{
// 創(chuàng)建運(yùn)行時模型
_RuntimeModel = ModelLoader.Load(_ModelAsset);
// 將 softmax 層添加到模型的末尾,而不是非 softmax 輸出
string _SoftmaxOutputName = "Softmax_Output";
_RuntimeModel.AddLayer(new Softmax(_SoftmaxOutputName, _RuntimeModel.outputs[0]));
_RuntimeModel.outputs[0] = _SoftmaxOutputName;
// 將輸入數(shù)據(jù)創(chuàng)建為張量
using Tensor _InputTensor = TextureConverter.ToTensor(_Texture2D, width: 28, height: 28, channels: 1);
// 創(chuàng)建引擎
//在 Sentis 中,工作線程是推理引擎。您可以創(chuàng)建一個工作線程以將模型分解為可執(zhí)行任務(wù),在 GPU 或 CPU 上運(yùn)行任務(wù),然后輸出結(jié)果。
//例如,創(chuàng)建一個使用 Sentis 計算著色器在 GPU 上運(yùn)行的工作線程:
_Worker = WorkerFactory.CreateWorker(BackendType.GPUCompute, _RuntimeModel);
// 使用輸入數(shù)據(jù)運(yùn)行模型
_Worker.Execute(_InputTensor);
// 獲得結(jié)果
using TensorFloat _OutputTensor = _Worker.PeekOutput() as TensorFloat;
// 在讀取張量數(shù)據(jù)之前將其移動到CPU
_OutputTensor.MakeReadable();
//返回數(shù)據(jù)填充
_Results = _OutputTensor.ToReadOnlyArray();
}
/// <summary>
/// 當(dāng)前腳本處于 禁用或非活動時執(zhí)行
/// </summary>
void OnDisable()
{
// 告訴GPU我們已經(jīng)處理完引擎使用的內(nèi)存了
_Worker.Dispose();
}
}
代碼搭載運(yùn)行
總體來說 只要大于 0.90 就證明是該的數(shù)字
下列 Results 返回數(shù)組 第幾位就是 數(shù)字幾
1
5
2
射線繪畫 URP(擴(kuò)展)
射線繪畫:
連連看 Shader Graph
局部 1
局部 2
為什么要這樣連接
Graph 基礎(chǔ)設(shè)置
射線繪畫腳本
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("繪畫 材質(zhì)球")]
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()
{
//鼠標(biāo)左鍵 射線檢測
if (Input.GetMouseButton(1))
{
//射線生成
Ray _Ray = _MainCamera.ScreenPointToRay(Input.mousePosition);
//返回結(jié)構(gòu)體
RaycastHit _Hit;
//觸發(fā)
if (Physics.Raycast(_Ray, out _Hit))
{
//圖案繪制
DrawAt(_Hit.textureCoord.x, _Hit.textureCoord.y, _DrawRadius);
print("射線繪畫");
}
}
}
/// <summary>
/// 圖像繪制
/// </summary>
/// <param 坐標(biāo) X="x"></param>
/// <param 坐標(biāo) 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;
}
}
腳本搭載
效果
文章來源:http://www.zghlxwxcb.cn/news/detail-759838.html
暫時先這樣吧,如果有時間的話就會更新 Muse 精靈 AI,實(shí)在看不明白就留言,看到我會回復(fù)的。
路漫漫其修遠(yuǎn)兮,與君共勉。文章來源地址http://www.zghlxwxcb.cn/news/detail-759838.html
到了這里,關(guān)于Unity AI Sentis 基礎(chǔ)教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!