使用扫描仪和红外线框制作的公司项目--热带草原,使用富士通扫描仪扫描二维码,然后程序识别二维码后出现对应的草原动画,手拍动物动物会跑。
准备工作:要安装扫描仪驱动,并设置好存放的图片的格式和路径。我是把扫描出的图片放在D:\pai目录下,自己在电脑D盘创建对应的目录就行了,名字自定义,我也忘了当初为什么叫pai了....
识别代码:
using UnityEngine;
using System.Collections;
using ZXing;
using ZXing.QrCode;
using ZXing.Common;
using System.IO;
using System.Collections.Generic;
using System.Threading;
public class GenerateQRCode : MonoBehaviour
{
public static Texture2D _texture;//扫描后的贴图
Color32[] webCameraTextureData;
public static bool isInit = false;
public static int curAnimal = -1;
private BarcodeReader barcodeReader;//二维码识别器
private int isExit = 0;
public int width = 50;//扫描到的图片尺寸低于这个值则无效处理
public int height = 50;
bool eiist = false;
bool m_IsCanCheck = true;
int m_Index = 2;
bool m_IsGameStart = false;
//测试
bool isCanUse = false;
Thread m_Thread;
IEnumerator Start()
{
barcodeReader = new BarcodeReader();
CheckAndDeletePic();
yield return new WaitForSeconds(5f);
m_IsGameStart = true;
}
void CheckAndDeletePic()
{
for (int k = 1; k <= 7200; k++)
{
if (File.Exists(@"D:\pai\" + k + ".jpg"))
{
File.Delete(@"D:\pai\" + k + ".jpg");
}
}
}
void Update()
{
if (!m_IsGameStart)
return;
if (Time.frameCount % 10 == 0 && m_IsCanCheck)
{
isExistJpg();
}
//如果图片存在文件夹中
if (isExit == 1)
{
StartCoroutine("Load");
isExit = 2;
}
}
//图片是否存在文件夹中
void isExistJpg()
{
eiist = File.Exists(@"D:\pai\" + m_Index + ".jpg");
if (eiist && isExit == 0)
{
isExit = 1;//第p张图片在文件夹中
m_IsCanCheck = false;
}
}
//加载图片 加载成功后就可以识别了
IEnumerator Load()
{
string filePath = "file://D:/pai/" + 2 + ".jpg";
WWW www = new WWW(filePath);
yield return www;
_texture = www.texture;
Recognition();
}
//识别二维码 根据二维码内容的不同生成不同的物体
public void Recognition()
{
webCameraTextureData = _texture.GetPixels32();
Result result = default(Result);
Debug.Log(_texture.width + " " + _texture.height);
try
{
result = barcodeReader.Decode(webCameraTextureData, _texture.width, _texture.height);
Debug.Log(result.Text);
if (result == null)
{
if (_texture.width > width && _texture.height > height)
{
Debug.Log("扫描2.jpg图片后,二维码识别无效!");
}
}
else if (result.Text == "1")//斑马
{
//GameManager.Update中使用
curAnimal = 1;
isInit = true;
}
else if (result.Text == "2")//长颈鹿
{
//GameManager.Update中使用
curAnimal = 2;
isInit = true;
}
else if (result.Text == "3")//大象
{
//GameManager.Update中使用
curAnimal = 3;
isInit = true;
}
else if (result.Text == "4")//猎豹
{
//GameManager.Update中使用
curAnimal = 4;
isInit = true;
}
else if (result.Text == "5")//羚羊
{
//GameManager.Update中使用
curAnimal = 5;
isInit = true;
}
else if (result.Text == "6")//狮子
{
//GameManager.Update中使用
curAnimal = 6;
isInit = true;
}
}
catch (System.Exception e)
{
Debug.Log(e.Message);
}
isExit = 0;
m_Index += 2;
m_IsCanCheck = true;
}
private void OnDestroy()
{
CheckAndDeletePic();
}
}
说明:扫描一次会生成2张图片,如第一次扫描是名字为1和2的图片。其中图片名字和格式需要在扫描仪驱动软件中修改,默认好像是001.jpg这种三位数的名字,我改成了1.png这种格式。二维码生成自己上网下载个工具自行生成就行了,二维码内容自定义,我用的是数字。
思路:一开始把存放图片目录清空,方便图片从2开始识别,所以程序里的m_Index默认值是2,每次识别成功之后会加2。
Update里每隔10帧就检测一次,检测目录里是否有对应的图片,有的话就加载图片然后进行识别,识别失败的话就会打印信息提示,识别成功的话就会根据内容产生对应的动物。