文档章节

unity扫描识别二维码的坑 去掉空格+识别中文并对比中文字符串

o
 osc_fmg49rzg
发布于 2019/03/20 11:45
字数 630
阅读 3
收藏 0

精选30+云产品,助力企业轻松上云!>>>

去掉空格采用正则表达式的方法:

  QRMessage = Regex.Replace(result.Text,@"\s","");

一下脚本识别二维码。

using UnityEngine;  
using System.Collections;  
 using System;  
 using Vuforia;  
 using System.Threading;  
 using ZXing;  
 using ZXing.QrCode;  
 using ZXing.Common;  
 using UnityEngine.SceneManagement;
using System.Text.RegularExpressions;
 public class CameraScanQRCode : MonoBehaviour  
 {
    public static CameraScanQRCode cameraScanQRCodeInstance;
    private Image.PIXEL_FORMAT m_PixelFormat = Image.PIXEL_FORMAT.GRAYSCALE;  
	 private bool m_RegisteredFormat = false;  
  
	 public bool reading;  
	 public string QRMessage;  
	// public UnityEngine.UI.Text labelQrc;  
     Thread qrThread;  
     //bool isQuit;  
     private Color32[] c;  

     private int W, H;  
     Image QCARoutput;  
	 bool updC;  
	 bool gotResult = false;

    //添加播放扫描成功音频特效
    private bool isAleardyPlayAudio=false;
    private void Awake()
    {
        cameraScanQRCodeInstance = this;
        //Cursor.visible = false;
    }
    void Start()  
	{
        //打包会报错

        CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
    }  
	public void ShowScannerInformation(bool IsShowInfo)
	{
		//Debug.LogWarning ("this is ShowScannerInformation"+IsShowInfo);
		//labelQrc.enabled = IsShowInfo;
		//labelQrc.text = QRMessage;
	}


	void SetCameraFocus ()
	{
		
		var isAutoFocus = CameraDevice.Instance.SetFocusMode (CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
		if (!isAutoFocus) {
			CameraDevice.Instance.SetFocusMode (CameraDevice.FocusMode.FOCUS_MODE_NORMAL);
			//Debug.LogError ("*********Field to set fouce mode (unsupported mode )*****");
		}
	//	Debug.LogError ("*********Field to set fouce mode (unsupported mode )*****");
	}

    //void OnApplicationQuit()  
    //{  

    //}  
    ////private void OnApplicationPause(bool pause)
    ////{
    ////    if(pause)
    ////    {
            
    ////        Debug.LogError("pause");
    ////        reading = true;
    ////    }
    ////}
    void OnEnable()  
	     {  
		//1
		  //VuforiaBehaviour vuforiaBehaviour =(VuforiaBehaviour)FindObjectOfType(typeof(VuforiaBehaviour));  
		//1
		  //vuforiaBehaviour.RegisterTrackablesUpdatedCallback(OnTrackablesUpdated);  
			VuforiaARController.Instance.RegisterTrackablesUpdatedCallback (OnTrackablesUpdated);
			SetCameraFocus ();
	      	//Debug.Log(String.Format("AutoFocus : {0}", isAutoFocus));  
		  
			//	         if (!m_RegisteredFormat)  
			//			       {  //1
			//			           Vuforia.CameraDevice.Instance.SetFrameFormat(m_PixelFormat, true);  
			//		  
			//			            m_RegisteredFormat = true;  
			//			       }  
			//		  
		        qrThread = new Thread(DecodeQR);  
		         qrThread.Start();  
	     }  
	    void OnDisable()  
	    {
        //Debug.LogError("OnDisable");
        //VuforiaBehaviour vuforiaBehaviour = (VuforiaBehaviour)FindObjectOfType(typeof(VuforiaBehaviour));  
        //vuforiaBehaviour.UnregisterTrackablesUpdatedCallback(OnTrackablesUpdated);  
        VuforiaARController.Instance.RegisterTrackablesUpdatedCallback(OnTrackablesUpdated);
        qrThread.Abort();
        qrThread = null;
        }

    //private void OnDestroy()
    //{
    //    Debug.LogError("OnDestroy");
    //}
    //private void OnApplicationPause(bool pause)
    //{
    //    Debug.LogError("OnApplicationPause");

    //}
    //private void OnApplicationFocus(bool focus)
    //{
    //    Debug.LogError("OnApplicationFocus");
    //    VuforiaARController.Instance.RegisterTrackablesUpdatedCallback(OnTrackablesUpdated);
    //    SetCameraFocus();
    //    //qrThread.Resume();


    //}
    public void OnTrackablesUpdated()  
	   {     
	        Vuforia.CameraDevice cam = Vuforia.CameraDevice.Instance;  
		//1
		     if (!m_RegisteredFormat)
		     {
			   Vuforia.CameraDevice.Instance.SetFrameFormat(m_PixelFormat, true);
			   m_RegisteredFormat = true;
		     }//
	        QCARoutput = cam.GetCameraImage(m_PixelFormat);  
	         if (QCARoutput != null)  
		     {  
		          reading = true;  
		          updC = true;  
		     }  
	         else  
		     {  
		          reading = false;  
		          //  Debug.Log(m_PixelFormat + " image is not available yet");  
		     }  
	   }  
	  
    void Update()
    {
       
       // if (QRMessage!=""&& TaskAudioManager.TaskAudioManagerInstance.playTaskAudio.isPlaying == false)
        {           
         //  QRCodeScannerSuccess();          
        }
        //Cursor.visible = false;

        //	CameraDevice.Instance.SetFocusMode (CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
        //SetCameraFocus ();
        if (reading)  
		   {  
			   if (QCARoutput != null)  
			   {  
			      if (updC)  
				  {  
				       updC = false;  
				       Invoke("ForceUpdateC", 1f);//here we'll postpone next c update, this function literally just switches updC to true  
					  if (QCARoutput == null)  
					  {  
						return;  
					  }  
				      c = null;  
				      c = ImageToColor32(QCARoutput);  
				       if (W == 0 | H == 0)  
					   {  
					     W = QCARoutput.BufferWidth;  
					      H = QCARoutput.BufferHeight;  
					   }  
					  QCARoutput = null;  
				  }  
			   }  
		   }  
		  
		       // labelQrc.text = QRMessage;  
		ShowScannerInformation(true);
	         //if (gotResult) SceneManager.LoadScene(0);  
    }  
	void DecodeQR()  
	{  
		// create a reader with a custom luminance source  
		//   var barcodeReader = new BarcodeReader { AutoRotate = false, TryHarder = false };  
		   var barcodeReader = new BarcodeReader { AutoRotate = false, TryInverted = false };  
		   barcodeReader.ResultFound += OnResultF;  
		    while (true)  
			{  
			 //if (isQuit)//This one is used to be true in OnApplicationQuit() See ZXing's tutorial for more info  
		     //    break;  
		       if (reading && c != null)  
			   {  
				 	try  
				    {  
					       // decode the current frame  
					   ZXing.Result result = barcodeReader.Decode(c, W, H);  
				        c = null;  
				  		 if (result != null)  
					 	 {
                        //QRMessage = result.Text;//2019.3.14
                        QRMessage = Regex.Replace(result.Text,@"\s","");

                        //download = true;  
                        //reading = false;  
                        ////Debug.Log(QRMessage);
                        //if (QRMessage == "ha")
                        //{
                        //    Debug.LogError("hahh");
                        //}
                    }  
		  	        }  
	     			catch(Exception e)  
			        {  
				       Debug.Log(e.Message);  
				    }  
			   }  
			   else
               {  
				 
			   }
            Thread.Sleep(1);
        }  
	}
    //添加播放扫描成功音频特效.snail
    private void QRCodeScannerSuccess()
    {
        if (!isAleardyPlayAudio)
        {
            isAleardyPlayAudio = true;
            TaskAudioManager.TaskAudioManagerInstance.PlayGameAudioByID((int)GameAudioType.QRCodeScannerSuccess);
        }
    }
	void OnResultF(Result result)  
	{  
		  //Debug.Log(result.Text);  
	        gotResult = true;  
		  //SceneManager.LoadScene(0);  
	}  
	void ForceUpdateC()  
    { //To set it to update later  
		updC = true;  
	}  
 
	Color32[] ImageToColor32(Vuforia.Image a)  
   	{  
	     if (!a.IsValid()) return null;  
	      Color32[] r = new Color32[a.BufferWidth * a.BufferHeight];  
		  for (int i = 0; i < r.Length; i++)  
		  {  
		    r[i].r = r[i].g = r[i].b = a.Pixels[i];  
		  }  
	      return r;  
	}  
 }

  对比中文(用一般的 字符串比较中文不成功)

//判断当前扫描设备是否在当前巡检任务中
    private bool IsCheckedDevice(string CameraScennerQRCode)
    {
        if (CameraScennerQRCode!="" && ARGlobalData.AlreadyCheckDevices != null)
        {
            for(int i=0;i< ARGlobalData.AlreadyCheckDevices.Count;i++)
            {
                var isCheckedDeviceTrue = Regex.Match(CameraScennerQRCode,ARGlobalData.AlreadyCheckDevices[i]);
                if (isCheckedDeviceTrue.Success)
				{					
					return true;
				}
                //2019.3.13普通字符串比较中文,总是返回FALSE
                //if (CameraScennerQRCode.Equals(ARGlobalData.AlreadyCheckDevices[i]))
                //{
                //    return true;
                //}
            }

        }
        return false;
    }

  

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Unity插件系列之二维码

1.二维码常见的生成与识别途径 1.草料二维码 https://cli.im/text 2.在软件中实现生成和扫描二维码 使用zxing实现 zxing是一个用java写的开源项目,zxing.net是移植到.net工程上的。 https:...

osc_ew2xy3cq
2018/03/17
1
0
Unity打包Android最全攻略(含完整流程及常见问题)

摘要:【建议收藏】最近收到的求助里面,超过80%的都是安卓打包出现的问题,这篇文章包含Unity打包安卓的所有必要条件和常见问题。 洪流学堂,让你快人几步。你好,我是你的技术探路者郑洪智...

郑洪智(大智)
03/13
0
0
unity解压缩zip发布后的一些问题

  前段时间项目需要,搞了下zip的解压缩问题,也是利用ICSharpCode.SharpZipLib.dll来处理的zip,这里说下之前遇到的坑(这里提供我用的这个库ICSharpCode.SharpZipLib.dll ;http://note...

osc_lpj39135
2018/12/27
3
0
#游戏unity#AR手机游戏的平台构建

#游戏unity#AR手机游戏的平台构建 在上篇博客中,博主向大家简单又通俗易懂的介绍了AR与AR在手机游戏领域的应用,而这篇文章,博主将教大家如何构建一个AR手机游戏平台。要知道,只有构建平台...

zys91011_muse
03/31
0
0
二维码的生成与识别

将插件中zxing.unity.dll文件放入Unity工程中Plugins文件夹下,下载二维码插件 http://zxingnet.codeplex.com/ using UnityEngine;using System.Collections; using ZXing; using UnityEngi......

qq_36215526
2018/04/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

服务器之间实现免密登录的简易教程

今天这篇文章主要是教会大家如何实现服务器之间的免密登录。 1、先在所有服务器上执行命令: ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa master服务器 slave1服务器 slave2服务器 2、而后在所...

osc_2y6i16fz
58分钟前
5
0
腾讯位置服务基于 WebGL实现自定义栅格图层踩坑实录

以下内容转载自totoro的文章《WebGL-Y轴翻转踩坑实录》 作者:totoro 链接:https://blog.totoroxiao.com/webgl-flipY/ 来源:https://blog.totoroxiao.com/ 著作权归作者所有。商业转载请联...

KaKa_Ci
59分钟前
16
0
模拟Spark Master Worker 进程通讯项目

项目需求分析 worker注册到Master,Master完成注册,并回复worker注册成功 worker定时发送心跳,并在Master接收到 Master接收到worker心跳后,要更新该worker的最近一次发送心跳的时间 给 Ma...

hexiaoming123
59分钟前
17
0
送给非科班iOS开发,一份面试题(附答案)

iOS行业在经历了过去几年的爆发期后,现在到了一个相对冷静的时期,一个良币驱逐劣币、去伪存真的阶段。只有持续的专注和付出,才能够在激烈的竞争中脱颖而出,成为强者。正如狄更斯所言,“...

osc_m3eztdrr
59分钟前
9
0
高效时间管理的18个黄金法则

1、定目标。设定目标可以给你指明项目的方向。设定目标尽量要具体,可以预计进度,在进度猫甘特图中,可以把目标作为里程碑,可以设置多个里程碑,一个小目标作为里程碑。 2、事先做好计划。...

解优猎头
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部