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

Просто появился планшет Tango Development Kit и проработал некоторые демо и примеры.

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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

Изменить

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

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

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

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

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

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

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

Именно это вы сможете увидеть ваши данные и фактически воспроизвести анимацию, записанную вами, из-за собранных данных.

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

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

Если ссылки сломаны DM me, и я отправлю файл вам.

APK находится здесь

APK ЗАГРУЗИТЬ

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

Ответ 3

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

Больше внутреннего картографирования: https://www.youtube.com/watch?v=3BNOsxMZD14

Похоже, что более чем несколько участников проекта Tango были наняты или куплены google. В качестве примера большинство ссылок на код и/или статьи Hidof - это MIA, остается только страница на facebook с несколькими подсказками. У интернет-сервера обратного пути есть несколько снимков своего веб-сайта для любопытных.

Ответ 4

Go взгляните на образец облака Java Point Cloud на 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, сделает вещи медленнее чем вы хотели бы

Ответ 5

Благодарим вас за ваши советы. Я начинающий программист, и я впервые работаю с java... Мне интересно экспортировать полученные данные Tango PointCloud в файл, и я хотел бы попросить ваши отзывы о моем подходе (я создал кнопку Save, а 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 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;
    }
}