ARCore — обнаружение стен

Я смотрел на новую библиотеку Android ARCore. У него есть метод обнаружения горизонтальных поверхностей, но нет метода обнаружения вертикальных поверхностей или стен.

На самом деле я пытался заставить образец приложения обнаруживать стены, но у меня много проблем.

Есть ли способ изначально или нестандартно обнаруживать вертикальные поверхности в ARCore?


person TheMainJoy    schedule 10.10.2017    source источник
comment
Ничто из того, что я видел, похоже, не способно делать вертикальные плоскости банкоматов.   -  person tyczj    schedule 10.10.2017
comment
Вы обнаруживаете что-нибудь для NON_HORIZONTAL типа плоскости: developers .google.com/ar/reference/java/com/google/ar/core/   -  person Morrison Chang    schedule 10.10.2017
comment
Возможный дубликат stackoverflow.com/questions/45977545/detecting-vertical-planes   -  person PhilLab    schedule 11.10.2017


Ответы (3)


ОБНОВЛЕНИЕ

Новейшая версия ARCore теперь также имеет

public static final Config.PlaneFindingMode HORIZONTAL
// Detection of only horizontal planes is enabled.

public static final Config.PlaneFindingMode HORIZONTAL_AND_VERTICAL
// Detection of both horizontal and vertical planes is enabled.

СТАРЫЙ ОТВЕТ

В настоящее время нет собственного способа :

public static final Config.PlaneFindingMode DISABLED
// Plane detection is disabled.

public static final Config.PlaneFindingMode HORIZONTAL
// Detection of only horizontal planes is enabled.

Нестандартный способ описан здесь: доступ к данным облака точек и самостоятельное вычисление горизонтальных плоскостей. Но чтобы это действительно работало, вам нужно реализовать кластеризацию (различение нескольких плоскостей вместо вычисления одной глобальной плоскости) и правильное отклонение выбросов (возможно, с помощью RANSAC).

Лично я думаю (надеюсь), что следующее обновление ARCore будет включать вертикальные плоскости, потому что я не вижу математической причины для отказа от поддержки этого.

person PhilLab    schedule 12.10.2017
comment
Я думаю, что ARCore теперь поддерживает это, то есть ваша надежда оправдалась. Ваша ссылка теперь действительно показывает это. Возможно, стоит обновить, так как это все еще лучший поиск по этому вопросу. - person Mick; 26.06.2018

Взяв образец hellosceneform и преобразовав его для обнаружения вертикальной и горизонтальной плоскостей:

https://github.com/google-ar/sceneform-android-sdk/tree/master/samples/hellosceneform

Создайте новый фрагмент подкласса ArFragment и переопределите метод getSessionConfiguration:

public class CustomArFrag extends ArFragment {
@Override
protected Config getSessionConfiguration(Session session) {
    Config config = super.getSessionConfiguration(session);
    config.setPlaneFindingMode(Config.PlaneFindingMode.HORIZONTAL_AND_VERTICAL);
    return config;
}
}

Измените макет activity_ux.xml, чтобы он указывал на него:

  <fragment 
    android:name="com.google.ar.sceneform.samples.hellosceneform.CustomArFrag"
  .../>

Имейте в виду, что вертикальные поверхности не всегда будут обнаружены. Кажется, ему не нравятся большие белые стены. Однако ему удалось обнаружить переднюю часть моего холодильника, и я прикрепил к нему Android как к магниту!

person Mark    schedule 23.04.2019

ARCore 1.2 принес разработчикам дополненной реальности три новые функции: Vertical Plane Detection, Cloud Anchors и Augmented Images.

Первая функция в списке добавила два дополнительных значения Enum к Config.PlaneFindingMode:

public static final Config.PlaneFindingMode HORIZONTAL_AND_VERTICAL

public static final Config.PlaneFindingMode VERTICAL

Давайте посмотрим, как это выглядит с использованием Kotlin:

class CustomArFragment: ArFragment () {

    override fun getSessionConfiguration(session: Session?): Config {
        val configuration = super.getSessionConfiguration(session)
        configuration.planeFindingMode = Config.PlaneFindingMode.VERTICAL 
        return configuration
    }
}
person Andy Fedoroff    schedule 17.04.2019
comment
в итоге сбой... - person Someone Somewhere; 24.02.2021