使用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修改操作系统时间的方法
May 18 Python
Python自动登录126邮箱的方法
Jul 10 Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 Python
python print 按逗号或空格分隔的方法
May 02 Python
Python 编码规范(Google Python Style Guide)
May 05 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
May 10 Python
python 使用pandas计算累积求和的方法
Feb 08 Python
详解Python安装tesserocr遇到的各种问题及解决办法
Mar 07 Python
python操作文件的参数整理
Jun 11 Python
Python logging设置和logger解析
Aug 28 Python
opencv3/C++图像像素操作详解
Dec 10 Python
Python图像读写方法对比
Nov 16 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
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
jquery 使用简明教程
2014/03/05 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
Python2.5/2.6实用教程 入门基础篇
2009/11/29 Python
解决python写的windows服务不能启动的问题
2014/04/15 Python
python元组操作实例解析
2014/09/23 Python
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
python 普通克里金(Kriging)法的实现
2019/12/19 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
django rest framework 自定义返回方式
2020/07/12 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
css3.0新属性效果在ie下的解决方案
2010/05/10 HTML / CSS
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
电子信息专业应届生自荐信
2014/06/04 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
公开致歉信
2019/06/24 职场文书
关于mysql中string和number的转换问题
2022/06/14 MySQL