Skip to content

获取摄像头数据

TIP

本章节将指导开发者通过 SDK 获取到 EZXR AR Glasses 的摄像头数据;

本节介绍如何使用 RGB 相机,获取数据或其他信息。

示例

可参考 RGBPreview,Recording, Tracking2D, SpatialComputing 等场景中关于 RGB 相机的使用

接口说明

TIP

  • 使用 RGB 相机必须依赖 EZXRGlassSDK,Android 标准接口是访问不到 RGB 相机传感器的
  • 使用 EZXRGlassSDK 进行 RGB 相关功能开发,可通过 NormalRGBCameraDevice 类实现打开/关闭 RGB 相机,获取当前图像数据等功能
### NormalRGBCameraDevice


API
说明
备注
Void Open()
打开 RGB 相机。

Void Close()
关闭 RGB 相机。

bool IsStarted()
判断 RGB 是否已经正常启动。
正常返回 true。

bool getCurrentImage(ref EZVIOInputImage image, float[] intrinsic)
bool getCurrentImage(ref EZVIOInputImage image, float[] intrinsic, EZVIOImageFormat specifiedFormat)
获取当前帧图像。
通过'image'输出,默认格式为 YUV420_888/NV21,
通过’intrinsic‘输出内参(fx,fy,cx,cy,k1k2p1p2);
也可以获取指定图像格式的数据,目前仅支持指定 RGBA;
获取成功返回 true。
图像数据定义在 EZVIOInputImage.fullImg 中,传出为指针,默认数据格式为 YUV420_888(实际为 NV21)格式
bool isCameraMotionViolently()
获取当前设备抖动状态,用于判断当前相机是否稳定,可辅助与一些依赖 RGB 稳定的应用场景
稳定则返回 true。

Int32 GetRGBVideoTexture()
获得 RGB 背景纹理 ID(GLES TextureId)
返回纹理 ID

void DrawRGBVideoFrame()
void DrawRGBVideoFrame(IntPtr texturePtr)
更新 RGB 背景纹理。
其中 DrawRGBVideoFrame()会自动创建纹理,创建后可通过 GetRGBVideoTexture()获取
DrawRGBVideoFrame(IntPtr)是传入纹理 ID 绘制


获取数据并完成绘制

创建预览环境并刷新背景

json
//获取RGB相机图像分辨率,目前为固定分辨率1280*960
CameraResolution cameraResolution = new CameraResolution();
NativeTracking.GetRGBCameraResolution(ref cameraResolution);
//创建材质
//创建预览平面
//绘制并获取纹理
//纹理由Native生成,再转化为unity Texture2D
rgbCameraDevice.DrawRGBVideoFrame();
m_VideoTexture = Texture2D.CreateExternalTexture(rgbCameraDevice.GetRGBVideoTexture());

//刷新背景
m_VideoTexture.UpdateExternalTexture((IntPtr)rgbCameraDevice.GetRGBVideoTexture());

创建纹理也可以换成由 Unity 创建纹理的方式,可以参考‘Recording’示例中 ARRenderRGB.cs 的处理

json
//Unity 创建纹理
m_VideoTexture = new Texture2D(screenWidth, screenHeight, TextureFormat.RGBA32, false);
//获得TexturePtr
IntPtr texturePtr = m_VideoTexture.GetNativeTexturePtr();
//传给相机更新背景
rgbCameraDevice.DrawRGBVideoFrame(texturePtr);