如何在h5py中使用给定标签创建不透明数据集

问题描述 投票:0回答:2

我正在尝试使用

h5py
重新创建 HDF5 文件,该文件将二进制数据(例如 JPEG 压缩图像)存储为
OPAQUE
数据集,使用标签存储 MIME 类型,以便以后可以轻松解码。

我能够解决这个问题的唯一方法是使用低级 API,但如果有更高级别的 API 那就太好了!

(我将我的解决方案发布为答案,希望对其他人有用,因为我很难找到很多做此类事情的例子)

python hdf5 h5py
2个回答
1
投票

解决此问题并避免使用低级 API 的更简单方法可能是HDFql。在Python中使用HDFql,可以如下解决:

# import HDFql package
import HDFql

# create HDF5 file 'output.h5'
HDFql.execute("CREATE FILE output.h5")

# create dataset 'mydata' (in file 'output.h5') of data type opaque with a tag 'image/jpeg' and storing the content of file 'input.jpeg'
HDFql.execute("CREATE DATASET output.h5 mydata TAG image/jpeg VALUES FROM BINARY FILE input.jpeg")

0
投票

我发现执行此操作的唯一方法是使用低级 API。这意味着我们需要自己设置数据类型数据空间,然后才能创建数据集写入数据。

import h5py
import numpy as np

# get the binary data in
with open('input.jpeg', 'rb') as fd:
  data = fd.read()

# set up an HDF5 type appropriately sized for our data
dtype = h5py.h5t.create(h5py.h5t.OPAQUE, len(data))
dtype.set_tag(b'image/jpeg')

# set up a simple scalar HDF5 data space
space = h5py.h5s.create(h5py.h5s.SCALAR)

with h5py.File('output.h5', 'w') as root:
  ds = h5py.h5d.create(root.id, b'mydata', dtype, space)

  ds.write(space, space, np.frombuffer(data, dtype=np.uint8), dtype)

这对我有用,

h5dump -H output.h5
给予:

HDF5 "output.h5" {
GROUP "/" {
   DATASET "mydata" {
      DATATYPE  H5T_OPAQUE {
         OPAQUE_TAG "image/jpeg";
      }
      DATASPACE  SCALAR
   }
}
}

但是如果这更容易一点那就太好了!

© www.soinside.com 2019 - 2024. All rights reserved.