Hololens2二维码识别

配置

目前大部分Hololens进行二维码识别的开发都是基于ZXing的包完成,首先需要完成zxing.unity.dll,很多地方应该都能下载,也可以直接上github上下载(下载点这里)。

下载时注意一下版本就好,过老的zxing兼容性可能存疑,我这边使用的是 0.16.8.0的版本。

直接在项目Assets下新建Plugins,将dll拖入文件。
在这里插入图片描述

配置的话,用默认的就可以(这里面最重要的是UMP的平台配置,不过不用管,默认就支持了)。
在这里插入图片描述

场景需求

场景中需要有一个UI Canvas,文档下面应该包含RawImage和Text两个组件,同时需要一个相机获取权限Main camera。

在这里插入图片描述

代码

代码的话我试了两段代码,应该都没问题。

方法一:


using UnityEngine;
using System.Collections;
using ZXing;
using UnityEngine.UI;public class qrB : MonoBehaviour
{/// <summary> 包含RGBA </summary>public Color32[] data;/// <summary> 判断是否可以开始扫描 </summary>private bool isScan;/// <summary> canvas上的RawImage,显示相机捕捉到的图像 </summary>public RawImage cameraTexture;/// <summary> canvas上的Text,显示获取的二维码内部信息 </summary>public Text QRcodeText;/// <summary> 相机捕捉到的图像 </summary>private WebCamTexture webCameraTexture;/// <summary> ZXing中的方法,可读取二维码中的内容 </summary>private BarcodeReader barcodeReader;/// <summary> 计时,0.5s扫描一次 </summary>private float timer = 0;/// <summary>/// 初始化/// </summary>/// <returns></returns>void Start(){barcodeReader = new BarcodeReader();//yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);//请求授权使用摄像头Application.RequestUserAuthorization(UserAuthorization.WebCam);//请求授权使用摄像头if (Application.HasUserAuthorization(UserAuthorization.WebCam)){WebCamDevice[] devices = WebCamTexture.devices;//获取摄像头设备string devicename = devices[0].name;webCameraTexture = new WebCamTexture(devicename, 400, 300);//获取摄像头捕捉到的画面cameraTexture.texture = webCameraTexture;webCameraTexture.Play();isScan = true;}}/// <summary>/// 循环扫描,0.5秒扫描一次/// </summary>void Update(){if (isScan){timer += Time.deltaTime;if (timer > 0.5f) //0.5秒扫描一次{StartCoroutine(ScanQRcode());//扫描timer = 0;}}}IEnumerator ScanQRcode(){data = webCameraTexture.GetPixels32();//相机捕捉到的纹理DecodeQR(webCameraTexture.width, webCameraTexture.height);yield return 0;}/// <summary>/// 识别二维码并显示其中包含的文字、URL等信息/// </summary>/// <param name="width">相机捕捉到的纹理的宽度</param>/// <param name="height">相机捕捉到的纹理的高度</param>private void DecodeQR(int width, int height){var br = barcodeReader.Decode(data, width, height);if (br != null){QRcodeText.text = br.Text;}}}

方法二:

using System;
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
using UnityEngine.Serialization;
using ZXing;public class qrC : MonoBehaviour
{//相机捕捉到的图像private WebCamTexture webCameraTexture;//ZXing中的类,可读取二维码的内容private BarcodeReader barcodeReader;//计时,0.5s扫描一次private float scanInterval = 0.5f;//存放摄像头画面数据private Color32[] data;//显示摄像头画面public RawImage cameraTexture;//显示二维码信息public Text QRCodeText;//是否正在扫描private bool scaning;//定义未找到设备相机事件[Serializable]public class NoCameraErrorEvent : UnityEvent { }[FormerlySerializedAs("NoCameraError")][SerializeField]private NoCameraErrorEvent m_NoCameraError = new NoCameraErrorEvent();//定义扫码成功事件public Action<string> OnCompleted;//开始扫描二维码public void StartScanQRCode(){StartCoroutine(RequestWebCamAuthorization());}//请求相机权限IEnumerator RequestWebCamAuthorization(){barcodeReader = new BarcodeReader();yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);//请求授权使用摄像头if (Application.HasUserAuthorization(UserAuthorization.WebCam)){WebCamDevice[] devices = WebCamTexture.devices;//获取摄像头设备if (devices.Length == 0){Debug.LogError("device no camera available");m_NoCameraError.Invoke();yield break;}string devicename = devices[0].name;webCameraTexture = new WebCamTexture(devicename, 400, 300);//获取摄像头捕捉到的画面if (cameraTexture != null){cameraTexture.enabled = true;cameraTexture.texture = webCameraTexture;}webCameraTexture.Play();StartCoroutine(ScanQRCode());}}//扫描二维码private IEnumerator ScanQRCode(){scaning = true;while (true){data = webCameraTexture.GetPixels32();//相机捕捉到的纹理DecodeQR(webCameraTexture.width, webCameraTexture.height);yield return new WaitForSeconds(scanInterval);if (!scaning)break;}}/// <summary>/// 识别二维码并显示其中包含的文字、URL等信息/// </summary>/// <param name="width">相机捕捉到的纹理的宽度</param>/// <param name="height">相机捕捉到的纹理的高度</param>private void DecodeQR(int width, int height){var br = barcodeReader.Decode(data, width, height);if (br != null){//Debug.LogFormat("QR Code: {0}", br.Text);if (QRCodeText != null){QRCodeText.text = br.Text;Debug.Log(br.Text);     //接口位置!}Stop();OnCompleted?.Invoke(br.Text);}else{if (QRCodeText != null)QRCodeText.text = "";}}//停止扫描public void Stop(){scaning = false;}private void Start(){StartScanQRCode();}private void Update(){ScanQRCode();}
}

经过测试,都可用。

效果

在这里插入图片描述

常见问题

问题一:注意启动Hololens的相机,project setting–> player --> Publishing Setting -->WebCam勾选。
在这里插入图片描述
问题二:我这边在unity运行无误后,在部署的过程中有地址冲突的问题;不过换了电脑重新生成后问题解决(有可能是那台电脑有点问题)。

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

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

相关文章

2023-08-02 LeetCode每日一题(翻转卡片游戏)

2023-08-02每日一题 一、题目编号 822. 翻转卡片游戏二、题目链接 点击跳转到题目位置 三、题目描述 在桌子上有 N 张卡片&#xff0c;每张卡片的正面和背面都写着一个正数&#xff08;正面与背面上的数有可能不一样&#xff09;。 我们可以先翻转任意张卡片&#xff0c;…

一位年薪40W的测试被开除,回怼的一番话,令人沉思

一位年薪40W测试工程师被开除回怼道&#xff1a;“反正我有技术&#xff0c;在哪不一样” 一技傍身&#xff0c;万事不愁&#xff0c;当我们掌握了一技之长后&#xff0c;在职场上说话就硬气了许多&#xff0c;不用担心被炒&#xff0c;反过来还可以炒了老板&#xff0c;这一点…

解决 Android Studio 的 Gradle 面板上只有关于测试的 task 的问题

文章目录 问题描述解决办法 笔者出问题时的运行环境&#xff1a; Android Studio Flamingo | 2022.2.1 Android SDK 33 Gradle 8.0.1 JDK 17 问题描述 笔者最近发现一个奇怪的事情。笔者的 Android Studio 的 Gradle 面板上居然除了用于测试的 task 之外&#xff0c;其它什…

Java中String方法魔性学习

这里写目录标题 先进行专栏介绍String详解常用构造方法代码演示常用成员方法代码示例总结 先进行专栏介绍 本专栏是自己学Java的旅途&#xff0c;纯手敲的代码&#xff0c;自己跟着黑马课程学习的&#xff0c;并加入一些自己的理解&#xff0c;对代码和笔记 进行适当修改。希望…

机器学习基础知识(1)

什么是机器学习 机器学习是一种通过输入大量数据来构建一种模型&#xff08;网络&#xff09;&#xff0c;这个训练好的模型将会被用来预测或执行某些操作&#xff0c;这个训练的过程和方法就是机器学习。 我们也可以理解为构建一个“函数”&#xff0c;使得这个函数面对我们…

【第一阶段】kotlin的range表达式

range:范围&#xff1a;从哪里到哪里的意思 in:表示在 !in&#xff1a;表示不在 … :表示range表达式 代码示例&#xff1a; fun main() {var num:Int20if(num in 0..9){println("差劲")}else if(num in 10..59){println("不及格")}else if(num in 60..89…

神码ai伪原创【php源码】

大家好&#xff0c;小编为大家解答python必备常用英语词汇笔记的问题。很多人还不知道python中常用的英语单词&#xff0c;现在让我们一起来看看吧&#xff01; 火车头采集ai伪原创插件截图&#xff1a; 一.什么是注释 注释是对一段代码的解释&#xff0c;不参与程序运行&…

岩土工程仪器多通道振弦传感器信号转换器应用于隧道安全监测

岩土工程仪器多通道振弦传感器信号转换器应用于隧道安全监测 多通道振弦传感器信号转换器VTI104_DIN 是轨道安装式振弦传感器信号转换器&#xff0c;可将振弦、温度传感器信号转换为 RS485 数字信号和模拟信号输出&#xff0c;方便的接入已有监测系统。 传感器状态 专用指示灯方…

怎么采集网址、图片地址等标签属性

如果只想采集网址、图片地址等HTML标签属性的值&#xff0c;要怎么采集呢&#xff1f; 可以使用简数采集器&#xff0c;有对应的快捷提取方式&#xff0c;一键即可转换为采集网址、采集图片地址方式&#xff0c;非常方便快捷。 也可以自行设置高级提取&#xff0c;提取Html标…

生活小妙招之UE custom Decal

因为这几年大部分时间都在搞美术&#xff0c;所以博客相关的可能会鸽的比较多&#xff0c;阿巴阿巴 https://twitter.com/Tuatara_Games/status/1674034744084905986 之前正好看到一个贴花相关的小技巧&#xff0c;正好做一个记录&#xff0c;也在这个的基础上做一些小的拓展…

REDIS哨兵模式

目录 前言 一、哨兵模式概念 二、作用 三、缺点 四、结构 五、搭建 总结 前言 Redis哨兵模式是一种用于实现Redis高可用性的机制。在哨兵模式下&#xff0c;有一个或多个哨兵进程监控Redis主节点和从节点的状态&#xff0c;并在主节点出现故障时自动将一个从节点升级为新的主节…

《Kali渗透基础》14. 无线渗透(四)

kali渗透 1&#xff1a;相关工具1.1&#xff1a;Aircrack-ng1.1.1&#xff1a;airmon-ng1.1.2&#xff1a;airodump-ng1.1.3&#xff1a;aireplay-ng1.1.4&#xff1a;airolib-ng1.1.5&#xff1a;bessid-ng 1.2&#xff1a;JTR1.3&#xff1a;Evil Twin Attacker1.4&#xff1…

微信小程序下拉刷新

小程序中的下拉刷新 - 掘金

金融反欺诈的应用实践

“根据980起全球重大金融欺诈事件分析&#xff0c;60%的欺诈发生在移动端&#xff0c;同比增长170%。“&#xff0c;在香港近日举办的金融科技沙龙上&#xff0c;顶象金融业务安全专家史博表示&#xff0c;金融业已成为不法分子重要的攻击对象。 本届金融科技沙龙由Databricks…

Blazor前后端框架Known-V1.2.11

V1.2.11 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazo…

【香瓜说职场】建立公司(2017.07.25)

自从17年4月份开始辞职创业&#xff0c;已经3个多月了。跟大家分享一下创业经历。 一、我的合伙人 我的合伙人是我的客户。我给他上过蓝牙教学课、帮他做了个蓝牙自拍器&#xff08;叫orbit 360&#xff0c;已在售&#xff0c;百度能搜到&#xff09;&#xff0c;历经一年多。双…

MySQL — MVCC

文章目录 MVCCMVCC 实现原理隐藏字段undo logundo log的用途undo log类型 版本链ReadView MVCC InnoDB是一个多版本的存储引擎。它保留有关已更改行的旧版本的信息&#xff0c;以支持并发和回滚等事务性特性。这些信息存储在undo表空间中的数据结构称为回滚段。InnoDB使用回滚…

GD32F103的EXTI中断和EXTI事件

GD32F103的EXTI可以产生中断&#xff0c;也产生事件信号。 GD32F03的EXTI触发源: 1、I/O管脚的16根线&#xff1b; 2、内部模块的4根线(包括LVD、RTC闹钟、USB唤醒、以太网唤醒)。 通过配置GPIO模块的AFIO_EXTISSx寄存器&#xff0c;所有的GPIO管脚都可以被选作EXTI的触发源…

ClickHouse(十一):Clickhouse MergeTree系列表引擎 - MergeTree(1)

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…

【Pytorch+torchvision】MNIST手写数字识别

深度学习入门项目&#xff0c;含代码详细解析 在本文中&#xff0c;我们将在PyTorch中构建一个简单的卷积神经网络&#xff0c;并使用MNIST数据集训练它识别手写数字。 MNIST包含70,000张手写数字图像: 60,000张用于培训&#xff0c;10,000张用于测试。图像是灰度&#xff08;即…