使用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 提取文件的小程序
Jul 29 Python
Python实现抓取网页并且解析的实例
Sep 20 Python
python3中bytes和string之间的互相转换
Feb 09 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
python邮件发送smtplib使用详解
Jun 16 Python
python中实现字符串翻转的方法
Jul 11 Python
python logging重复记录日志问题的解决方法
Jul 12 Python
Python实现通过解析域名获取ip地址的方法分析
May 17 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
Python图像阈值化处理及算法比对实例解析
Jun 19 Python
Python 代码调试技巧示例代码
Aug 11 Python
python 基于opencv去除图片阴影
Jan 26 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将会员数据导入到ucenter的代码
2010/07/18 PHP
PHP序列号生成函数和字符串替换函数代码
2012/06/07 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
php查看网页源代码的方法
2015/03/13 PHP
PHP单例模式详细介绍
2015/07/01 PHP
详解php中的implements 使用
2017/06/13 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
JavaScript去掉数组中的重复元素
2011/01/13 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
JavaScript中的比较操作符>、=、
2014/12/31 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
Javascript获取随机数的实现方法
2016/06/22 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
js实现时钟定时器
2020/03/26 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
浅谈python的dataframe与series的创建方法
2018/11/12 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
服务标语大全
2014/06/18 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
2016年国培研修日志
2015/11/13 职场文书
python - timeit 时间模块
2021/04/06 Python
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
Python中的pprint模块
2021/11/27 Python
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技