public static bool TryGetCameraImageBytes(out ARCameraImageBytes image) { bool isHD = false; if (ImmersalSDK.Instance.androidResolution == ImmersalSDK.CameraResolution.Max) { try { image = ARFrame.AcquirPreviewImageBytes(); isHD = true; } catch (SystemException e) { Debug.LogError("Cannot acquire FullHD image: " + e.Message); image = ARFrame.AcquireCameraImageBytes(); } } else { image = ARFrame.AcquireCameraImageBytes(); } return(isHD); }
public override void LocalizeServer() { ARCameraImageBytes image = null; if (m_Sdk.androidResolution == ImmersalSDK.CameraResolution.Max) { try { image = ARFrame.AcquirPreviewImageBytes(); } catch (NullReferenceException e) { Debug.LogError("Cannot acquire FullHD image: " + e.Message); image = ARFrame.AcquireCameraImageBytes(); } } else { image = ARFrame.AcquireCameraImageBytes(); } if (image != null && image.IsAvailable) { CoroutineJobLocalizeServer j = new CoroutineJobLocalizeServer(); j.host = this; if (this.useGPS) { j.useGPS = true; j.latitude = m_Latitude; j.longitude = m_Longitude; j.radius = DefaultRadius; } Camera cam = this.mainCamera; j.rotation = cam.transform.rotation; j.position = cam.transform.position; j.intrinsics = HWARHelper.GetIntrinsics(); j.width = image.Width; j.height = image.Height; HWARHelper.GetPlaneData(out j.pixels, image); j.channels = 1; m_Jobs.Add(j); image.Dispose(); } }
protected override IEnumerator Capture(bool anchor) { yield return(new WaitForSeconds(0.25f)); m_bCaptureRunning = true; ARCameraImageBytes image = null; if (m_Sdk.androidResolution == ImmersalSDK.CameraResolution.Max) { try { image = ARFrame.AcquirPreviewImageBytes(); } catch (NullReferenceException e) { Debug.LogError("Cannot acquire FullHD image: " + e.Message); image = ARFrame.AcquireCameraImageBytes(); } } else { image = ARFrame.AcquireCameraImageBytes(); } if (image != null && image.IsAvailable) { CoroutineJobCapture j = new CoroutineJobCapture(); j.host = this; j.run = (int)(m_ImageRun & 0xEFFFFFFF); j.index = m_ImageIndex++; j.anchor = anchor; if (useGPS) { j.latitude = m_Latitude; j.longitude = m_Longitude; j.altitude = m_Altitude; } else { j.latitude = j.longitude = j.altitude = 0.0; } Camera cam = this.mainCamera; Quaternion _q = cam.transform.rotation; Matrix4x4 r = Matrix4x4.Rotate(new Quaternion(_q.x, _q.y, -_q.z, -_q.w)); Vector3 _p = cam.transform.position; Vector3 p = new Vector3(_p.x, _p.y, -_p.z); j.rotation = r; j.position = p; j.intrinsics = HWARHelper.GetIntrinsics(); j.width = image.Width; j.height = image.Height; HWARHelper.GetPlaneData(out j.pixels, image); j.channels = 1; if (m_SessionFirstImage) { m_SessionFirstImage = false; } m_Jobs.Add(j); image.Dispose(); } m_bCaptureRunning = false; var captureButton = workspaceManager.captureButton.GetComponent <Button>(); captureButton.interactable = true; }
public override IEnumerator Localize() { ARCameraImageBytes image = null; if (m_Sdk.androidResolution == ImmersalSDK.CameraResolution.Max) { try { image = ARFrame.AcquirPreviewImageBytes(); } catch (NullReferenceException e) { Debug.LogError("Cannot acquire FullHD image: " + e.Message); image = ARFrame.AcquireCameraImageBytes(); } } else { image = ARFrame.AcquireCameraImageBytes(); } if (image != null && image.IsAvailable) { stats.localizationAttemptCount++; Vector3 camPos = m_Cam.transform.position; Quaternion camRot = m_Cam.transform.rotation; byte[] pixels; Vector4 intrinsics = HWARHelper.GetIntrinsics(); HWARHelper.GetPlaneData(out pixels, image); image.Dispose(); Vector3 pos = Vector3.zero; Quaternion rot = Quaternion.identity; float startTime = Time.realtimeSinceStartup; Task <int> t = Task.Run(() => { return(Immersal.Core.LocalizeImage(out pos, out rot, image.Width, image.Height, ref intrinsics, pixels)); }); while (!t.IsCompleted) { yield return(null); } int mapId = t.Result; if (mapId >= 0 && ARSpace.mapIdToOffset.ContainsKey(mapId)) { if (mapId != lastLocalizedMapId) { if (m_ResetOnMapChange) { foreach (KeyValuePair <Transform, SpaceContainer> item in ARSpace.transformToSpace) { item.Value.filter.ResetFiltering(); } } lastLocalizedMapId = mapId; } HWARHelper.GetRotation(ref rot); MapOffset mo = ARSpace.mapIdToOffset[mapId]; float elapsedTime = Time.realtimeSinceStartup - startTime; Debug.Log(string.Format("Relocalised in {0} seconds", elapsedTime)); stats.localizationSuccessCount++; Matrix4x4 cloudSpace = mo.offset * Matrix4x4.TRS(pos, rot, Vector3.one); Matrix4x4 trackerSpace = Matrix4x4.TRS(camPos, camRot, Vector3.one); Matrix4x4 m = trackerSpace * (cloudSpace.inverse); mo.space.filter.RefinePose(m); } } yield return(StartCoroutine(base.Localize())); }