使用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 k-近邻算法实例分享
Jun 11 Python
python对数组进行反转的方法
May 20 Python
Python内置数据结构与操作符的练习题集锦
Jul 01 Python
python 按照固定长度分割字符串的方法小结
Apr 30 Python
python ---lambda匿名函数介绍
Mar 13 Python
Python supervisor强大的进程管理工具的使用
Apr 24 Python
python做反被爬保护的方法
Jul 01 Python
python制作朋友圈九宫格图片
Nov 03 Python
Python 寻找局部最高点的实现
Dec 05 Python
Python实现代码块儿折叠
Apr 15 Python
Python编写单元测试代码实例
Sep 10 Python
Python爬虫+Tkinter制作一个翻译软件的示例
Feb 20 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 UTF-8、Unicode和BOM问题
2010/05/18 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
使用firebug进行调试javascript的示例
2013/12/16 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
JavaScript事件委托技术实例分析
2015/02/06 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
2018/02/18 Python
python实现内存监控系统
2021/03/07 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
美国最受欢迎的度假租赁网站:VRBO
2016/08/02 全球购物
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
行政人员岗位职责
2013/12/08 职场文书
2014国培学习感言
2014/03/05 职场文书
元旦文艺汇演主持词
2014/03/26 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
签证工作证明模板
2015/06/15 职场文书
团队合作精神学习心得体会
2016/01/19 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫
Java中API的使用方法详情
2022/04/06 Java/Android
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技