如何在 DynamoDB 上存储 numpy.ndarray?

How to store numpy.ndarray on DynamoDB?

当我调用 face_encodings 函数时,numpy.ndarray@ageitgey's facial_recognition Python library 生成。我需要将这些数据保存到亚马逊的 DynamoDB;但我不确定如何。

我在 运行 face_encodings 函数时得到的 numpy.ndarray 是来自给定图像的人脸表示。我可以使用此数据与另一张图片进行比较,并检查该人(表示为编码)是否出现在该图片中。

我认为我可以将 numpy.ndarray 保存为二进制文件(使用 numpy.ndarray.tobytes,但我不确定如何转换该二进制文件(当我从 DynamoDB 检索数据时)至 numpy.ndarray.

我要比较的代码应该是这样的:

unknown_encoding = face_recognition.face_encodings(unknown_picture)[0]
# database_encoding_array should come from DynamoDB
results = face_recognition.compare_faces(database_encoding_array, unknown_encoding, tolerance=0.595)
# results is an array of booleans

综上所述,我不知道将 numpy.ndarray 保存到 DynamoDB 的最佳方法是什么,以及以后如何查询它。

您可以尝试使用 ndarray.tostringresults 转换为字节字符串。这对于 Dynamo 来说应该很简单。

arr = np.array([1, 2])

encoded = arr.tostring()
encoded
# b'\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00'

然后您可以使用 np.frombuffer 恢复数组。

np.array_equal(arr, np.frombuffer(encoded, dtype=int))
# True