(个人)AR电子书系统创新实训第二周(1)

2023-11-11

从头实现一个识别二维码的Unity项目

通过上次大致了解了ZXing.Net的基本使用方法后,此次我决定使用它和unity制作一个简单的测试项目,以检验其功能是否满足要求。具体步骤如下:

1.创建Unity项目,将zxing.unity.dll文件放置在工程目录下,Unity会自行进行编译。

这里写图片描述

2.创建一个C#脚本,命名随意。

这里写图片描述
在脚本中写入如下代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Threading;
using ZXing;
using ZXing.QrCode;

public class ScanCameraScript : MonoBehaviour {

    public Text testText;
    private WebCamTexture camTexture;
    private Thread qrThread;
    private int W, H;
    private Rect ScreenRect;
    private string url;
    private Color32[] c;
    private bool isQuit;

    private void OnGUI()
    {
        float[] tmpsize = { Screen.width * 2 / 3, Screen.height * 2 / 3 };
        float camsize = Mathf.Min(tmpsize);
        ScreenRect = new Rect((Screen.width - camsize)/2, (Screen.height - camsize) / 2, camsize, camsize);
        GUI.DrawTexture(ScreenRect, camTexture, ScaleMode.ScaleToFit);
        testText.text = url;
    }

    // Use this for initialization
    void Start () {

        camTexture = new WebCamTexture();
        camTexture.requestedHeight = Screen.height; // 480;
        camTexture.requestedWidth = Screen.width; //640;

        if (camTexture != null)
        {
            camTexture.Play();
            W = camTexture.width;
            H = camTexture.height;
        }

        qrThread = new Thread(DecodeQR);
        qrThread.Start();
    }

    // Update is called once per frame
    void Update () {
        if (c == null)
        {
            c = camTexture.GetPixels32();
        }
    }

    void OnDestroy()
    {
        qrThread.Abort();
        camTexture.Stop();
    }

    void OnApplicationQuit()
    {
        isQuit = true;
    }

    void DecodeQR()
    {
        // create a reader with a custom luminance source
        var barcodeReader = new BarcodeReader { AutoRotate = false, TryHarder = false };

        while (true)
        {
            if (isQuit)
                break;
            try
            {
                // decode the current frame
                var result = barcodeReader.Decode(c, W, H);
                if (result != null)
                {
                    print(result.Text);
                    url = result.Text;
                }

                // Sleep a little bit and set the signal to get the next frame
                Thread.Sleep(200);
                c = null;
            }
            catch
            {
            }
        }
    }
}

这里稍微解释一下代码的内容:
这个代码的主要功能便是负责实时地将当前摄像机镜头的内容显示到屏幕上,同时,每隔一段时间便会对当前画面进行分析解码以得到二维码的网址。其中的camTexture对象在调用了Play()方法后会不断的获取摄像头的内容,并将其保存到颜色数组c中。同时,代码中调用了新线程,在里面执行DecodeQR()函数,也就是解码函数,该进程会在一个循环中对c进行解码并得到网址,赋值给url,然后休眠0.2秒。此外还有一个OnGUI()函数,该函数负责每帧将camTexure中的图像输出到屏幕,同时把url的值传给Text组件以显示出来。

3.将这个C#脚本附加到场景中的主摄像机上。

这里写图片描述

4.在场景中创建一个Canvas组件和Text组件,将Text组件赋值给C#脚本中的testText。

这里写图片描述
这里写图片描述

5.运行结果。

这里写图片描述
这里写图片描述
(注:二维码图片来自网络)
顺利运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(个人)AR电子书系统创新实训第二周(1) 的相关文章

  • Unity3D之Rigidbody

    目录 常用的Rigidbody属性和方法 rigidbody AddForce rigidbody AddTorque rigidbody velocity rigidbody angularVelocity rigidbody Sleep
  • Unity 资源加载卸载过程

    什么时候才是UnusedAssets 看一个例子 Object obj Resources Load MyPrefab GameObject instance Instantiate obj as GameObject Destroy in
  • using UnityEditor引用注意事项

    本文转载自http blog csdn net czlilove article details 19979725 在运行时脚本中使用UnityEditor命名空间 假如该脚本被挂在场景中的物体上 那么 可以这样做 在Unity编辑器中运行
  • Unity单元测试流程

    文章目录 环境 流程 1 创建一个存放 单元测试程序集 的目录 2 打开 Test Runner 窗口 3 选择单元测试模式 4 创建单元测试程序集 5 创建测试脚本 6 运行测试 环境 Unity 2020 3 3f1 流程 1 创建一个
  • UE5学习笔记(一)——界面功能梳理&第一天知识点记录

    学习UE5的第一步 是软件安装 默认是安装好的 由于安装没有太多技术含量 所以就没有专门做记录 这里有个注意点 虚幻引擎是整合在Epic games launcher中的 也就是说开发引擎内嵌在游戏平台上 打个比方 就是如果你要下unity
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • 【Unity&C#&随机数】随机数

    一个简单的随机数获得 0或1 使用了这样的代码 想要获得0或者1 if Input anyKeyDown float i 1 if i 1 i Random Range 0 Rang i i lt 0 5 0 1 Debug Log Cou
  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • Unity中UI框架的使用1-添加面板、显示Loading页面

    其中BasePanel和Canvas都是挂在面板的预制物上的 1 导入我们的UI框架 本篇文章中有用的是两个UIPanelType NUIManager和NBasePanel 会放在文章最后供大家使用 2 先将我们做好的Panel设置成预制
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触
  • unity dots jobSystem 记录

    Looking for a way to get started writing safe multithreaded code Learn the principles behind our Job System and how it w
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • 【原神游戏开发日志1】缘起

    原神游戏开发日志1 缘起 版权声明 本文为 优梦创客 原创文章 您可以自由转载 但必须加入完整的版权声明 文章内容不得删减 修改 演绎 相关学习资源见文末 大家好 最近看到原神在TGA上频频获奖 作为一个14年经验的游戏开发行业的老兵 我就
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • 【Unity】如何让Unity程序一打开就运行命令行命令

    背景 Unity程序有时依赖于某些服务去实现一些功能 此时可能需要类似打开程序就自动运行Windows命令行命令的功能 方法 using UnityEngine using System Diagnostics using System T
  • 【转载】【Unity】WebSocket通信

    1 前言 Unity客户端常用的与服务器通信的方式有socket http webSocket 本文主要实现一个简单的WebSocket通信案例 包含客户端 服务器 实现了两端的通信以及客户端向服务器发送关闭连接请求的功能 实现上没有使用U
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 12. openCV在QT环境中利用zBar开发库实现二维码内容识别

    1 说明 本篇博客仅记录如何使用zBar库进行二维码内容的识别 其中牵扯到的一些其它知识点 比如二维码区域检测 zBar库开发环境配置等可以参考本专栏的其它相关博客 此篇博客不再赘述 2 具体步骤 博客中代码功能 手动选择一张包含二维码的图

随机推荐

  • 解决 invalid user: VMessAEAD is enforced and a non VMessAEAD connection is received.

    2023 01 31 10 27 56 111 181 19 37 45288 rejected common drain common drain unable to drain connection gt EOF gt proxy vm
  • java-实现网页代码的爬取

    爬取一个网页的内容 当然相对路径以及样式都复制不过来 只能复制这个文件的内容 先将所有异常使用Throws抛出的话 import java io BufferedInputStream import java io BufferedOutp
  • ubuntu 安装 nginx

    apt get安装nginx 1 切换到root用户安装 安装最好用root用户安装 不然很多文件权限的报错会让人崩溃 sudo su root apt get install nginx 安装 nginx v 查看安装版本 service
  • 蓝桥杯单片机备考必看内容,学习一周,保底省三!

    这里我先把我弄到的历年考试类型给大家 但是这图只能参考 经历这届蓝桥杯我深有体会 考试当天早上我还在想要不要看看矩阵键盘 但是想着这个考点概率就没去看隔着摆烂 结果真考了按键12 13 16 17的运用 但是有一点要说的是 这届选择题很多历
  • Java获取Process进程ID,并杀掉相应的进程树

    在使用java过程中 很多人可能遇到过这样的问题 当我们通过cmd exe执行命令的时候 如下 Runtime rt Runtime getRuntime Process process rt exec cmd java会在后台进程中开启一
  • 执行yum install时,终端一直刷重复的内容

    执行yum install时 终端一直刷重复的内容 看起来不像报错 可是又无休止的刷 起因 启动nginx报错 说找不到libcrypto so 6 这是因为缺少openssl相关包 于是执行下载 yum install openssl 发
  • 【PTA】 试试手气

    我们知道一个骰子有 6 个面 分别刻了 1 到 6 个点 下面给你 6 个骰子的初始状态 即它们朝上一面的点数 让你一把抓起摇出另一套结果 假设你摇骰子的手段特别精妙 每次摇出的结果都满足以下两个条件 1 每个骰子摇出的点数都跟它之前任何一
  • 第四章 函数式编程(Lambda表达式&Stream流)

    一 Lambda表达式 特点 是匿名函数 2是可传递 匿名函数 需要一个函数 但又不想命名一个函数的场景下使用lambda表达式 使用lambda表达式时函数内容应该简单 可传递 将lambda表达式传递给其他的函数 它当做参数 lambd
  • 汽车安全标准ISO-26262以及等级ASIL

    1 什么是ISO 26262 为了保证即使出现部分电子器件故障 汽车系统也能在短期 故障容错时间内 内安全进行 2011年11月 ISO International Organization for Standardization 国际标准
  • 【12月海口】2022年第六届船舶,海洋与海事工程国际会议(NAOME 2022)

    2022年第六届船舶 海洋与海事工程国际会议 NAOME 2022 重要信息 会议网址 www icnaome org 会议时间 2022年12月23 25日 召开地点 海南 海口 截稿时间 2022年10月20日 录用通知 投稿后2周内
  • 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(java+python)

    给定一个二叉搜索树 找到该树中两个指定节点的最近公共祖先 百度百科中最近公共祖先的定义为 对于有根树 T 的两个结点 p q 最近公共祖先表示为一个结点 x 满足 x 是 p q 的祖先且 x 的深度尽可能大 一个节点也可以是它自己的祖先
  • go实现命令行拷贝文件

    package main import flag fmt bufio os strings io func FileExists dst string bool err os Stat dst return err nil os IsExi
  • docker命令、操作、部署服务器

    亲测有效 买了腾讯云 安装了centos8 0 进行docker操作 视频教学 https www bilibili com video BV1CJ411T7BK p 28 spm id from pageDriver vd source
  • Mysql驱动包下载

    第一步 下载地址 MySQL Download Connector J 第二步 第三步 第四步 解压 第五步 找到驱动包 放入项目使用即可
  • 知识图谱简介

    1 什么是知识图谱 知识图谱的概念是由谷歌公司于2012年5月17日首次提出 旨在描述客观世界的概念 实体 事件及其之间的关系 并作为构建下一代智能化搜索引擎的核心基础 通俗地讲 知识图谱就是把所有不同种类的信息连接在一起而得到的一个关系网
  • 如何最高效实现手机~电脑端文件传输?

    平常使用电脑办公的时候 经常会有把手机上的文件传到电脑或把电脑上的文件分发给局域网 内网 的各个伙伴的情况 通常我们会选择使用QQ或微信的文件传输功能来实现 但是当文件比较大 比较多时 就无法发送了 再者每次通过文件助手来发送文件时 其本质
  • 软件测试项目管理平台

    系统组成 STM软件测试项目管理系统采用C S软件架构 是一个多人协同工作的环境 数据库服务器端部署SQL Server数据库 包括人力资源数据库 设备资源数据库 项目管理数据库 测试项目数据库 历史归档数据库 客户端部署软件测试项目管理系
  • 从瞳孔的扩张收缩提取大脑EEG的delta,theta,alpha,beta,gamma等信号信息

    展示得到的结果图 直接上代码 import pandas as pd from scipy signal import find peaks from scipy fftpack import fft fftshift ifft impor
  • 【C语言刷LeetCode】300. 最长上升子序列(M)

    给定一个无序的整数数组 找到其中最长上升子序列的长度 示例 输入 10 9 2 5 3 7 101 18 输出 4 解释 最长的上升子序列是 2 3 7 101 它的长度是 4 说明 可能会有多种最长上升子序列的组合 你只需要输出对应的长度
  • (个人)AR电子书系统创新实训第二周(1)

    从头实现一个识别二维码的Unity项目 通过上次大致了解了ZXing Net的基本使用方法后 此次我决定使用它和unity制作一个简单的测试项目 以检验其功能是否满足要求 具体步骤如下 1 创建Unity项目 将zxing unity dl