Unity使用NatML的NatDevice功能调用外部摄像机

news/2024/3/28 20:57:40/文章来源:https://blog.csdn.net/f_957995490/article/details/129384215

Unity使用NatML的NatDevice功能调用外部摄像机

    • NatCam
    • NatDevice
      • 广泛和轻量级
    • 在Unity中使用NatDevice
      • 导入NatDevice
      • 指定访问密钥
      • 运行摄像头预览
      • 示例测试结果

NatCam

最开始在Unity中使用WebCamTexture获取外部摄像机的画面。后来发现WebCamTexture的功能过于简单,外部摄像机的很多深层效果无法实现。故使用了插件NatCam,但现在此插件已经下架,上架了全新版本,可发布全平台名称NatDevice。
该文章就将NatDevice的下载和使用,做一个简单的介绍记录。其中大部分都来自官网和GitHub:

  • VideoKit的NatDevice官网文档
  • 插件GitHub

NatDevice

适用于Unity引擎的高性能、跨平台媒体设备流传输。
NatDevice是一个跨平台的媒体设备API,它简化了您的摄像头和麦克风工作流程。首先,创建一个媒体设备:

  • 摄像机
// Create a device query for a camera device
var filter = MediaDeviceCriteria.CameraDevice;
var query = new MediaDeviceQuery(filter);
// Get the camera device
var device = query.current as CameraDevice;
  • 麦克风
// Create a device query for a microphone device
var filter = MediaDeviceCriteria.AudioDevice;
var query = new MediaDeviceQuery(filter);
// Get the microphone device
var device = query.current as AudioDevice;

然后从设备获取流媒体数据:

  • 摄像机
// Start streaming camera images
device.StartRunning(OnCameraImage);
void OnCameraImage (CameraImage cameraImage)
{// Do stuff...
}
  • 麦克风
// Start streaming audio sample buffers
device.StartRunning(OnAudioBuffer);
void OnAudioBuffer (AudioBuffer audioBuffer)
{// Do stuff...
}

广泛和轻量级

NatDevice是一个轻量级API,为使用媒体设备提供了广泛的功能。功能包括:

  • 流摄像头预览和麦克风音频与非常小的延迟。
  • 支持高分辨率相机预览,在全高清和更高的支持。
  • 支持指定麦克风采样率和通道计数。
  • 广泛的相机控制,包括高分辨率照片捕捉,闪光灯,对焦,手动曝光,白平衡,手电筒,变焦和方向支持。
  • 广泛的元数据,包括曝光偏差,曝光持续时间,ISO,焦距等。
  • 支持卡拉ok和语音通话应用程序的回音消除麦克风。
  • 与NatML集成,实现低延迟、高性能。

在Unity中使用NatDevice

导入NatDevice

首先,用Unity包管理器(Package Manag)导入API,方法是将下面的设置添加到项目的Packages/manifest.json文件中:

{"scopedRegistries": [{"name": "NatML","url": "https://registry.npmjs.com","scopes": ["ai.natml"]}],"dependencies": {"ai.natml.natdevice": "1.2.3"}
}

这里因为我使用的Unity版本(2020.3.5)的原因,所以我是用的插件是1.2.3版本,可在下图中插件GitHub的界面选择自己所需的版本下载使用:
Tags

指定访问密钥

为了使用NatDevice,您需要一个NatML访问密钥,以及有效的云计划订阅从NatML中心检索访问权限:https://hub.natml.ai/profile。
这里注册使用的方式做简单的介绍:

  • 点击上面的链接;
  • 在弹出的网页中输入所需的邮箱地址;
  • 登录邮箱,找到收到的邮件,点击下图中的Log in to NatML按钮;
    Login
  • 刷新https://hub.natml.ai/profile页面,就会出现Access Key
    Access Key

获得访问密钥后,将其添加到Project Settings -> NatML中:

使用NatDevice需要一个活动的NatML MediaKit订阅。你可以免费试用,但功能有限。请参阅常见问题解答。

运行摄像头预览

现在我们全部设置好了,让我们编写一个最小的示例来显示相机预览。

using NatML.Devices;
using NatML.Devices.Outputs;
using System;
using UnityEngine;
using UnityEngine.UI;public class HelloCam : MonoBehaviour
{[Header(@"UI")]public RawImage rawImage;public AspectRatioFitter aspectFitter;async void Start(){//为后置摄像头创建一个设备查询Predicate<IMediaDevice> filter = MediaDeviceCriteria.RearCamera;为前置摄像头创建一个设备查询//Predicate<IMediaDevice> filter = MediaDeviceCriteria.FrontCamera;MediaDeviceQuery query = new MediaDeviceQuery(filter);//推进下一个满足提供条件的可用设备query.Advance();//获取摄像设备CameraDevice device = query.current as CameraDevice;//device.exposureBias = value;//曝光调节//device.zoomRatio = value;//焦距调节//device.torchMode = CameraDevice.TorchMode.Maximum;//CameraDevice.TorchMode.Off;//手电筒//开始预览相机TextureOutput textureOutput = new TextureOutput();//请耐心等待解释device.StartRunning(textureOutput);//在我们的UI中显示预览Texture2D previewTexture = await textureOutput;rawImage.texture = previewTexture;aspectFitter.aspectRatio = (float)previewTexture.width / previewTexture.height;}
}

现在,让我们来设置UI。我们将使用RawImage来显示相机预览到屏幕上。我们还将添加一个AspectRatioFitter,以便预览显示看起来不会被拉伸。

现在,让我们在我们的场景中设置HelloCam。我们将创建一个空的游戏对象并添加脚本。然后,分配 我们上面创建的RawImageAspectRatioFitter

现在可以打包运行测试了。

示例测试结果

经过测试,出了画面有一定的延迟,没有其他毛病。
延迟的问题可能是,测试的手机本身性能的问题。
文章如有遗漏错误,欢迎指正。

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

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

相关文章

记一次接口远程调用异常排查链路 Remote peer closed connection before all data could be read

前言&#xff1a; 异常信息&#xff1a; java.io.IOException: UT000128: Remote peer closed connection before all data could be read 在九月份-十月初一直都被这个问题困扰&#xff5e; 排查链路 第一次、二次、三次排查该问题&#xff1a; 当时看到”Remote peer c…

《安富莱嵌入式周报》第305期:超级震撼数码管瀑布,使用OpenAI生成单片机游戏代码的可玩性,120通道逻辑分析仪,复古电子设计,各种运动轨迹函数源码实现

往期周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 说明&#xff1a; 谢谢大家的关注&#xff0c;继续为大家盘点上周精彩内容。 视频版&#xff1a; https://www.bi…

lvgl 笔记 基础对象与组件

一、基础对象 1.1基础对象简介 lvgl 库是纯 c 语言编写的&#xff0c;使用结构体实现类的操作。其所有组件都继承字lv_obj_t&#xff0c;可以使用他的属性和方法。 创建一个基本对象非常简单&#xff1a; lv_obj_t* obj1 lv_obj_create(lv_scr_act()); 其中填入的 lv_scr_a…

Python面向对象的三大特征 - - 封装、继承、多态

目录 一、三大特征介绍 1、封装&#xff08;隐藏&#xff09; 2、继承 3、多态 二、继承 1、子类扩展父类 1.语法格式 2.构造函数 2、类成员的继承和重写 1. 成员继承 2. 方法重写 3、查看类的继承层次结构 4、object根类 1.描述 2. dir() 查看对象属性&#xff…

洗地机哪个牌子比较好?家用洗地机推荐

洗地机是可以做到扫地的同时把地也拖了&#xff0c;可以做到高效清洁&#xff0c;减轻家务负担。还具有杀菌功能&#xff0c;不用担心拖完地之后地面还有细菌滋生啦&#xff0c;洗地机可以做到即洗即干&#xff0c;无需等待拖完地之后还潮湿不能走路&#xff0c;尤其对于木地板…

2024秋招BAT核心算法 | 详解图论

图论入门与最短路径算法 图的基本概念 由节点和边组成的集合 图的一些概念&#xff1a; ①有向边&#xff08;有向图&#xff09;&#xff0c;无向边&#xff08;无向图&#xff09;&#xff0c;权值 ②节点&#xff08;度&#xff09;&#xff0c;对应无向图&#xff0c;…

统计学 一元线性回归

统计学 一元线性回归 回归&#xff08;Regression&#xff09;&#xff1a;假定因变量与自变量之间有某种关系&#xff0c;并把这种关系用适当的数学模型表达出来&#xff0c;利用该模型根据给定的自变量来预测因变量 线性回归&#xff1a;因变量和自变量之间是线性关系 非线…

CF756div3 vp

又被薄纱了&#xff0c;rk就不放了&#xff0c;好丢人QwQDashboard - Codeforces Round 756 (Div. 3) - CodeforcesA. Make Even小分类讨论题意&#xff1a;给定一个数&#xff0c;每次操作可以选取其前缀然后翻转其前缀&#xff0c;问你最少操作几次可以把该数变为偶数思路&am…

HCIP---回顾HCIA

HCIA回顾&#xff1a; 抽象语言---编码 编码---二进制 二进制---电信号 处理电信号 OSI参考模型----OSI/RM (Open System Interconnect-----开放式系统互连) 应用层&#xff1a;为终端用户提供网络服务接口 表示层&#xff1a;提供数据格式转换服务 会话层&#xff1a…

可视化项目管理,控制项目进度,项目经理需要做好以下工作

对于项目的管理者来说&#xff0c;项目信息透明&#xff0c;能够更容易让管理者发现项目中的问题&#xff0c;及时找到问题的原因和相关任务的责任人。 当项目信息能相对精准地呈现给管理者时&#xff0c;也能促进项目成员也能更加认真负责的完成任务&#xff0c;不会找借口推…

Verilog 学习第八节(数码管段码显示)

共阴极数码管&#xff1a;低电平端接的都是0&#xff0c;高电平端哪里设置为1 &#xff0c;哪里就亮~ 共阳极数码管与之相反~ 视觉暂留&#xff1a; 对于三位的共阴极数码管 第0.01s&#xff1a;让数码管0的a段亮&#xff0c;其他数码管全灭 Sel0为高电平&#xff0c;sel1和sel…

开源鸿蒙南向嵌入学习笔记——NAPI框架学习(一)

开源鸿蒙南向嵌入学习笔记——NAPI框架学习&#xff08;一&#xff09; 前言——系列介绍 本系列文章主要是记录笔者在鸿蒙南向的学习与工作中的知识点笔记记录&#xff0c;其中不止会针对鸿蒙中的学习问题进行思考与记录&#xff0c;也会对涉及到的一些嵌入式等其他领域知识&…

Telink之标准SDK的介绍_1

前提&#xff1a;常见的项目架构&#xff1a;应用层----》驱动层----》硬件层 1、软件组织架构 顶层⽂件夹( 8 个)&#xff1a; algorithm&#xff0c;application&#xff0c;boot&#xff0c;common&#xff0c;drivers&#xff0c;proj_lib&#xff0c;stack&#xff0c;v…

HBase常用Shell命令

HBase提供了一个非常方便的命令行交互工具HBase Shell。通过HBase Shell&#xff0c;HBase可以与MySQL命令行一样创建表、索引&#xff0c;也可以增加、删除和修改数据&#xff0c;同时集群的管理、状态查看等也可以通过HBase Shell实现。 一、数据定义语言 数据定义语言&…

LeetCode 1599. Maximum Profit of Operating a Centennial Wheel【数组,模拟】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

[ 攻防演练演示篇 ] 利用 shiro 反序列化漏洞获取主机权限

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

ATool软件使用实验(22)

实验目的 1、学习ATool软件监控主机行为的原理&#xff1b; 2、学习利用ATool软件监控可疑进程的行为&#xff1b; 3、学习利用ATool软件实现对本机进行文件、注册表管理&#xff1b; 4、学习利用ATool软件实现对本机进行内核模块信息和HOOK信息查看。 预备知识 ATool是针…

测试按方向的分类

按方向分(都是在系统测试阶段测试的) 功能测试&#xff1a;举例说明什么是功能 性能测试 ①压力测试&#xff1a;不断地增加压力&#xff0c;从而找到系统的极限 ②负载测试&#xff1a;系统在极限工作条件下&#xff0c;最多能持续多久——可能发生内存泄漏/溢出&#xff0c;导…

Appium+Python连接真机、跳过登录页、Unexpected error while obtaining UI hierarchy问题

Appium连接真机 使用数据线连接电脑&#xff0c;然后选择文件传输方式 打开手机设置拉至底部&#xff0c;点击关于手机&#xff0c;连续点击7次版本号打开开发者模式 点击设置中的系统与更新&#xff0c;找到开发者选项----> 打开USB调试即可 在终端中输入adb devices确定…

案例解读| 从集中告警平台发展趋势看城商行如何落地数字化转型(二)

上期我们以具体案例入手&#xff0c;分享了集中告警平台到底应该与集中监控平台解耦还是紧绑定等问题。这一期依旧从具体案例切入&#xff0c;跟大家一起探索下告警与服务台的对接过程&#xff0c;以及这个过程中可能产生的问题。上期内容&#xff0c;一键回顾不迷路→案例解读…