Как прочитать байты и преобразовать их в целые числа в. * Scm файле - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь прочитать данные, связанные с информацией о «сетке лица» и «сетке текстуры».

Ниже приведено объяснение набора данных, а следующее серое поле показывает, как я выгляжу, когда открываю этот файл *.scm в моем текстовом редакторе Sublime.

Я просто предполагаю, что каждая строка содержит 4 байта (4 * 8 бит), но, насколько я знаю, бит представляет 0 или 1, но у нас есть как bc06, где b,c,6 не являются двоичными.

Похоже, я не знал фундаментальных основ о том, как представлены данные.

А также, я не знал, что такое порядка байтов.

С чего мне начать?

Я знаю python и могу с ним справиться довольно хорошо, но он был просто автодидактическим и никогда не изучал CS на регулярной основе.

Ценю вашу помощь заранее.

Модели формы и текстуры (* .scm)

Модель формы описывает статистическое изменение положений вершин, то есть изменения их координат x, y и z вокруг среднего положения. Точно так же модель текстуры описывает изменение цвета вершин (красный, зеленый и синий). Для этого форма лица и текстура векторизованы. Вектор формы описывает координаты x, y и z всех N вершин в последовательности: [x1, y1, z1,. , , , xN, yN, zN]. И вектор текстуры следующий: [r1, g1, b1, ..., rN, gN, bN]. Структура файла * .scm следующая (порядок байтов в младшем порядке). Обратите внимание, что целое число без знака имеет длину 4 байта, а число типа double - 8 байтов.

  1. без знака int: количество вершин: N
  2. без знака int: количество треугольников: M
  3. 3M беззнаковых целых: треугольники как триплеты индексов вершин. 4. Форма PCA модели: (а) без знака int: количество компонентов: S (б) без знака int: длина базисного вектора: D = 3N (c) SD удваивается: матрица главных компонентов в виде S последовательностей из D векторов по порядку. Каждый вектор имеет формат, определенный выше. (d) unsigned int: длина базисного вектора, опять же (D). (e) D удваивается: вектор средней формы в формате, определенном выше. (f) unsigned int: число собственных значений (разумно должно быть S). 1 (g) S удваивается: собственные значения в порядке, совпадающем с главными компонентами.
    bc06 0000 280d 0000 5801 0000 5a01 0000
    4d03 0000 5801 0000 4d03 0000 5901 0000
    5c01 0000 5901 0000 4d03 0000 5c01 0000
    4d03 0000 5a01 0000 f902 0000 fa02 0000
    4e03 0000 f902 0000 4e03 0000 fb02 0000
    fd02 0000 fb02 0000 4e03 0000 fd02 0000
    4e03 0000 fa02 0000 5b01 0000 6101 0000
    4f03 0000 5b01 0000 4f03 0000 1801 0000
    1901 0000 1801 0000 4f03 0000 1901 0000
    4f03 0000 6101 0000 fc02 0000 c202 0000
    5003 0000 fc02 0000 5003 0000 0203 0000
    c302 0000 0203 0000 5003 0000 c302 0000
    5003 0000 c202 0000 5901 0000 5501 0000
    5103 0000 5901 0000 5103 0000 5801 0000
    5d01 0000 5801 0000 5103 0000 5d01 0000
    5103 0000 5501 0000 fa02 0000 f902 0000
    5203 0000 fa02 0000 5203 0000 f602 0000
    fe02 0000 f602 0000 5203 0000 fe02 0000
    5203 0000 f902 0000 5501 0000 5901 0000
    5303 0000 5501 0000 5303 0000 5601 0000
    5b01 0000 5601 0000 5303 0000 5b01 0000
    5303 0000 5901 0000 f602 0000 f702 0000
    5403 0000 f602 0000 5403 0000 fa02 0000
    fc02 0000 fa02 0000 5403 0000 fc02 0000

+ дополнительный вопрос: почему в каждой строке после шестнадцатеричного числа есть 0000?

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