使用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实现bitmap数据结构详解
Feb 17 Python
Python中字符串的常见操作技巧总结
Jul 28 Python
pandas 对series和dataframe进行排序的实例
Jun 09 Python
Django集成celery发送异步邮件实例
Dec 17 Python
python实现ftp文件传输系统(案例分析)
Mar 20 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
Python中openpyxl实现vlookup函数的实例
Oct 28 Python
python 实现学生信息管理系统的示例
Nov 28 Python
关于django python manage.py startapp 应用名出错异常原因解析
Dec 15 Python
Python 的 f-string 可以连接字符串与数字的原因解析
Feb 20 Python
Pytorch 使用tensor特定条件判断索引
Apr 08 Python
Python虚拟环境virtualenv是如何使用的
Jun 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 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
将鼠标焦点定位到文本框最后(代码分享)
2017/01/11 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
ES6使用 Array.includes 处理多重条件用法实例分析
2020/03/02 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
python抓取网页中的图片示例
2014/02/28 Python
Python如何获取系统iops示例代码
2016/09/06 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
专升本个人自我评价
2013/12/22 职场文书
大学生入党思想汇报
2014/01/01 职场文书
毕业自我评价
2014/02/05 职场文书
销售队伍口号
2014/06/11 职场文书
市场营销专业求职信
2014/06/17 职场文书
个人整改措施书面材料
2014/10/24 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书
海上钢琴师观后感
2015/06/03 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python