最近进行人脸识别,要在mongodb储存人脸照片,是个numpy数组,普通的储存是不行的,要用到bson和pickle库:
首先,获得了一个编码了人脸信息的numpy数组 my_nparray,然后我要将其存入mongodb中,这里我用的是pymongo让python与mongodb交互,储存代码如下:
'''
from bson.binary import Binary
import pickle
.........................
#这里省略了人脸照片从读取到处理为numpy数组my_nparray和pymongo连接数据库的过程,
#请自行去了解这些资料,这里假设pymongo的游标变量名为col
col.insert_one({'picture_binary' : Binary(pickle.dumps(my_nparray, protocol=-1), subtype=128)})
'''
这里解释一下,protocol=-1是使用pickle.dumps的最新协议来dump数据,而subtype=128表示Binary的用户自定义二进制格式
subtype还有的选项如下:
http://api.mongodb.com/python/current/api/bson/binary.html
在mongodb获取数据并还原的代码如下:
'''
data = col.find_one()
my_db_nparray = pickle.loads(data['picture_binary'])
'''
这时的my_db_nparray就是与my_nparray一模一样的numpy数组