Unity_ARCore⼊门(⼀)图⽚识别实例(转载)
1、概述
针对AR界的图⽚识别功能⼤致有3家;
1、ARkit:苹果的开发AR的SDK;
2、ARCore:GoogleAR的开发SDK;
3、Vuforia:⾼通的AR开发SDK;
以上SDK都有实现图⽚识别的功能,但是各有特点。
ARkit只针对苹果ios开发,可以实现图⽚的锚点定位,并且相机可以实现在现实空间中的移动;
ARCore开发Android,和ios,同样能实现ARkit的功能,⽬前⽀持的⼿机机型有限;
Vuforia⾼通的ARSDK基本的功能就是图⽚识别,稳定性也不错,只是它不能实现相机的现实空间的交互;
ARkit和Vuforia的教程在⽹上有很多,今天就着重讲⼀下ARcore的图像识别功能的实现。
被识别的图⽚以及⼀些配置要求等请参考上⾯的官⽅⽹站
下载ARCoreSDKForUnity地址:GitHub - google-ar/arcore-unity-sdk: ARCore SDK for Unity
3、新建⼀个unity⼯程,将下载好的SDK导⼊到unity中
会增加这两个⽂件夹
然后新建⼀个unity场景:这⾥就命名为ARCoreImageScene
官⽅的例⼦功能是扫描⼀个图⽚后会在图⽚位置实例化⼀个对象,⽽且官⽅的脚本不能确定扫描的图⽚和此图⽚的对应的对象是那个;
这⾥就实现官⽅没有的功能:
1、扫描图⽚让想要出现的对象显⽰,⽽不是实例化出来
2、实现扫描不同的图⽚显⽰出此图⽚对应的对象
3、添加重置位置的功能(AR的通病:会因为不同原因可能造成不同程度的对象偏移),这样就需要在偏移后重置隐藏对象并再次扫描图⽚使其回到原来的位置
3.1场景内容
场景的内容:
1:重置对象位置的功能按钮
2:实现AR扫描⼯能的控制对象
3:ARCore功能实现的必要对象体(官⽅的预设体相当AR相机)
4:扫描图⽚出现的对象
5:扫⾯过程提⽰框(扫描到后框隐藏,反之显⽰。。这个也是官⽅的⼯能可以参见官⽅demo或者说明)
敲组词3.2功能的实现
1、⾸先配置⽂件
1.0创建场景AR⼯能管理器
新建⼀个这个命名为ImageSessionConfig
plane Finding mode :Disable
1.1创建识别的图⽚库
选中要使⽤的图⽚右键创建上图⽂件命名ARCoreImage
点击刚创建的图⽚库配置内容
昂的拼音Name:识别图⽚的名字
Width:图⽚在现实中的尺⼨单位⽶(这个要接近现实,对于对象的放置有影响)
Quality:图⽚可被识别的质量,评分越⾼越好,建议不要低于60
这个图⽚库中是有顺序的,图⽚会有⼀个参数DatabaseIndex是后⾯我们要⽤到的⼀个⽤来区别不同图⽚对应不同对象的参数。
配置好的图⽚库按照上图拖到相应位置
然后配置场景ARCoreDevice
1.2核⼼控制脚本
新建⼀个脚本ARCoreImageContoller.cs挂在到上图1上;
上图3:扫描图⽚会出现的对象拖拽到此 (注意:此处对象的顺序就是图⽚库的顺序这样才能使扫描的图⽚对应相应的对象)
上图4:扫描的那个提⽰范围框拖到此
新建脚本AugmentedImageVisualizerOverride.cs.挂在到扫描图⽚需要显⽰的对象上,⽤来收集⼀些数据属性等内容的脚本。可能会被使⽤的内容:图⽚的属性啥的⽤来判断⽤
按照官⽅的PlayerSeting配置好,打包APK测试吧
上脚本:
ARCoreImageContoller.cs
//-----------------------------------------------------------------------
//
//
// Copyright 2018 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the “License”);
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an “AS IS” BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
/
/ limitations under the License.
//
//
//-----------------------------------------------------------------------
namespace GoogleARCore.Examples.AugmentedImage
{
using System.Collections.Generic;
using System.Runtime.InteropServices;
using GoogleARCore;
using UnityEngine;
using UnityEngine.UI;
public class ARCoreImageController : MonoBehaviour
{
[Header("Drag Augmented Image prefab to this")]
public List<AugmentedImageVisualizerOverride> AugmentedImageVisualizerPrefab;
[Header("Drag FitToScanOverlay to this")]
public GameObject FitToScanOverlay;
private Dictionary<int, AugmentedImageVisualizerOverride> m_Visualizers
= new Dictionary<int, AugmentedImageVisualizerOverride>();
private List<AugmentedImage> m_TempAugmentedImages = new List<AugmentedImage>();
public void Update()
{
if (Input.GetKey(KeyCode.Escape))
{
Application.Quit();
}
if (Session.Status != SessionStatus.Tracking)
{
return;
}
Session.GetTrackables<AugmentedImage>(m_TempAugmentedImages, TrackableQueryFilter.Updated);
foreach (var image in m_TempAugmentedImages)
{
Debug.Log("name1111111" + image.Name);
Debug.Log("index1111111" + image.DatabaseIndex);
AugmentedImageVisualizerOverride visualizer = null;
m_Visualizers.TryGetValue(image.DatabaseIndex, out visualizer);
if (image.TrackingState == TrackingState.Tracking && visualizer == null) {
Debug.Log("name" + image.Name);
Debug.Log("index" + image.DatabaseIndex);
Anchor anchor = image.CreateAnchor(image.CenterPose);
visualizer =AugmentedImageVisualizerPrefab[image.DatabaseIndex]; visualizer.gameObject.SetActive(true);
visualizer.Image = image;
m_Visualizers.Add(image.DatabaseIndex, visualizer);
}
}
foreach (var visualizer in m_Visualizers.Values)
{
if (visualizer.Image.TrackingState == TrackingState.Tracking)
{
FitToScanOverlay.SetActive(false);
FitToScanOverlay.SetActive(false);
return;
}
}
}
//重置位置⽅法
public void OnclickRe(int index)
{
AugmentedImageVisualizerOverride visualizer = null;
京东商城客户m_Visualizers.TryGetValue(index, out visualizer);
if (visualizer!=null)
释小龙最新电影
{移动手机充值卡
m_Visualizers.Remove(index);
visualizer.gameObject.SetActive(false);
FitToScanOverlay.SetActive(true);
}
}
}
}
AugmentedImageVisualizerOverride.cs
//-----------------------------------------------------------------------
//
/
/
// Copyright 2018 Google Inc. All Rights Reserved.
2022年国庆节祝福语//
// Licensed under the Apache License, Version 2.0 (the “License”); // you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//
// Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an “AS IS” BASIS,
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论