Vuforia Vumark初探

Vuforia的Vumark功能很适合新项目的需求,就决定把研究的成果记录一下,希望能帮到同样想使用这个技术的人。

我的理解,Vumark就是把图像编码融入到了识别图中,这样就可以在识别AR图片时读取用户设置的图像编码,这样就不用一个识别图片只对应一个识别信息,我们可以通过图像编码读取的信息来进行不同的处理。简单来说,以前一个识别图只能识别一个3D模型,现在可以用Vumark标识不同的3D模型。

首先介绍一下Vumark的使用方法:

1)制作Vumark模板文件。

2)把模板文件上传到Vuforia官网。

3)使用此模板文件产生Vumark图像文件,此时输入定义的ID信息(字符串、数字或二进制码)。

4)使用此模板文件生成Dataset文件。

之后的使用就和普通的识别图差不多了,在Unity中是使用vumark预设。这是我刚开始看了半天官网说明也没弄明白,直到最后实际操作了一遍才搞清楚。

制作Vumark,制作过程在Vuforia官网介绍的非常详细(https://library.vuforia.com/articles/Training/VuMark-Design-Guide),在这里只简要的介绍一下。

Vumark主要包括以下部分:

1)Contour轮廓线:算法最先识别的部分,首先找到它才能识别图像编码,我觉得它是Border和空白区域交界的闭合曲线。

2)Border边线

3)Clear Space空白区域:可以在边线里面也可以在边线外面,但它的颜色要与边线有足够的对比度,才能让算法识别。

4)Code/Element图像编码:一般就是简单的图形,比如圆形或四边形;同一个形状要有亮和暗两种图形,它们的颜色要有足够的对比度。其实Vumark的信息就存储在这些小色块中,信息越多,需要的小色块越多。

5)Background背景:这里可以放自定义的图像不用于存储信息,但用来做识别图。

Vumark的制作主要使用Adobe Illustrator CC2015或其以上版本,而且要安装MyriadPro-Bold,MyriadPro-Regular和MyriadPro-Semibold字体否则会报错。制作工具需要到Vuforia官网下载(https://developer.vuforia.com/downloads/tool?d=windows-4851025-17-4124#downloadModal),按照其中的说明操作即可,但制作Vumark还是挺繁琐的,由于时间原因,我就直接使用了示例中的vumark。

Vumark制作好后,将下载的Dataset文件和VuforiaSDK6.2导入到Unity中,从Vuforia目录中找出ARCamera和Vumark预设拖到Hierarchy面板中并删除原来的Camera。在添ARCamera加license key并把Datasets选项选择成你导入的vumark,Vumark预设也选择Database和Vumark Template为你导入的文件。

最后编写代码,新建一个空物体,命名为VumarkManager(名字随意),在上面附加一个C#脚本,内容:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Vuforia;

public class VuMarkHandler : MonoBehaviour
{

    [SerializeField]
    private Text vuText;//用于显示ID

    private VuMarkManager mVuMarkManager;
    private VuMarkTarget mClosestVuMark;

    void Start()
    {
        // 得到管理对象
        mVuMarkManager = TrackerManager.Instance.GetStateManager().GetVuMarkManager();
    }

    void Update()
    {
        UpdateClosestTarget();
    }

    void UpdateClosestTarget()
    {
        foreach(var bhvr in mVuMarkManager.GetActiveBehaviours())
        {   //得到扫描到的vumark
            mClosestVuMark = bhvr.VuMarkTarget;
        }

        if(mClosestVuMark!=null)
        {
            vuText.text = mClosestVuMark.InstanceId.StringValue;
        }
    }
}
最后再新建一个Text把它赋值给脚本中的变量即可。此代码也是研究了示例程序的代码后简化出来的,只保留了最基本的功能,示例(https://developer.vuforia.com/downloads/samples)。此程序可以直接在pc上运行,把之前用模板制作的含有ID数据的图片放在摄像头前就可以直接显示出ID数据。

由于对此技术还只是初步研究,所以可能有错误的地方还请大家帮忙指正。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值