通过 Python 从 .idx3-ubyte 文件或 GZIP 中提取图像

新手上路,请多包涵

我使用 OpenCV 的人脸识别器创建了一个简单的人脸识别功能。它可以很好地处理来自人的图像。

现在我想用手写字符代替人来做一个测试。我遇到了 MNIST 数据集,但它们将图像存储在一个我以前从未见过的奇怪文件中。

我只需要从中提取一些图像:

 train-images.idx3-ubyte

并将它们保存在文件夹中 .gif

还是我误解了这个 MNIST 的东西。如果是的话,我在哪里可以获得这样的数据集?

编辑

我还有 gzip 文件:

 train-images-idx3-ubyte.gz

我正在尝试阅读内容,但 show() 不起作用,如果我 read() 我看到随机符号。

 images = gzip.open("train-images-idx3-ubyte.gz", 'rb')
print images.read()

编辑

通过使用以下方法设法获得一些有用的输出:

 with gzip.open('train-images-idx3-ubyte.gz','r') as fin:
    for line in fin:
        print('got line', line)

我现在必须以某种方式将其转换为图像,输出:

在此处输入图像描述

原文由 Roman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

下载训练/测试图像和标签:

  • train-images-idx3-ubyte.gz:训练集图像
  • train-labels-idx1-ubyte.gz:训练集标签
  • t10k-images-idx3-ubyte.gz:测试集图像
  • t10k-labels-idx1-ubyte.gz:测试集标签

并将它们解压缩到工作目录中,比如 samples/

从 PyPi 获取 python-mnist 包:

 pip install python-mnist

导入 mnist 包并读取训练/测试图像:

 from mnist import MNIST

mndata = MNIST('samples')

images, labels = mndata.load_training()
# or
images, labels = mndata.load_testing()

向控制台显示图像:

 index = random.randrange(0, len(images))  # choose an index ;-)
print(mndata.display(images[index]))

你会得到这样的东西:

 ............................
............................
............................
............................
............................
.................@@.........
..............@@@@@.........
............@@@@............
..........@@................
..........@.................
...........@................
...........@................
...........@...@............
...........@@@@@.@..........
...........@@@...@@.........
...........@@.....@.........
..................@.........
..................@@........
..................@@........
..................@.........
.................@@.........
...........@.....@..........
...........@....@@..........
............@@@@............
.............@..............
............................
............................
............................

解释:

  • images 列表中的每个 图像 都是一个 Python list 无符号字节。
  • 标签 是 Python array 无符号字节。

原文由 Laurent LAPORTE 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题