Почему API Unity ARFoundation для доступа к изображению с камеры на процессоре не работает для меня? - PullRequest
1 голос
/ 09 мая 2019

ARfoundation - это унифицированный API Unity для доступа к функциям дополненной реальности как на iOS через ar-Kit, так и в Android через ar-Core.

Контекст:

У них есть API для доступа к изображению с камеры на процессоре, который мы можем найти здесь: https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@1.0/manual/cpu-camera-image.html

Ват Я пробовал:

Я создал минималистичную сцену, как описано в руководствах, с ничего, кроме направленного света, ArSession и ArSessionRoot с ArPlaneManager и ArParticleManager.

Затем я добавляю пример сценария, приведенный здесь в сценарии документации: https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@1.0/manual/cpu-camera-image.html#synchronously-convert-to-grayscale-and-color

только замена

if (!cameraSubsystem.TryGetLatestImage(out image))
return;

с

if (!cameraSubsystem.TryGetLatestImage(out image))
{
    Debug.LogError("getting latest image failed again");
    image.Dispose();

    /*/ image is a struct, so it's never null.
    Probably it only needs to be disposed of if it has properly been used
    which would explain why they didn't dispose of it in the example code.
    Still, since it might be that trying-to-get-the-latest-image fails the first couple of times and would after that work,
    I'd still like to make sure it doesn't fail because there are too many image instances

    The documentation says: The CameraImage is a struct which represents a native resource. When you are finished using it, you must call Dispose on it to release it back to the system. Although you may hold a CameraImage for multiple frames, most platforms have a limited number of them, so failure to Dispose them may prevent the system from providing new camera images.
    //*/

    return;
}
Debug.Log("getting latest image succeeded for once");

У кого-то, похоже, возникла та же проблема, что и у меня, поэтому я задал этот вопрос и на этом форуме: https://forum.unity.com/threads/arfoundation-camera-api-not-working-on-android.663979/#post-4510765

Проблема:

arCameraBackground правильно отображает канал веб-камеры, cameraTrackedPoseDriver корректно обновляет положение виртуальной камеры, поскольку я могу правильно видеть эффекты arPlaneManager и arPointCloudManage (плоскости обнаруживаются и правильно отображаются, а глубина, очевидно, воспринимается с характерными точками, отображаемыми в виде частиц, когда камера перемещена)

НО: несмотря на то, что опыт AR работает нормально, я получаю спам с журналом ошибок и никогда не могу пройти мимо этого. Это означает, что событие вызывается снова и снова, но попытка получить последнее изображение всегда всегда заканчивается неудачей.

Мне нужен доступ к изображению с камеры на процессоре, я пробовал как синхронные, так и асинхронные примеры, оба возвращают false, когда я пытаюсь получить последнее изображение. Любая помощь или подсказка высоко ценится, спасибо =)

* РЕДАКТИРОВАТЬ: это на самом деле работает на Android для меня, но не на iOS

1 Ответ

0 голосов
/ 15 мая 2019

Проблема швов должна быть связана с настройками сборки. Если вы когда-нибудь сталкивались с этой проблемой, поиграйте с настройками сборки.

Я не знаю точно, в чем проблема для меня, поэтому я не могу точно сказать, что именно важно, но, например, если вы загружаете и создаете экземпляры префабов игровых объектов AR с помощью кода, Unity может лишить их, если у вас есть возможность зачистки.

...