使用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编程中用close()方法关闭文件的教程
May 24 Python
Python的语言类型(详解)
Jun 24 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
Oct 16 Python
Python pip替换为阿里源的方法步骤
Jul 02 Python
Python用字典构建多级菜单功能
Jul 11 Python
如何分离django中的媒体、静态文件和网页
Nov 12 Python
python设置环境变量的作用整理
Feb 17 Python
解决jupyter notebook import error但是命令提示符import正常的问题
Apr 15 Python
Django分组聚合查询实例分享
Apr 29 Python
python开发一款翻译工具
Oct 10 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
Jun 25 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
一个简单的PHP入门源程序
2006/10/09 PHP
PHP的构造方法,析构方法和this关键字详细介绍
2013/10/22 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
2017/01/21 PHP
jquery animate 动画效果使用说明
2009/11/04 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
原生js通过一行代码实现简易轮播图
2019/06/05 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
JavaScript链式调用原理与实现方法详解
2020/05/16 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
Pytorch之卷积层的使用详解
2019/12/31 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
Jdbc数据访问技术面试题
2012/03/30 面试题
J2EE面试题
2016/03/14 面试题
岗位职责的含义
2013/11/17 职场文书
安全检查验收制度
2014/01/12 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
入学证明
2015/06/23 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书
vue实现锚点定位功能
2021/06/29 Vue.js
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL