Получение UIImage или CIImage из ARReferenceImage - PullRequest
0 голосов
/ 18 января 2019

Я использую ARKit, чтобы сделать анимацию поверх ARAnchors. Мои изображения хранятся в формате AR Resource Group, как показано ниже.

enter image description here

Как таковые, к ним можно получить доступ, как показано ниже, чтобы загрузить их в мой сеанс в качестве отслеживаемых изображений. Тем не менее, Я также хотел бы выполнить несколько отдельных операций с этими же изображениями и, следовательно, должен иметь к ним доступ как CIImages или UIImages. Прямо сейчас мне нужно импортировать их отдельно в мой проект, потому что, кажется, нет способа извлечь изображение из ARReferenceImage. Есть ли способ сделать это? Очень удобно использовать AR Resource Group, поскольку он отображает соответствующие предупреждения о потенциальных конфликтах, а также менее производительные маркеры перед компиляцией. Я также предполагаю, что загрузка приложения потребует больше времени, если я преобразую, скажем, мои PNG-изображения в CIImages, затем в ARReferenceImage в моем viewDidLoad() или каким-либо подобным способом.

guard let trackedImages = ARReferenceImage.referenceImages(inGroupNamed: "Photos", bundle: Bundle.main) else {
    print("No images available")
    return
}

1 Ответ

0 голосов
/ 22 января 2019

Создание ARReferenceImage s в XCode не помещает исходные изображения в каталог ресурсов вашего приложения, поэтому исходное изображение недоступно во время выполнения. (Вместо этого ARKit предварительно обрабатывает изображение в форме, которая делает распознавание более эффективным при использовании меньшего количества памяти.)

Если вы хотите использовать изображение как для распознавания ARKit, так и для визуального отображения (или другой обработки), вам нужно будет включить его в свой каталог активов дважды - один раз как эталонное изображение AR, а затем снова как обычное ( UIImage) актив.

В качестве альтернативы, вы можете добавить его в каталог активов как обычное изображение, а затем создать из него ARReferenceImage во время выполнения - у этого класса есть инициализатор, который принимает CGImage. (В этом случае может оказаться полезным использовать область «Эталонные изображения AR» каталога ресурсов, чтобы выполнить предварительную проверку ваших изображений и убедиться, что они хороши для распознавания, даже если вы их не доставляете таким образом.

...