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

news2025/7/19 6:32:45

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.coloradmin.cn/o/395566.html

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

相关文章

拥塞管理与拥塞避免

拥塞管理与拥塞避免背景来源产生情景队列技术FIFO&#xff1a;First In First OutRR&#xff1a;Round RobinWRR&#xff1a;Weight Round RobinPQ&#xff08;Priority Queuing&#xff09;CQ&#xff08;Custom Queuing&#xff09;WFQ&#xff08;Weight Fair Queuing&#…

入托不焦虑 | 如何帮宝宝更好地融入托班?

上托班是教育重要的一环&#xff0c;是宝宝开始适应集体过程的起点&#xff0c;宝爸宝妈也是忧喜交加&#xff1a;高兴的是宝宝慢慢长大开始上学了&#xff1b;忧虑的是从没有离开家的宝宝会不会适应托班生活呢&#xff1f; 今天我们就来分享一下如何引导宝宝更快地适应园区生…

【Unity】程序集Assembly模块化开发

笔者按&#xff1a;使用Unity版本为2021.3LTS&#xff0c;与其他版本或有异同。请仅做参考 一、简述。 本文是笔者在学习使用Unity引擎的过程中&#xff0c;产学研的一个笔记。由笔者根据官方文档Unity User Manual 2021.3 (LTS)/脚本/Unity 架构/脚本编译/程序集定义相关部分结…

【Spring6】IoC容器之基于注解管理Bean

3.3、基于注解管理Bean&#xff08;☆&#xff09; 从 Java 5 开始&#xff0c;Java 增加了对注解&#xff08;Annotation&#xff09;的支持&#xff0c;它是代码中的一种特殊标记&#xff0c;可以在编译、类加载和运行时被读取&#xff0c;执行相应的处理。开发人员可以通过…

Java基本数据类型变量自动提升、强制类型转换、String基本类型使用

文章目录基本数据类型变量自动提升特殊情况强制类型转换String基本类型使用基本数据类型变量自动提升 规则&#xff1a; 将取值范围小&#xff08;或容量小&#xff09;的类型自动提升为取值范围大&#xff08;或容量大&#xff09;的类型 。 byte、short、char-->int-->…

HCIP---回顾HCIA

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

基于深度学习的鸟类检测识别系统(含UI界面,Python代码)

摘要&#xff1a;鸟类识别是深度学习和机器视觉领域的一个热门应用&#xff0c;本文详细介绍基于YOLOv5的鸟类检测识别系统&#xff0c;在介绍算法原理的同时&#xff0c;给出Python的实现代码以及PyQt的UI界面。在界面中可以选择各种鸟类图片、视频以及开启摄像头进行检测识别…

基于同步整流技术的Buck开关电源设计方法

基于同步整流技术的Buck开关电源设计方法 典型的Buck电路 同步整流的Buck电路 摘要 B u c k 变换器作为一种基本的开关电源变换器&#xff0c;在电力变换场合具有广泛的应用。 为解决 B u c k 变换器工作在电感电流连续状态下&#xff0c;续流二极管关断时存在较大的反向电流…

重资产模式和物流网络将推动京东第四季度利润率增长

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 强劲的2022年第三季度财务业绩 2022年11月18日&#xff0c;京东&#xff08;JD&#xff09;公布了2022年第三季度财务业绩&#xff0c;净收入为2435亿元人民币&#xff0c;增长了11.4%。净服务收入为465亿元人民币&#xf…

【C++知识点】异常处理

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;C/C知识点 &#x1f4e3;专栏定位&#xff1a;整理一下 C 相关的知识点&#xff0c;供大家学习参考~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;…

深度学习知识点全面总结_深度学习总结

深度学习知识点全面总结_深度学习总结 神经网络与深度学习结构(图片选自《神经网络与深度学习》一邱锡鹏) 目录 常见的分类算法 一、深度学习概念 1.深度学习定义 2.深度学习应用 3.深度学习主要术语 二、神经网络基础 1. 神经网络组成 感知机 多层感知机 3.前向传播…

【JS代码优化二】ES6 数组和对象篇

Vue3 Vite VueRouter Pinia Axios Element Plus 项目实战&#xff08;持续更新中…&#xff09; 序&#xff1a;如何让代码看起来更优雅&#xff1f;代码是由文字堆叠起来的可以被机器执行的程序。它记载着相关信息&#xff08;状态&#xff09;、表达相关的情绪&#xf…

vue中引入路径用法及说明

引入路径的用法及说明Vue文件中引用路径的介绍1、路径 ././当前文件同级目录2、路径 …/…/当前文件上一级目录3、符号 的作用是在你引入模块时&#xff0c;可以使用 代替 /src 目录&#xff0c;避免易错的相对路径。Vue中使用1. vue.config.js配置文件中使用chainWebpack(con…

Go语言学习的第三天--上部分(基础用法)

前两天经过不断度娘&#xff0c;与对up主的跟踪学习了解了go的历史&#xff0c;今天开始了go的基础&#xff01;&#xff01;本章主要是go 的注释、变量及常量的梳理一、注释不管什么语言都有自己的注释&#xff0c;go也不例外 &#xff01;&#xff01;单行注释 // 多行注释 …

22- Pytorch实现天气分类 (Pytorch系列) (项目二十二)

项目要点 4种天气数据的分类: cloudy, rain, shine, sunrise.all_img_path glob.glob(rG:\01-project\08-深度学习\day 56 迁移学习\dataset/*.jpg) # 指定文件夹 # import glob获取随机数列: index np.random.permutation(len(all_img_path))建立数组和索引的关…

Java操作数据库基本原理

- 四年前存稿 Java操作数据库基本原理概述 全称Java Database Connectivity&#xff0c;Java的数据库连接&#xff0c;使用Java语言操作数据库&#xff0c;定义了操作所有关系型数据库规则(接口) 使用步骤 我的mysql是8版本的&#xff0c;使用jar包时必须使用8版本的&#x…

6年Android开发最终被优,事后加入车载开发,开启新起点~

如今传统Android 开发行业的岗位越发紧张了&#xff0c;经过去年一些互联网大厂的部门人员优化、开源截流等操作&#xff0c;加快了内卷的速度&#xff0c;原本坐山观虎斗我&#xff0c;没想到也被卷入其中。 1. Android 开发6年&#xff0c;无情中招 就去年年底&#xff0c;…

RZ/G2UL核心板-40℃低温启动测试

1. 测试对象HD-G2UL-EVM基于HD-G2UL-CORE工业级核心板设计&#xff0c;一路千兆网口、一路CAN-bus、 3路TTL UART、LCD、WiFi、CSI 摄像头接口等&#xff0c;接口丰富&#xff0c;适用于工业现场应用需求&#xff0c;亦方便用户评估核心板及CPU的性能。HD-G2UL-CORE系列工业级核…

铁路与公路

蓝桥杯集训每日一题acwing4074 某国家有 n 个城市&#xff08;编号 1∼n&#xff09;和 m 条双向铁路。 每条铁路连接两个不同的城市&#xff0c;没有两条铁路连接同一对城市。 除了铁路以外&#xff0c;该国家还有公路。 对于每对不同的城市 x,y&#xff0c;当且仅当它们之…

Mars3D美丽乡村系统发布

近日&#xff0c;我们基于Mars3D平台做了一个Mars3D美丽乡村应用系统&#xff0c;于2023年3月7日正式发布上线&#xff01;该系统提供一个PC浏览器端的“样板房”项目模版&#xff0c;包含常用的地图基础功能&#xff0c;可基于该平台开发新项目&#xff0c;更换数据即可快速形…