项目是安卓接入AR眼镜,使用AR眼镜的Camera进行识别

首先安卓手机接入AR眼镜后,不能直接打开相机,需要使用AndroidStudio写一个驱动注册,这部分是网上的代码,因为不是做安卓驱动开发的所以具体也不清楚,就不讲了。

然后自己使用AndroidStudio在网上代码上封装了打开关闭相机,以及回调byte[] 的图片数据

使用Unity调用测试成功。

结合EasyAR

easyAr 3.0有一个CustomCamera 的示例,这个示例会调用相机然后获取图片byte[]数组,然后传给EasyAR的识别部分。这个自定义相机要安卓支持,所以直接使用是不行的。

CustomCameraProxy类中,写了具体和相机的交互。

在数据回调中会使用  HandleSink(buffer, format, imageSize, orientation, cameraType, timestamp);这个函数。

因此只需要在自己相机回调中,调用这个函数就可以了。

EasyAR的CustomCamera安卓jar包中也封装了数据的结构,可以仿照他的代码写。


测试有效 ,但是需要修改AR Session代码中的调用函数。图片格式不能是压缩格式,easyar只支持固定的几种格式,因此在获取相机byte[] 数据后,格式不对的需要转换。

用这个逻辑,识别其实不一定要视频,图片应该也是可以的,EasyAR底层只是接收了图片数据

包括陀螺仪的数据,其实也是可以自己修改的,但是需要重新编译EasyAR的jar包,这样就可以实现AR眼镜的slam效果了。通过将眼镜Camera的图像替换,和眼镜陀螺仪数据替换,因为本身没有这个接口(所以只能重新编译jar包),希望后期还是能开放一下这些接口吧

这是我写的修改的CustomCameraProxy类,如果你自己要修改的话,需要根据你们自己java代码写法修改的。java层代码就不方便公布了,因为有很多其他数据在里面。其实你们把EasyAR那个CustomCamera的jar包打开看看就能明白了

#if EasyAR3Project
using AOT;
using UnityEngine;
using System;
using System.Runtime.InteropServices;namespace easyar
{public class CustomCameraProxy{private InputFrameSink targetSink;public void Init(){WorldCamera.SetFrameCallBack(UpdateFrame);}private void UpdateFrame(AndroidJavaObject dataWrapper){if (targetSink == null){return;}var byteArray = dataWrapper.Get<AndroidJavaObject>("Buffer");var jniByteArray = byteArray.GetRawObject();var buffer = JniUtility.wrapByteArray(jniByteArray, true, () => { byteArray.Dispose(); });var param = dataWrapper.Get<AndroidJavaObject>("camParams");int cameraType = param.Call<int>("getCameraType");double timestamp = param.Call<long>("getTimestamp") * 1e-9;var imageWidth = param.Call<int>("getWidth");var imageHeight = param.Call<int>("getHeight");var imageSize = new Vector2(imageWidth, imageHeight);//HandleSink(buffer, PixelFormat.RGBA8888, imageSize, 0 , 1 , timestamp);HandleSink(buffer, PixelFormat.Gray, imageSize, 0, 1, timestamp);}public void Start(){WorldCamera.Open();}public void Stop(){WorldCamera.Close();}public void Dispose(){}public void Connect(InputFrameSink sink){targetSink = sink;}private void HandleSink(Buffer imageBuffer, PixelFormat format, Vector2 imageSize, int orientation, int cameraType, double timestamp){var cameraParams = CameraParameters.createWithDefaultIntrinsics(new Vec2I((int)imageSize.x, (int)imageSize.y), (CameraDeviceType)cameraType, orientation);var image = new Image(imageBuffer, format, (int)imageSize.x, (int)imageSize.y);var frame = InputFrame.createWithImageAndCameraParametersAndTemporal(image, cameraParams, timestamp);targetSink.handle(frame);imageBuffer.Dispose();frame.Dispose();image.Dispose();cameraParams.Dispose();}}
}
#endif

Unity EasyAR 使用自定义UVC相机(安卓)相关推荐

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

    目录结构 Unity中使用Vuforia调用安卓设备上的UVC相机 1.说明 2.环境要求 1)操作系统要求 2)Python 3)git 4)CMake 5)Ninja 6)Android NDK ...

  2. UVCAndroid,安卓UVC相机通用开发库(支持多预览和多摄像头)

    文章目录 简介 主要功能 如何使用 1. 添加依赖到本地工程 2. 获取权限 3. 初始化UVC业务类,设置UVC摄像头状态回调,设置TextureView或者SurfaceView的Surface监 ...

  3. Unity小游戏-彩笔画师(安卓、PC)2D益智类游戏 项目展示+完整项目源码

    游戏录像 游戏玩法 谁画在屏幕上占的颜色最多,谁获胜. 功能 1.游戏有多个关卡,每个关卡的人机难度不一致. 2.可以存金币购买角色,不同角色的技能和属性不一样. 3.每个关卡的评分等数据存到本地. ...

  4. 【转】Unity Scene场景自定义坐标轴

    [转]Unity Scene场景自定义坐标轴 来自:https://blog.csdn.net/cheng624/article/details/70859054 多看看别人的代码是没有坏处的,即使学 ...

  5. Unity中Oculus分屏相机和普通相机一键切换

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50462157 作者:car ...

  6. 使用ros发布UVC相机和串口IMU数据

    1.目的:为了可以标定普通USB相机和固定在相机上的外置IMU的外参,我希望通过ROS获取更高分辨率和更高频率的图像数据,并且可以将图像和imu的topic发布出来,直接使用rosbag record ...

  7. Cinemachine教程 | Unity中如何快速制作相机切换动画?

    摘要:使用Cinemachine可以快速制作相机切换动画,来看看我是怎么做的吧. 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦. 好久不见.我最近 ...

  8. Unity小游戏-平衡大师(安卓、PC、web)2D益智类游戏 项目展示+完整项目源码

    游戏录像 游戏试玩 平衡带师_平衡带师html5游戏_4399h5游戏-h.4399.com 游戏玩法 这是一款类似堆积木的游戏,它非常考验玩家的智商和手速,难度系数很高的游戏,谁能征服它,谁就是平衡 ...

  9. android自定义美颜相机,效果最自然 美颜相机for Android版更新

    [IT168 资讯]备受爱自拍女生追捧的手机自拍神器"美颜相机"安卓版在八月初迎来了又一次重大改版,跟iPhone最新版一样,美颜相机安卓版1.3也在"自拍"功 ...

  10. Unity某个物体始终朝向相机

    1.Unity某个物体始终朝向相机 Quaternion q = Quaternion.identity;q.SetLookRotation(Camera.main.transform.forward ...

最新文章

  1. 关于uWSGI服务器的安装和启动(一)
  2. MySQL—数据库表的完整性约束(非外键约束)
  3. javascript基础--数组排序
  4. 【软件开发底层知识修炼】一 深入浅出处理器之一 微处理器与微控制器
  5. sts 的js代码不变色_[黑科技] 使用 Laravel Livewire 来构建实时搜索功能(不使用一行 JS 代码)...
  6. Linux服务器查看日志方法小结
  7. js获取某节点的特定父节点
  8. EasyCHM制作教程
  9. magisk 启动 安全 app
  10. 几种免杀转储lsass进程的技巧
  11. 1.1 芯片研究背景及意义
  12. 曲线运动与万有引力公式_高中物理必修一知识点总结:曲线运动万有引力
  13. 生产者消费者模型的作用
  14. select的执行顺序
  15. 名悦集团:开车从不追尾,老司机分享驾驶避免事故小知识
  16. 姚能伟:以邻盛智能为例,如何在行业大脑进行创新实践
  17. 【代码洁癖症】第1回-简单工厂模式
  18. 电竞入亚各方皆大欢喜,但电竞本身却不是最大赢家
  19. 刚刚,马斯克当选美国工程院院士!智源张宏江博士入选外籍院士
  20. 计算机应用基础第2版刘念祖答案,大学数学与计算机公共基础课程的教学研究-刘念祖主编.pdf...

热门文章

  1. 局域网计算机共享文件夹点不开,局域网共享文件夹打不开的解决方法
  2. 入门masm32编写简单汇编程序并做具体分析
  3. linux hotplug 机制,佐须之男的博客- 跟着佐大学Lede/OpenWrt开发入门培训班讲义-18 OpenWrt hotplug 机制分析...
  4. JAVA系列---项目打包部署
  5. C盘清理最全攻略,用这几招轻松解决,不存在C盘爆红
  6. 利用photoshop制作身份证复印件的流程
  7. 神经网络控制的基本原理,神经网络技术及其应用
  8. 升级 ArcGIS Server 9.2 sp3 补丁
  9. openssl漏洞补丁修复
  10. 《数值分析》-- 数值计算中的误差与有效数字