ImageTracking_TargetOnTheFly¶
注意
该页面内容尚未更新,将于近期更新。SDK功能完整,请积极探索使用。
演示如何直接从相机图像中实时创建target并load到tracker中
用法¶
标记1:捕捉图像区域。
标记2:捕捉Mark 1内图像并使用该图像创建识别图。
标记3:卸载并删除所有已经创建的ImageTarget及缓存。
详解¶
使用相机图像的一部分作为target¶
这个 sample将相机图像的一部分当作target来使用。首先获取对应的图像数据并编码图像。
private IEnumerator TakePhotoCreateTarget()
{
...
yield return new WaitForEndOfFrame();
...
Texture2D photo = new Texture2D(Screen.width / 2, Screen.height / 2, TextureFormat.RGB24, false);
photo.ReadPixels(new Rect(Screen.width / 5, Screen.height / 5, Screen.width * 3 / 5, Screen.height * 3 / 6), 0, 0, false);
photo.Apply();
byte[] data = photo.EncodeToJPG(80);
Destroy(photo);
string photoName = "photo" + DateTime.Now.Ticks + ".jpg";
string photoPath = Path.Combine(directory, photoName);
File.WriteAllBytes(photoPath, data);
CreateImageTarget(photoName, photoPath);
...
}
可以通过图像来创建target。创建一个空的 GameObject 并添加 ImageTargetController ,然后使用图像文件设置 ImageTargetController 。
private void CreateImageTarget(string targetName, string targetPath)
{
GameObject imageTarget = new GameObject(targetName);
var controller = imageTarget.AddComponent<ImageTargetController>();
controller.SourceType = ImageTargetController.DataSource.ImageFile;
controller.ImageFileSource.PathType = PathType.Absolute;
controller.ImageFileSource.Path = targetPath;
controller.ImageFileSource.Name = targetName;
controller.Tracker = Filter;
...
}
这个 sample使用了非常直接的方法来创建target,但这不是性能最佳的方式。为达到最佳性能,可以使用image数据的字节数组创建 Image ,并使用 ImageTarget.createFromParameters 来创建target。