Python 在字典中存储jpg数据?
我有一台每分钟拍摄两张图像的相机,每天拍摄2880张图像,每幅图像约180kb。在几个月的时间里,这会增加许多图像,这使得传输数据变得很麻烦。为了解决这个问题,我将图像放入每月的tar文件(例如201301.tar、201302.tar)。我在分析工作中使用图像,因此我确实需要访问数据,我遇到了两个问题:Python 在字典中存储jpg数据?,python,image,data-structures,Python,Image,Data Structures,我有一台每分钟拍摄两张图像的相机,每天拍摄2880张图像,每幅图像约180kb。在几个月的时间里,这会增加许多图像,这使得传输数据变得很麻烦。为了解决这个问题,我将图像放入每月的tar文件(例如201301.tar、201302.tar)。我在分析工作中使用图像,因此我确实需要访问数据,我遇到了两个问题: 要加载一个单独的jpg,我需要对这个月的图像进行去焦油处理(我希望避免去焦油处理所涉及的时间) 当我必须读取几天的数据时,读取单个jpg的速度很慢 是否有一种将图像数据存储在单个文件中的实用方
# Example
import datetime as dt
from scipy.misc import imread as ir
dts = dt.datetime.strptime
image = ir('skycam-current.jpg',flatten=False)
data = {}
data[dt.datetime(2013,01,01)] = image
np.savez('test.dic.npz',data)
# Then, to re-load the data
data = np.load('test.dic.npz')
当我重新加载数据时,我会得到一本字典,有点:
>>> type(data)
>>> numpy.lib.npyio.NpzFile
>>> data.keys()
>>> ['arr_0']
如果我试图恢复字典,我会得到一个0-d数组
>>> a = data['arr_0']
>>> a.shape
>>> ()
有人能推荐一种更好的方法来存储字典或存储图像数据吗?我一直在使用pandas进行分析/存储,但它似乎不是为存储阵列而构建的 如果它已经是jpeg压缩的,那么进一步压缩它并不会带来很大的空间优势。您将这些文件放入tar归档文件是为了节省空间,还是因为目录需要人类可读?如果目录不需要是人类可读的,那么与每月存储在一个单独的文件夹中并使用sqlite数据库或文件/文件夹名称中的一些逻辑来跟踪它们相比,归档没有多大优势 tar文件是存储不可压缩文件(如jpg)的好方法。它比使用zip要好,因为您没有解压缩开销,而且可能比使用文件系统要好,因为您生成了大量文件。将文件存储在RAM中意味着您必须拥有大量专用于任务的内存,这使得在机器之间访问和传输数据变得更加困难 tar文件的一个大问题是,它们不像zip文件那样被索引。这意味着,要从归档文件的中间提取文件,必须读取整个归档文件,直到找到该文件为止
为了克服这个限制,一些人构建了tar文件索引器,它将文件的偏移量存储在归档文件中,以便您可以直接读取它们。一个这样的项目是,它很方便地用python编写,因此您可以轻松地将其用作库。它只有100行长,因此也很容易理解和修改。您考虑过将其存储为bytestring吗?如果切换为zip格式,您至少可以提取单个文件-看看为什么不使用数据库数据库可能是一个不错的选择,但我从未使用过数据库。我试图停留在我的经验范围内。tar只是存档图像,没有压缩。我确实将图像存储在一个有序的目录中(例如/year/month/day/image.jpg)。问题是当前必须逐个文件加载图像数据,而我希望加载,例如2013年10月的所有数据,马上。那么,使用tar与仅使用目录相比,您到底想要实现什么呢?我只使用tar来减少机器之间的传输时间以及将数据推送到存档时的传输时间。在您执行这两种操作之前,只需将数据放入某个临时位置就行了吗?我不确定tar的性能,但它肯定比建立这么多不同连接来发送文件的开销要低。zip文件中的条目不必压缩。我喜欢tarindexer的想法。谢谢你的提示…我会调查的。