1. 程式人生 > >Hololens開發 識別二維碼

Hololens開發 識別二維碼

1.ZXing.Net下載匯入: ZXing.Net的下載地址: http://zxingnet.codeplex.com/ 解壓後找到裡面的unity資料夾,底下有3個檔案,如下: 把這三個檔案拖到unity裡面 2.實現二維碼識別: 這個藉助外掛很容易實現,網上有很多參考,Unity應用商店裡也有提供的QRCode原始碼,下面是參考的一個比較簡潔的寫法,在這裡對其稍作改動並加上註釋: using UnityEngine; using System.Collections; using ZXing; using UnityEngine.UI; public class QRcode : MonoBehaviour { /// 包含RGBA public Color32[] data; /// 判斷是否可以開始掃描 private bool isScan; /// canvas上的RawImage,顯示相機捕捉到的影象 public RawImage cameraTexture; /// canvas上的Text,顯示獲取的二維碼內部資訊 public Text QRcodeText; /// 相機捕捉到的影象 private WebCamTexture webCameraTexture; /// ZXing中的方法,可讀取二維碼中的內容 private BarcodeReader barcodeReader; /// 計時,0.5s掃描一次 private float timer = 0; /// /// 初始化 /// /// IEnumerator Start() { barcodeReader = new BarcodeReader(); yield return 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; } } /// /// 迴圈掃描,0.5秒掃描一次 /// 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; } /// /// 識別二維碼並顯示其中包含的文字、URL等資訊 /// ///相機捕捉到的紋理的寬度 ///相機捕捉到的紋理的高度 private void DecodeQR(int width, int height) { var br = barcodeReader.Decode(data, width, height); if (br != null) { QRcodeText.text = br.Text; } } } 把這段程式掛到 Main Camera 上,建立一個canvas,建立 RawImage 和 Text 並拖拽到指令碼上,其中Text是用於顯示二維碼內部資訊的,RawImage是用於顯示攝像頭捕捉到的畫面的。 然後測試一下,二維碼的功能到這裡就實現了,經測試在PC和Android平臺上都適用,接下來是匯出HoloLens的部分。 第二步:匯出到HoloLens平臺 匯出HoloLens的時候就不怎麼友好了,報了很多錯誤,問題出在ZXing: 在hololens論壇上找到了關於這個問題的討論: https://forums.hololens.com/discussion/3263/zxing-unity-barcode-dll-issue 下面這個網址提供了一種解決方案,使得匯出時不會報錯: https://forums.hololens.com/discussion/2966/qr-scan-in-uwp-with-usb2-0-webcam-and-kinect-2 它的解決方法是: 把匯入的外掛按照如下方式放置:其中  要複製兩份,一份放在WSAPlayer資料夾下,另一份放在Plugins目錄下 放在WSAPlayer目錄下的  設定如下: 放在Plugins目錄下的  設定如下: 再匯出時不會報錯。 但是,當在HoloLens中檢視時,發現仍然無法識別二維碼!!! 查詢原因,原來HoloLens的相機根本就沒有開啟! 難道HoloLens的相機與PC和Android呼叫方法不同嗎?看到下面這篇文章,發現是因為沒有開啟相機能力 http://www.cnblogs.com/mantgh/p/5667385.html 解決方法我直接截圖過來了如下: 現在可以用HoloLens識別出二維碼中的內容了! 可是我之前使用的是Main Camera,因此canvas中的內容無法跟著頭盔移動,接下來匯入HoloLensToolKit的包,換上HoloLens的相機,但是這個相機是倒著的,0.0沒查為什麼,簡單粗暴地把我的canvas也到倒過來了。。。 現在在HoloLens上除錯感覺好多了 最後把我簡陋的介面 =_=(以前只有一個 RawImage 和一個 Text)美化一下,順手借用了QRCode外掛裡面的圖片,變成了下面這個樣子: 當然,在Hololens裡面看的時候,文字就是正著的了,而且黑色的背景也會被過濾掉。。。 —————————————————————————————————————————————————————— 雖然上面說的比較清楚了,但是如果還需要我的原始碼,可以去這裡下載:http://download.csdn.net/detail/wwanrong/9921225 裡面包含原始碼和匯出後的部分(放在APP資料夾下),可以直接在Hololens上執行: 注意:如果想重新匯出,請先刪除裡面的App和UWP資料夾!!否則會出現奇怪的錯誤,每次匯出都會重新生成UWP --------------------- 本文來自 Annora-W 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/wwanrong/article/details/76589267?utm_source=copy