使用python操作lmdb对数据读取的实例


Posted in Python onDecember 11, 2020

由于c++速度快,所以一般写入数据我调用c++借口,而读取数据使用c++也行,但有时候Python在某方面方便,所以通过使用python借口仅仅对lmdb文件读取,处理数据是图片

import lmdb
import numpy as np
import cv2
lmdb_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 caffe
from caffe.proto import caffe_pb2
import lmdb
import cv2 as cv
env = 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()

运行结果:

使用python操作lmdb对数据读取的实例

使用python操作lmdb对数据读取的实例

读取LMDB数据库中的Datum数据,这里再稍微介绍一下Datum的格式:channels:图片的通道,彩色图有3个通道,灰度图只有1通道,当然也可以用通道数来表示其他意思,比如表示两张图片,每个通道一个单张的图;height:图片(即data)的高;width:图片(即data)的宽;data:图片的数据(像素值);label:图片的label。(datum.channels, datum.height, datum.width)

以上这篇使用python操作lmdb对数据读取的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用循环实现批量创建文件夹示例
Mar 25 Python
Python-基础-入门 简介
Aug 09 Python
python获取文件后缀名及批量更新目录下文件后缀名的方法
Nov 11 Python
Python获取二维矩阵每列最大值的方法
Apr 03 Python
解决python 输出是省略号的问题
Apr 19 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
Python中dict和set的用法讲解
Mar 28 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
Python正则表达式匹配日期与时间的方法
Jul 07 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
PyTorch在Windows环境搭建的方法步骤
May 12 Python
python turtle绘图
May 04 Python
PyTorch 中的傅里叶卷积实现示例
Dec 11 #Python
python中append函数用法讲解
Dec 11 #Python
python实现图像随机裁剪的示例代码
Dec 10 #Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 #Python
python 实现的IP 存活扫描脚本
Dec 10 #Python
class类在python中获取金融数据的实例方法
Dec 10 #Python
Python制作简单的剪刀石头布游戏
Dec 10 #Python
You might like
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
php模板函数 正则实现代码
2012/10/15 PHP
php使用exec shell命令注入的方法讲解
2013/11/12 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
触屏中的JavaScript事件分析
2015/02/06 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
javascript实现全角转半角的方法
2016/01/23 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
js module大战
2019/04/19 Javascript
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
详解Python中的Lock和Rlock
2021/01/26 Python
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
Martinelli官方商店:西班牙皮鞋和高跟鞋品牌
2019/07/30 全球购物
会计专业自我评价
2014/02/12 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
生物工程专业求职信
2014/09/03 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
房租涨价通知
2015/04/23 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
员工试用期工作总结
2019/06/20 职场文书
python中的被动信息搜集
2021/04/29 Python
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS