Как экспортировать данные облака точек (Project Tango)?

Только что получил планшет Project Tango Development Kit и проработал несколько демонстраций и примеров.

В некоторых старых сообщениях в блогах используются файлы журналов из приложения Tango Mapper, которые должны быть предварительно загружены на устройство.

К сожалению, приложение Tango Mapper не было предварительно загружено на мое устройство, и я не могу найти его в Play Store.

Есть ли какой-нибудь другой способ просто экспортировать или получить данные PointCloud для последующего рендеринга?

[Номер модели: yellowstone, Tango Core Version: 1.1:2014.11.14-bernoulli-release]


person caspertm    schedule 21.11.2014    source источник


Ответы (5)


Tango Mapper — это внутренний инструмент, и в настоящее время он закрыт для разработчиков. Я думаю, что лучший способ зарегистрировать данные облака точек — это использовать предоставленный пример кода c или java и, возможно, внести небольшие изменения для записи данных в файл.

пример c: https://github.com/googlesamples/tango-examples-c

пример Java: https://github.com/googlesamples/tango-examples-java

person xuguo    schedule 01.12.2014
comment
Спасибо. Я уже делал это, но хотел убедиться, что нет более простого метода. - person caspertm; 01.12.2014
comment
Хорошо, но обычно вы также хотите выполнять отслеживание, если хотите экспортировать правильное облако точек, а не просто регистрировать расстояния. - person Mihai Bujanca; 04.02.2016

Не уверен, что вам когда-нибудь приходилось решать эту проблему, но мне удалось найти APK вместе с методом экспорта с использованием обновленной версии Tango для планшетов. Я успешно экспортировал данные облака точек, используя метод, описанный в этом блоге.

http://www.kitware.com/blog/home/post/838

Изменить

Загрузите APK или используйте исходный код, найденный в папке проекта GITHUB.

Как только это будет сделано, загрузите приложение, как обычно. Будет слайдер записи и авто. Если вы прокручиваете запись, она будет ждать только до тех пор, пока вы не нажмете кнопку моментального снимка, чтобы записать данные облака точек, которые вы просматриваете в данный момент.

Если вы сдвинете авто, он будет непрерывно записывать данные облака точек и создавать файлы, отслеживая, куда вы двигаетесь. Имейте в виду, что чем больше файл, тем больше его требуется для сохранения в формате zip.

После этого сдвиньте запись, и она предложит вам сохранить и отправить.

Мне проще сохранить на Google Диск, так как другие методы иногда не отправляются.

После этого загрузите бесплатное приложение Paraview, которое находится http://www.paraview.org/download/, и загрузите данные облака точек.

Это должны быть два файла: один — ваши данные позы, а другой — облако точек. (вы можете загружать данные по отдельности, используя стрелку свертывания, которую вы видите перед их импортом.)

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

(только написал это, потому что вы искали более простой способ экспорта данных) Это, вероятно, самый простой. Вы можете взять указанные данные и начать реконструировать комнату на основе собранных данных позы.)

все кредиты за исходный код и руководство принадлежат блогу The Kitware

Если ссылки не работают, напишите мне в директ, и я отправлю вам файл.

АПК находится здесь

СКАЧАТЬ APK

они также указали свой исходный код внизу блога. Он основан на Tango Explorer, который можно найти в магазине приложений.

person BAA    schedule 31.05.2015
comment
Вы также должны описать связанную процедуру в своем ответе; однажды ссылка может выйти из строя, но ваш ответ все еще должен быть доступен здесь. - person guido; 01.06.2015

Разреженное сопоставление: https://www.youtube.com/watch?v=x5C_HNnW_3Q.

Дополнительные карты помещений: https://www.youtube.com/watch?v=3BNOsxMZD14.

Похоже, что многие участники проекта Tango были наняты или куплены Google. Например, большинство ссылок на код и/или статьи Хидофа являются пропавшими без вести, осталась только страница в Facebook с несколькими подсказками. На машине обратного пути интернет-архива есть несколько снимков их веб-сайта для любопытных.

person Paolo Salvagione    schedule 25.12.2014

Взгляните на пример облака точек Java на GitHub. Функция, которую вы хотите посмотреть, — это onXyzIsAvailable в PointCloudActivity. Извлечение нескольких соответствующих строк....

public void onXyzIjAvailable(final TangoXyzIjData xyzIj) {
....
               byte[] buffer = new byte[xyzIj.xyzCount * 3 * 4];
               FileInputStream fileStream = new FileInputStream(
                        xyzIj.xyzParcelFileDescriptor.getFileDescriptor());
                try {
                    fileStream.read(buffer,
                            xyzIj.xyzParcelFileDescriptorOffset, buffer.length);
                    fileStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

На данный момент buffer содержит данные облака точек - я настоятельно рекомендую вам отправить это с устройства с помощью бинарного вызова службы, так как я думаю, что если бедняга попытается преобразовать его в JSON или XML, это сделает работу медленнее, чем вам хотелось бы.

person Mark Mullin    schedule 29.12.2014

Спасибо Марк за совет. Я начинающий программист, и я впервые работаю с java... Меня интересует экспорт данных Tango, полученных PointCloud, в файл, и я хотел бы попросить вас высказать свое мнение о моем подходе (я создал кнопку «Сохранить» и onClick данные будут сохранены в файл на внешнем диске). Пожалуйста, найдите приведенный ниже код для части, которая должна сохранять данные xyzIj:

@Override
public void onClick(View v) {
    switch (v.getId()) {
    ...
        case R.id.save_button:
            savePointCloud();
            break;
        default:
            Log.w(TAG, "Unrecognized button click.");
        }
}


private static void savePointCloud(final TangoXyzIjData xyzIj, String file) {
    File directoryName =  getAlbumStorageDir(file);
    FileOutputStream out = new FileOutputStream(directoryName,"text.txt");
    byte[] buffer = new byte[xyzIj.xyzCount * 3 * 4];
    FileInputStream fileStream = new FileInputStream(
            xyzIj.xyzParcelFileDescriptor.getFileDescriptor());
    int read;
       while ((read=fileStream.read(buffer))!=1){
           try{
           out.write(buffer, 0, read);
           out.close();
           System.out.println("Printed to file");
       }catch(IOException e){e.printStackTrace();}
       }
}

public File getAlbumStorageDir(String dirName) {
    if (!isExternalStorageWritable()) {
        return null;
    } else {
        // Get the directory for the user's public downloads directory.
        File file = new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_DOWNLOADS), dirName);
        if (!file.mkdirs() || !file.exists()) {
            Log.e(TAG, "Directory not created");
            return null;
        }
        return file;
    }
}

public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if ((Environment.MEDIA_MOUNTED.equals(state)
            && Environment.MEDIA_MOUNTED_READ_ONLY.equals(state))) {
        return true;
    } else {
        Log.e(TAG, "External storage is not mounted READ/WRITE.");
        return false;
    }
}
person MiaN    schedule 27.01.2015