使用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多线程ctrl+c退出问题解决方案
Oct 23 Python
Python字符串和文件操作常用函数分析
Apr 08 Python
Python随机数用法实例详解【基于random模块】
Apr 18 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
利用python模拟实现POST请求提交图片的方法
Jul 25 Python
django请求返回不同的类型图片json,xml,html的实例
May 22 Python
Python DataFrame 设置输出不显示index(索引)值的方法
Jun 07 Python
python实现图片彩色转化为素描
Jan 15 Python
python启动应用程序和终止应用程序的方法
Jun 28 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 Python
图解Python中深浅copy(通俗易懂)
Sep 03 Python
Python实战之疫苗研发情况可视化
May 18 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.MVC的模板标签系统(五)
2006/09/05 PHP
PHP ajax 分页类代码
2008/11/13 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
php生成HTML文件的类方法
2019/10/11 PHP
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
javascript一点特殊用法
2008/05/28 Javascript
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
javascript中clone对象详解
2014/12/03 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
跟老齐学Python之折腾一下目录
2014/10/24 Python
Python实现LRU算法的2种方法
2015/06/24 Python
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
Python探索之自定义实现线程池
2017/10/27 Python
详解Python3的TFTP文件传输
2018/06/26 Python
园林设计师自荐信
2013/11/18 职场文书
教师推荐信范文
2013/11/24 职场文书
中国好声音广告词
2014/03/18 职场文书
交通事故协议书
2014/04/15 职场文书
收款授权委托书
2014/10/02 职场文书
聘任证明怎么写
2015/03/02 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书