unity 使用扫描仪和红外线框制作项目--热带草原

        使用扫描仪和红外线框制作的公司项目--热带草原,使用富士通扫描仪扫描二维码,然后程序识别二维码后出现对应的草原动画,手拍动物动物会跑。

        准备工作:要安装扫描仪驱动,并设置好存放的图片的格式和路径。我是把扫描出的图片放在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帧就检测一次,检测目录里是否有对应的图片,有的话就加载图片然后进行识别,识别失败的话就会打印信息提示,识别成功的话就会根据内容产生对应的动物。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值