【Unity2019】利用Vuforia在安卓平台调用UVC相机

【Unity2019】利用Vuforia在安卓平台调用UVC相机,第1张

目录结构 Unity中使用Vuforia调用安卓设备上的UVC相机1、说明2、环境要求1) *** 作系统要求2)Python3)git4)CMake5)Ninja6)Android NDK 13b7)Android SDK 228)libuvc, libusb, libjpg-turbo 3、编译步骤1)Vuforia 安卓SDK和Vuforia UVCDriver Sample下载2)文件整理3)编译 4、Unity端调用1)对应版本的Vuforia SDK for Unity集成2) 自定义Vuforia Database集成。3)场景内 *** 作。4) 其他必要设置: 5、其他补充参考资料:附录:

Unity中使用Vuforia调用安卓设备上的UVC相机

本文主要实现在 Unity 中利用 Vuforia开发安卓平台应用,并且要求调用外接的UVC相机。实际上以安卓为目标平台开发AR应用,经常绕不开UVC相机,除非AR一体机。Vuforia的AR SDK没有直接提供支持UVC Camera的SDK,但是提供了一种方法指引。该指引对开发新手来说并不友好,反复研究很多遍才编译成功。接下来就按照该指引的框架展开。

1、说明

本文所用的Unity版本是Unity2019.4.14f1c1和Unity2020.3.30f1c1,Vuforia Unity平台的SDK版本为9.8.5,版本选用上有些坑需要避开。
目前Vuforia官网提供下载的SDK版本只有10.5和9.8,Unity2019以后集成Vuforia SDK主要是通过Package Manager,但是常年不更新。路径如下Window-Package Manager-Vuforia Engine AR,默认版本是8.1.12,最高支持到8.5.9。这里之所以提到SDK版本,是因为本文的目标是编译Unity中使用的so库和jar包,编译的过程除了Vuroria SDK for Unity外,还需要到Vuroria SDK For Android和Vuforia提供的一个UVC Driver Sample,这些要求版本保持一致。

本文已测试的相机包括罗技C310、普通USB Camera,还有两款AR眼镜。

2、环境要求

1) *** 作系统要求

Windows 10 都可以,这部分可以忽略。Platform Support:

2)Python

要求Python2及以上。后续编译会用到。Python直接官网下载,安装即可,安装过程会自动配置环境变量(需勾选)。

3)git

这个其实可有可无,毕竟由于网络问题,使用git命令clone代码就没成功过,所以也可以直接将代码下载下来解压使用。
git的安装也比较简单,官网下载直接安装就行。

4)CMake

要求CMake3.6及以上。官网找到自己需要的版本安装即可:https://cmake.org/download/
CMake版本查询命令:cmake --version

5)Ninja

这个是个开源工具,直接下载、解压即可。需要配置环境变量。下载地址:https://github.com/ninja-build/ninja/releases

6)Android NDK 13b

这个最重要,安装同样简单,下载然后配置环境变量即可。注意:要求的是r13b
下载地址:https://developer.android.google.cn/ndk/downloads/older_releases


7)Android SDK 22

通过Android Studio的SDK Manager下载就行。



8)libuvc, libusb, libjpg-turbo

此处不需要下载。后续使用时通过git clone或者直接从github Download ZIP。

3、编译步骤

整体步骤如下:

1)Vuforia 安卓SDK和Vuforia UVCDriver Sample下载 Vuforia Engine for Android:https://developer.vuforia.com/downloads/sdk 。注意选择9.8的版本。UVCDriver Sample:https://developer.vuforia.com/downloads/samplesUVCCamera库下载:https://github.com/saki4510t/UVCCamera 。这是一个开源的第三方库。建议直接点击Download下载。
2)文件整理 解压Vuforia Engine for Android和UVCDriver Sample,得到vuforia-sdk-android-9-8-11vuforia-driver-sample-uvcdriver-android-9-8-5 两个文件夹,将后者文件夹改名为“UVCDriver”并剪切到“/vuforia-sdk-android-9-8-11/samples”文件夹下。结果如下:

解压UVCCamera-master并将解压后文件夹改名为“UVCCamera”,如下:
将“UVCCamera”文件夹剪切到“vuforia-sdk-android-9-8-11\samples\UVCDriver”文件夹下,如下:
3)编译

第一步:打开cmd窗口,转到“…/UVCCamera/libuvccamera/src/main/jni”路径下。具体路径根据自己文件位置调整。
第二步:执行ndk-build。命令前部分为ndk路径,即[path-to-ndk-on-your-machine]/ndk-build,这边是在D盘单独放置了一份NDK r13b,编译时指向自己就可以。

 e:
 cd E:\Unity2019.4.14f1c1Project\9.8\vuforia-sdk-android-9-8-11\samples\UVCDriver\UVCCamera\libuvccamera\src\main\jni
 D:/MyTools/android-ndk-r13b-windows-x86_64/android-ndk-r13b/ndk-build 
 


编译完成后,如下:

第三步:转到 "/samples/UVCDriver "路径下,并执行python build.py

编译完成后,如下:

至此,在 /UVCDriver/build/bin/Android目录下可以看到我们编译出来的so和jar包

4、Unity端调用

以Unity2019.4.14f1c1为例,Vuforia 9.8这个版本Package Manager内是没有的,Vuforia官网提供的是git下载工具,经过多次测试,均以失败告终(网络问题)。这里的解决办法是找到Vuforia的代码仓库,切换到对应版本,直接Download Zip。具体 *** 作如下:

1)对应版本的Vuforia SDK for Unity集成

打开Unity Hub–新建Unity工程–打开Package Manager面板–点击左上角“+”按钮–选择“Add package from disk”–找到下载的代码,选择“package.json”文件并打开即可载入对应版本的Vuforia SDK for Unity。

Vuforia SDK仓库:https://dev.azure.com/vuforia-engine/unity-extension/_git/com.ptc.vuforia.engine?path=/&version=GB9.8.5&_a=contents

2) 自定义Vuforia Database集成。

就是识别图像的载入。本步骤可以忽略,当没有自定义Datbase时,系统可选择载入系统自带图库。

3)场景内 *** 作。

1、在Hierarchy面板内,新建一个ARCamera、一个Image Target、一个Empty并改名为UVCManager(用于挂脚本),选择ARCamera–Open Vuforia Engine configuration–App License Key,输入应用License Key(官网注册申请即可:https://developer.vuforia.com/vui/develop/licenses)


2、 新建一个脚本,挂载到场景内的UVCManager上(实际上可挂载任意位置),内容如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
public class UVCManager : MonoBehaviour
{
    private void Awake()
    {
#if UNITY_ANDROID
        bool driverLibrarySet = false;
        driverLibrarySet = VuforiaUnity.SetDriverLibrary("libUVCDriver.so");

        if (driverLibrarySet)
        {
            // Load your applications scene here 
            // InitAndLoadScene(VUFORIA_DRIVER_CAMERA_SCENE_INDEX);

            // The application needs to ask for USB permissions to run the USB camera
            // this is done after the driver is loaded. We call a method in the UVC driver
            // Java code to request permissions, passing in the Unity app's activity.
            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);
        }
        else
        {
            Debug.Log("Failed to initialize the UVC driver - defaulting to the standard scene");

            // Fall back to the in-built camera
        }
#endif

    }
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }
}

3、 将上面编译的jar包和so拷贝到Assets/Plugins/Android/libs文件夹下:

4) 其他必要设置:

在Player Setting内,需要将Graphics API内的Vulkan去掉。然后打包即可。

5、其他补充

关于Vuforia版本。官网最新版本为10.5,该版SDK对Unity版本要求较高,需要Unity2020才能打得开。并且使用Vuforia10.5在Unity2020内发布时,Vuforia Engine configuration需要取消Include ARCore library选项,并且Player Setting内发布的Minimum API Level需要改为API Level 23。 另外10.5版本感觉UVC这一块,我这边测试是失效的,UVC相机压根就没工作。9.8版本中Android SDK是9.8.11,UVC sample和Unity SDK对应的是9.8.5,测试过程中发现9.8.11会导致Vuforia启动失败,直到降版本至9.8.5这些问题才全部解决。

关于UVCCamera库。这个第三方库默认调用一个USB设备,当外接多个Camera或者包含其他USB设备时,可能会导致启动失败。如果想在连接多USB Camera时启动指定Camera,那么可以在 “\UVCDriver\src\Java\com\vuforia\samples\uvcDriver\USBController.java” 这个脚本内修改。

参考资料:

[1].Building and Using the UVC Camera Driver Sample
[2].Vuforia Engine Package for Unity
[3].Vuforia用在安卓设备中外接USB摄像头(一)
[4].Vuforia用在安卓设备中外接USB摄像头(二)
[5].Unity Vuforia 之 简单实现Vuforia调用Android设备外接摄像头camera实现AR

附录:

这里是编译好的so和jar包:https://download.csdn.net/download/uthinkd/83328413

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/992334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存