使用python操作lmdb对数据读取的实例
由于c++速度快,所以一般写入数据我调用c++借口,而读取数据使用c++也行,但有时候Python在某方面方便,所以通过使用python借口仅仅对lmdb文件读取,处理数据是图片
import lmdbimport numpy as npimport cv2lmdb_file = '/home/rui/demo'lmdb_env = lmdb.open(lmdb_file)lmdb_txn = lmdb_env.begin()lmdb_cursor = lmdb_txn.cursor()for key, value in lmdb_cursor: img = cv2.imdecode(np.fromstring(value, np.uint8), 3); cv2.imshow('demo', img) cv2.waitKey(0)
补充知识:Python解析lmdb格式mnist数据集
背景
HDF5和LMDB都是Cafffe中常用的数据库。相对来说,HDF5的读写格式简单;LMDB采用内存-映射文件(memory-mapped files),所以拥有非常好的I/O性能,而且对于大型数据库来说,HDF5的文件常常整个写入内存。
所以HDF5的文件大小就受限于内存大小,当然也可以通过文件分割来解决问题,但其I/O性能就不如LMDB的页缓存(page cachiing)策略了。
MNIST手写数字字符识别实验在deep learning 中经常用到,这里使用Python来获取lmdb格式MNIST数据集中的图片并显示出来
Python读取LMDB
首先确认你安装了lmdb和Caffe的python包(Caffe中的pycaffe)。
pip install lmdb
LMDB采用键值对的存储格式,key就是字符形式的ID,value是Caffe中Datum类的序列化形式。
# -*- coding:utf-8 -*-import caffefrom caffe.proto import caffe_pb2import lmdbimport cv2 as cvenv = lmdb.open('mnist_train_lmdb', readonly=True) # 打开数据文件txn = env.begin() # 生成处理句柄cur = txn.cursor() # 生成迭代器指针datum = caffe_pb2.Datum() # caffe 定义的数据类型for key, value in cur: print(type(key), key) datum.ParseFromString(value) # 反序列化成datum对象 label = datum.label data = caffe.io.datum_to_array(datum) print data.shape print datum.channels image = data[0] # image = data.transpose(1, 2, 0) print(type(label)) cv.imshow(str(label), image) cv.waitKey(0)cv.destroyAllWindows()env.close()
运行结果:


读取LMDB数据库中的Datum数据,这里再稍微介绍一下Datum的格式:channels:图片的通道,彩色图有3个通道,灰度图只有1通道,当然也可以用通道数来表示其他意思,比如表示两张图片,每个通道一个单张的图;height:图片(即data)的高;width:图片(即data)的宽;data:图片的数据(像素值);label:图片的label。(datum.channels, datum.height, datum.width)
以上这篇使用python操作lmdb对数据读取的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持好吧啦网。
相关文章:
1. Python unittest生成测试报告过程解析2. python matplotlib工具栏源码探析二之添加、删除内置工具项的案例3. 如何基于python3和Vue实现AES数据加密4. CSS3实例分享之多重背景的实现(Multiple backgrounds)5. CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chrome、Opera6. php去掉数组的第一个值的两个函数:array_shift、array_splice7. 解决VUE项目使用Element-ui 下拉组件的验证失效问题8. uni-app结合PHP实现单用户登陆demo及解析9. 数组在java中的扩容的实例方法10. Vue+express+Socket实现聊天功能

网公网安备