使用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刷投票的脚本实现代码
Nov 08 Python
Python实现读取json文件到excel表
Nov 18 Python
pandas数据框,统计某列数据对应的个数方法
Apr 11 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
python后端接收前端回传的文件方法
Jan 02 Python
python ---lambda匿名函数介绍
Mar 13 Python
python中的数据结构比较
May 13 Python
python中@property和property函数常见使用方法示例
Oct 21 Python
wxpython绘制音频效果
Nov 18 Python
python使用opencv在Windows下调用摄像头实现解析
Nov 26 Python
python中format函数如何使用
Jun 22 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中使用excel的简单介绍
2013/08/02 PHP
php模板原理讲解
2013/11/13 PHP
Yii中CGridView实现批量删除的方法
2015/12/28 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
JQuery获取各种宽度、高度(format函数)实例
2013/03/04 Javascript
Javascript表格翻页效果实现思路及代码
2013/08/23 Javascript
jQuery中empty()方法用法实例
2015/01/16 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
Bootstrap CSS布局之代码
2016/12/17 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
[38:40]2018DOTA2亚洲邀请赛 4.6淘汰赛 mineski vs LGD 第一场
2018/04/10 DOTA
python实现跨文件全局变量的方法
2014/07/07 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
Python线性回归实战分析
2018/02/01 Python
Python全排列操作实例分析
2018/07/24 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
python实现五子棋小程序
2019/06/18 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
Shopee印度尼西亚:东南亚与台湾市场最大电商平台
2018/06/17 全球购物
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
写给女朋友的道歉信
2014/01/12 职场文书
家教广告词
2014/03/19 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
员工工作表现自我评价
2015/03/06 职场文书
指导教师推荐意见
2015/06/05 职场文书
宪法宣传标语100条
2019/10/15 职场文书