在第二章里的图片识别,只能识别图片而不能跟踪图片,可以识别多张图片;在第三章里的2D跟踪,可以跟踪识别的图片,但只能跟踪一张识别图;
连续识图就是两个功能的结合体,当识别一张图片时调用跟踪这张识别图,具体方法如下:
一个图片识别会与一个2D跟踪对应(填写的FilePath一样)
实现连续识图,思路如下:当图片识别识别成功了,可以通过2D跟踪的SetActiveTrack方法设置2D跟踪的图片
但有时两个路径会不一样,有一个后面会带一个feature,导致跟踪不了,具体的实现方法见以下代码:
把该脚本挂在任意地方,
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using BaiduARInternal;
public class ContinuousRecognition : MonoBehaviour
{
private BaiduARImageRecognitionResult[] results;
private BaiduARImageTrackable[] trackables;
private void Awake()
{
//获取图片识别的物体
results = GameObject.FindObjectsOfType<BaiduARImageRecognitionResult>();
//获取2D跟踪的物体
trackables = FindObjectsOfType<BaiduARImageTrackable>();
for (int i = 0; i < results.Length; i++)
{
//遍历所有的2D跟踪物体
for (int j = 0; j < trackables.Length; j++)
{
//当该图片识别的filePath包含2D跟踪的filePath,则注册图片识别识别成功事件
if (results[i].filePath.Contains(trackables[j].filePath))
{
int index = j;
//注册图片识别识别成功事件
results[i].OnRespond.AddListener(() =>
{
ShowObj(trackables[index].gameObject);
});
}
}
}
}
private GameObject lastObj = null;
private void ShowObj(GameObject obj)
{
if (lastObj == null || lastObj != obj)
{
lastObj = obj;
//获取传入来的2D跟踪的物体的BaiduARImageTrackable组件
BaiduARImageTrackable trackable = obj.GetComponent<BaiduARImageTrackable>();
//调用SetActiveTrack为2D跟踪指定跟踪的路径(传入来的2D跟踪的物体的filePath)
BaiduARImageTracker.Instance.SetActiveTrack(trackable.filePath);
}
}
}