使用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创建XML文档
Mar 01 Python
纯Python开发的nosql数据库CodernityDB介绍和使用实例
Oct 23 Python
python查询mysql中文乱码问题
Nov 09 Python
用Python从零实现贝叶斯分类器的机器学习的教程
Mar 31 Python
详解Python编程中包的概念与管理
Oct 16 Python
Python实现的多线程http压力测试代码
Feb 08 Python
Python实现的随机森林算法与简单总结
Jan 30 Python
python+pandas分析nginx日志的实例
Apr 28 Python
python目标检测给图画框,bbox画到图上并保存案例
Mar 10 Python
基于python检查矩阵计算结果
May 21 Python
python实例化对象的具体方法
Jun 17 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
JS中的数组转变成JSON格式字符串的方法
2017/05/09 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
2017/06/19 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
python3中dict(字典)的使用方法示例
2017/03/22 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
python实现决策树分类(2)
2018/08/30 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
2019/06/24 Python
Python&&GDAL实现NDVI的计算方式
2020/01/09 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
pyecharts在数据可视化中的应用详解
2020/06/08 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
音乐专业应届生教师求职信
2013/11/04 职场文书
视光学专业自荐信
2014/06/24 职场文书
先进个人事迹材料
2014/12/29 职场文书
银行安全保卫工作总结
2015/08/10 职场文书
运动会广播稿100字
2015/08/19 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android
python实现一个简单的贪吃蛇游戏附代码
2022/06/28 Python