Vuforia Plugin 8.x.x概述

作者:追风剑情 发布于:2019-4-9 16:24 分类:Unity3d

高通开发的VR/AR

https://developer.vuforia.com/
Getting Started with Vuforia Engine in Unity
License Manager
[官方文档] Unity XR
SDK下载
https://developer.vuforia.com/downloads/sdk
https://docs.unity3d.com/Manual/vuforia-sdk-overview.html
使用教程参考
https://blog.csdn.net/SimulationPD/article/details/87272566
3D物体识别参考
https://blog.csdn.net/weixin_37608784/article/details/80434554
Vuforia开发文档
Vuforia Unity API文档
Vuforia Engine for Digital Eyewear(数字眼镜)
Vuforia开发文档 (影创眼镜 ActionOne)

Vuforia硬件与软件必要条件
Supported Versions
设备OS 开发OS Unity版本
Android 4.1+ Windows 7+ 2017.2+
iOS 9+ OSX 10.11+ 2017.2+
Windows 10 UWP

利用下载助手安装高通的Vuforia
需要Unity 2017.3或更新的版本
官方教程: https://library.vuforia.com/articles/Training/getting-started-with-vuforia-in-unity.html
111.png 

Unity 2019 在 Package Manager 中搜索 Vuforia 并安装

11111.png
激活Vuforia Engine
PlayerSettings

111.png

11111.png

11111.png

Culling Mask必须要勾选上Default,否则无法显示摄像头画面

11111.png

如果勾选了Delayed Initialization,则需要手动初始化和启动Vuforia
Max Simultaneous Tracked Images: 最大识别图数量
Max Simultaneous Tracked Objects: 最大识别对象数量
DeviceType
Handheld: 手持设备
Digital Eyewear: 数字眼镜
Phone + Viewer: 手机加显示器设备(MR开发)

查看摄像头配置
{Unity安装目录}\Editor\Data\PlaybackEngines\VuforiaSupport\VuforiaResources\webcamprofiles.xml

<?xml version="1.0"?>
<profiles>
	<!-- this profile will be used if no specific profile could be found -->
    <default>
        <windows>
            <!-- size of the web cam texture requested from Unity -->
            <requestedTextureWidth>640</requestedTextureWidth>
            <requestedTextureHeight>480</requestedTextureHeight>
            <!-- size of the texture Unity's web cam texture will be rescaled to -->
            <resampledTextureWidth>640</resampledTextureWidth>
            <!-- <resampledTextureHeight>480</resampledTextureHeight> -->
        </windows>
        <osx>
            <!-- size of the web cam texture requested from Unity -->
            <requestedTextureWidth>640</requestedTextureWidth>
            <requestedTextureHeight>480</requestedTextureHeight>
            <!-- size of the texture Unity's web cam texture will be rescaled to -->
            <resampledTextureWidth>640</resampledTextureWidth>
            <!-- <resampledTextureHeight>480</resampledTextureHeight> -->
        </osx>
    </default>
<!-- 省略...... -->
</profiles>


111.png

目标管理器(Target Manager)

111.png

图像识别选择 Single Image
Width: Vuforia用的单位是米,Unity用的单位也是米。直接填1即可。
11111.png

如果提示图像格式不正确,可在线转下格式:
http://www.picturetopeople.org/image_utilities/image_converter.html
22222.png

Vuforia AR辅助类


using System;
using Vuforia;
/// <summary>
/// 高通AR辅助类
/// </summary>
public sealed class VuforiaHelper
{
    /// <summary>
    /// 手动启动摄像头进行AR扫描
    /// 当勾选了Delayed Initialization选项时,才需要手动调用此接口
    /// </summary>
    public static void StartCameraDevice()
    {
        if (VuforiaRuntime.Instance.InitializationState == VuforiaRuntime.InitState.NOT_INITIALIZED)
            VuforiaRuntime.Instance.InitVuforia();
        if (!CameraDevice.Instance.IsActive())
            CameraDevice.Instance.Start();
    }

    //自动对焦
    public static void AutoFocus()
    {
        var isAutoFocus = CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
        if (!isAutoFocus)
            CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_NORMAL);
    }

    /// <summary>
    /// 停止AR扫描,释放摄像头设备
    /// </summary>
    public static void StopCameraDevice()
    {
        if (CameraDevice.Instance.IsActive())
            CameraDevice.Instance.Stop();
    }

    /// <summary>
    /// 启动识别
    /// </summary>
    public static void StartTrack()
    {
        StartCameraDevice();
        ObjectTracker tracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
        if (tracker != null)
            tracker.Start();
        AutoFocus();
    }

    /// <summary>
    /// 停止识别
    /// </summary>
    public static void StopTrack()
    {
        ObjectTracker tracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
        if (tracker != null)
            tracker.Stop();
    }

    /// <summary>
    /// 退出程序时需要调用此接口
    /// </summary>
    public static void Quit()
    {
        VuforiaRuntime.Instance.Deinit();
    }

    // 注册Vuforia初始化出错回调
    public static void RegisterVuforiaInitErrorCallback(Action<VuforiaUnity.InitError> callback)
    {
        VuforiaRuntime.Instance.RegisterVuforiaInitErrorCallback(callback);
    }

    public static void UnregisterVuforiaInitErrorCallback(Action<VuforiaUnity.InitError> callback)
    {
        VuforiaRuntime.Instance.UnregisterVuforiaInitErrorCallback(callback);
    }

    // 注册Vuforia启动成功回调
    public static void RegisterVuforiaStartedCallback(Action callback)
    {
        VuforiaARController.Instance.RegisterVuforiaStartedCallback(callback);
    }

    public static void UnregisterVuforiaStartedCallback(Action callback)
    {
        VuforiaARController.Instance.UnregisterVuforiaStartedCallback(callback);
    }
}



构建UVC摄像头驱动(即,USB外置摄像头)

官方文档
Vuforia用在安卓设备中外接USB摄像头(一)
Vuforia用在安卓设备中外接USB摄像头(二)

11111.png

注意:UVCCamera所支持的摄像头类型(官方文档

111111.png

Git的使用
1、cd到一个目录,输入git init,此时会在目录下生成一个.git隐藏目录
2、输入git clone url迁出项目
2222.png
3、更新项目(即,从远程主机拉取最新内容并与当前本地分支合并)
例如 git pull https://github.com/saki4510t/UVCCamera.git
3333.png

一、编译依赖库

1、将下载好的UVCCamera库放到{你的存放目录}\vuforia-sdk-android-9-3-3\samples\UVCDriver

2222.png

2、配置环境变量Path{你的存放目录}\android-ndk-r13b\build

3、cd到{你的存放目录}\vuforia-sdk-android-9-3-3\samples\UVCDriver\UVCCamera\libuvccamera\src\main

4、运行ndk-build APP_BUILD_SCRIPT=jni/Android.mk

11111.png

5、此时将在jni\libs目录下生成各平台的.so文件。

3333.png

6、一定要将生成好的libs目录剪切到main目录下,否则后面执行python build.py时,会报找不到所依赖的.so

44444.png

二、编译UVCCamera驱动

1、将下载好的vuforia-driver-sample-uvcdriver-android-9-3-3解压到{你的存放目录}\vuforia-sdk-android-9-3-3\samples\UVCDriver

777.png

2、cd到UVCDriver路径,并执行python build.py

8888.png

编译时如果报以下错

error.png

解决方案参见 https://www.jianshu.com/p/8fc3c5b9d738

修改libuvc.h文件

libuvch.png

livuvch-add.png

在libuvc.h文件中添加一条声明
const uvc_format_desc_t *uvc_get_format_descs(uvc_device_handle_t *devh);

再次运行python build.py,如果成功会在UVCDriver\build\bin\Android目录下生成驱动文件
6666.png

55555.png


编译好的驱动库 百度网盘下载 提取码:3u08

三、使用UVCCamera驱动

1、勾上延迟初始化

1111111.png


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
/// <summary>
/// 高通AR辅助类
/// </summary>
public sealed class VuforiaHelper
{
    private static bool driverLibrarySet = false;
    // 加载UVC(USB视频类)驱动程序,成功后才能访问外置摄像头
    public static void LoadUVCDriver()
    {
#if UNITY_ANDROID
        if (driverLibrarySet)
            return;
        Debug.Log("*** LoadUVCDriver()");
        driverLibrarySet = VuforiaUnity.SetDriverLibrary("libUVCDriver.so");
        Debug.LogFormat("Load libUVCDriver.so : {0}", driverLibrarySet);
        if (!driverLibrarySet)
            Debug.Log("Failed to initialize the UVC driver.");
#endif
        //恢复默认驱动
        //VuforiaUnity.SetDriverLibrary("");
    }

    //动态申请USB权限
    public static void RequestUSBPermission()
    {
        Debug.Log("*** RequestUSBPermission()");
        AndroidJavaClass unityJC = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject unityActivity = unityJC.GetStatic<AndroidJavaObject>("currentActivity");

        AndroidJavaClass usbControllerJC = new AndroidJavaClass("com.vuforia.samples.uvcDriver.USBController");
        usbControllerJC.CallStatic("requestUSBPermission", unityActivity);
    }

    /// <summary>
    /// 手动启动摄像头进行AR扫描
    /// 当勾选了Delayed Initialization选项时,才需要手动调用此接口
    /// </summary>
    public static void StartCameraDevice()
    {
        //必须要在初始化前加载驱动文件(libUVCDriver.so)
        //如果想使用USB摄像头,一定要勾上Delayed Initialization选项
        LoadUVCDriver();
        RequestUSBPermission();

        if (VuforiaRuntime.Instance.InitializationState == VuforiaRuntime.InitState.NOT_INITIALIZED)
        {
            Debug.Log("*** InitVuforia()");
            VuforiaRuntime.Instance.InitVuforia();
        }
        CameraDevice.Instance.Start();
    }

    /// <summary>
    /// 停止AR扫描,释放摄像头设备
    /// </summary>
    public static void StopCameraDevice()
    {
        CameraDevice.Instance.Stop();
    }

    /// <summary>
    /// 退出程序时需要调用此接口
    /// </summary>
    public static void Quit()
    {
        VuforiaRuntime.Instance.Deinit();
    }
}

也可以通过隐藏/显示ARCamera对象来临时暂停/启用高通。


四、Windows 10 上运行 Vuforia

0000.png

9999.png

发布应用

8888.png

创建应用程序包

7777.png

选择签名方法

6666.png

55555.png

用 PowerShell 安装应用

4444.png

22222.png

UWP应用被安装到下面目录:
C:\Program Files\WindowsApps\Template4D_1.0.0.0_x64__pzq3xp76mxafg

3333.png

1111.png

部分电脑运行应用可能会遇到如下问题:
ObjectTracker failed to initialize
Unable to start ObjectTracker. Your hardware may not support it.
111111.png
原因:不明
解决方案:无

五、UWP应用解除网络限制

1、解除单个UWP应用的网络限制
①、在运行里输入 Regedit 回车,打开注册表
、在HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings下面找到UWP应用的SID

11111.png

③、在CMD中输入 CheckNetIsolation.exe loopbackexempt -a -p=SID
2222.png

2、解除所有UWP应用的网络限制

批处理——解除所有UWP应用网络限制
@echo off
FOR /F "tokens=11 delims=\" %%p IN (
'REG QUERY "HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\
AppContainer\Mappings"')^
DO CheckNetIsolation.exe LoopbackExempt -a -p=%%p

注意   UWP程序只能做为客户端,无法做服务器(受安全沙箱限制,外面无法主动与UWP应用建立网络连接)


[微软官方文档] PowerShell Appx 命令

标签: Unity3d

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号