Используя программу по этой ссылке, https://leon.bottou.org/projects/infimnist, Я сгенерировал некоторые данные.
Насколько я могу судить, это в некотором двоичном формате:
b"\x00\x00\x08\x01\x00\x00'\x10\x07\x02\x01\x00\x04\x01\x04\t\x05 ...
Мне нужно извлечь метки и изображения из двух наборов данных, как это, сгенерированных с помощью:
https://leon.bottou.org/projects/infimnist
with open("test10k-labels", "rb") as binary_file:
data = binary_file.read()
print(data)
>>> b"\x00\x00\x08\x01\x00\x00'\x10\x07\x02\x01\x00\x04\x01\x04\t\x05 ...
b"\x00\x00\x08\x01 ...".decode('ascii')
>>> "\x00\x00\x08\x01 ..."
Я также пробовал пакет binascii, но он не работал.
Спасибо за любую помощь!
Создание данных
Для создания набора данных, о котором я говорю, загрузите пакет по следующей ссылке: https://leon.bottou.org/projects/infimnist.
$ cd dir_of_folder
$ make
Затем я взял путь к итоговому исполняемому файлу infimnist, который всплывает и:
$ app_path lab 10000 69999 > mnist60k-labels-idx1-ubyte
Это должно поместить файл, который я использовал, в папку.
Команда после app_path может быть замененалюбой другой командой, которую он перечисляет на стороне.
Окончательное обновление
Это работает!Используя некоторые функции numpy, изображения можно вернуть в их нормальную ориентацию.
# for the labels
with open(path, "rb") as binary_file:
y_train = np.array(array("B", binary_file.read()))
# for the images
with open("images path", "rb") as binary_file:
images = []
emnistRotate = True
magic, size, rows, cols = struct.unpack(">IIII", binary_file.read(16))
if magic != 2051:
raise ValueError('Magic number mismatch, expected 2051,''got {}'.format(magic))
for i in range(size):
images.append([0] * rows * cols)
image_data = array("B", binary_file.read())
for i in range(size):
images[i][:] = image_data[i * rows * cols:(i + 1) * rows * cols]
# for some reason EMNIST is mirrored and rotated
if emnistRotate:
x = image_data[i * rows * cols:(i + 1) * rows * cols]
subs = []
for r in range(rows):
subs.append(x[(rows - r) * cols - cols:(rows - r)*cols])
l = list(zip(*reversed(subs)))
fixed = [item for sublist in l for item in sublist]
images[i][:] = fixed
x = []
for image in images:
x.append(np.rot90(np.flip(np.array(image).reshape((28,28)), 1), 1))
x_train = np.array(x)
Сумасшедшее решение для такой простой вещи:)