使用python操作lmdb对数据读取的实例

由于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()

运行结果:

读取LMDB数据库中的Datum数据,这里再稍微介绍一下Datum的格式:channels:图片的通道,彩色图有3个通道,灰度图只有1通道,当然也可以用通道数来表示其他意思,比如表示两张图片,每个通道一个单张的图;height:图片(即data)的高;width:图片(即data)的宽;data:图片的数据(像素值);label:图片的label。(datum.channels, datum.height, datum.width)

以上这篇使用python操作lmdb对数据读取的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python读取LMDB中图像的方法

    本文实例为大家分享了python读取LMDB中的图像具体代码,供大家参考,具体内容如下 图像数据写入LMDB之后最好再按照写入的逻辑反向解析写入的图像,如果图像能够被还原则证明写入方式是没有问题的. from PIL import Image def read_from_lmdb(lmdb_path,img_save_to): try: lmdb_env=lmdb.open(lmdb_path, map_size=3221225472) lmdb_txn=lmdb_env.begin() lmd

  • 如何用Python合并lmdb文件

    由于Caffe使用的存储图像的数据库是lmdb,因此有时候需要对lmdb文件进行操作,本文主要讲解如何用Python合并lmdb文件.没有lmdb支持的,需要用pip命令安装. pip install lmdb 代码及注释如下: # coding=utf-8 # filename: merge_lmdb.py import lmdb # 将两个lmdb文件合并成一个新的lmdb def merge_lmdb(lmdb1, lmdb2, result_lmdb): print 'Merge sta

  • python读写LMDB文件的方法

    LMDB的全称是Lightning Memory-Mapped Database(快如闪电的内存映射数据库),它的文件结构简单,包含一个数据文件和一个锁文件: LMDB文件可以同时由多个进程打开,具有极高的数据存取速度,访问简单,不需要运行单独的数据库管理进程,只要在访问数据的代码里引用LMDB库,访问时给文件路径即可. 让系统访问大量小文件的开销很大,而LMDB使用内存映射的方式访问文件,使得文件内寻址的开销非常小,使用指针运算就能实现.数据库单文件还能减少数据集复制/传输过程的开销. 在py

  • python生成lmdb格式的文件实例

    在crnn训练的时候需要用到lmdb格式的数据集,下面是python生成lmdb个是数据集的代码,注意一定要在linux系统下,否则会读入图像的时候出问题,可能遇到的问题都在代码里面注释了,看代码即可. #-*- coding:utf-8 -*- import os import lmdb#先pip install这个模块哦 import cv2 import glob import numpy as np def checkImageIsValid(imageBin): if imageBin

  • Python操作SQLite/MySQL/LMDB数据库的方法

    1.概述 1.1前言 最近在存储字模图像集的时候,需要学习LMDB,趁此机会复习了SQLite和MySQL的使用,一起整理在此. 1.2环境 使用win7,Python 3.5.2. 2.SQLite 2.1准备 SQLite是一种嵌入式数据库,它的数据库就是一个文件.Python 2.5x以上版本内置了SQLite3,使用时直接import sqlite3即可. 2.2操作流程 概括地讲,操作SQLite的流程是: ·通过sqlite3.open()创建与数据库文件的连接对象connectio

  • 使用python操作lmdb对数据读取的实例

    由于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.c

  • 对python 操作solr索引数据的实例详解

    测试代码1: def test(self): data = {"add": {"doc": {"id": "100001", "*字段名*": u"我是一个大好人"}}} params = {"boost": 1.0, "overwrite": "true", "commitWithin": 1000} ur

  • 详解Python如何实现Excel数据读取和写入

    目录 1. 功能分析 2.系统开发环境 3.安装依赖库 4. 主函数设计 5.模块设计 1. 功能分析 1.加载文件夹内所有的Excel数据: 2.生产贡献度分析图表(以柱状图显示表格数据): 3.提起Excel表格中指定列数据: 4.定向筛选所需数据: 5.多表数据统计排行: 6.多表数据合并新excel文件. 2.系统开发环境 Anaconda3,在conda 中,window和ubuntu中的python功能一样 . pycharm. 3.安装依赖库 这些依赖包   都要装好 import

  • Python数据分析入门之数据读取与存储

    一.图示 二.csv文件 1.读取csv文件read_csv(file_path or buf,usecols,encoding):file_path:文件路径,usecols:指定读取的列名,encoding:编码 data = pd.read_csv('d:/test_data/food_rank.csv',encoding='utf8') data.head() name num 0 酥油茶 219.0 1 青稞酒 95.0 2 酸奶 62.0 3 糌粑 16.0 4 琵琶肉 2.0 #指

  • 用python实现简单EXCEL数据统计的实例

    任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码: import xlrd workbook = xlrd.open_workbook('demo.xlsx') #打开excel数据表 SheetList = workbook.sheet_names()#读取电子表到列表 SheetName = SheetList[0]#读取第一个电子表的名称 Sheet1 = workbook.sheet_by_index(0)

  • Python SqlAlchemy动态添加数据表字段实例解析

    本文研究的主要是Python SqlAlchemy动态添加数据表字段,具体如下. 我们知道使用SqlAlchemy创建类来映射数据表,类属性等于数据库字段,但有时候要在我们创建表的时候,不确定数据表字段数量,遇到这种情况,应如何解决? 先看常规用法 from sqlalchemy import create_engine,Column,String,Integer class Mybase(Base): #表名 __tablename__ ='mycars' #字段,属性 myid=Column

  • python操作xlsx文件的包openpyxl实例

    Python扩展库openpyxl,可以操作07版以上的xlsx文件.可以创建工作簿.选择活动工作表.写入单元格数据,设置单元格字体颜色.边框样式,合并单元格,设置单元格背景等等. 需要增加可以颜色进入包安装目录的 your_pthon_path/site-packages/openpyxl/styles 修改colors.py文件下的 COLOR_INDEX = ( '00000000', '00FFFFFF', '00FF0000', '0000FF00', '000000FF', #0-4

  • Python操作MySQL数据库9个实用实例

    在Windows平台上安装mysql模块用于Python开发 用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示.下边是打包了32与64版本. MySQL-python-1.2.3.win32-py2.7.exe MySQL-python-1.2.3.win-amd64-py2.7.exe 实例 1.取得 MYSQL 的版本 # -*- coding: UTF-8 -*- #安装 MYSQL DB for python import MySQLdb as mdb con

  • Python "手绘风格"数据可视化方法实例汇总

    目录 前言 Python-matplotlib 手绘风格图表绘制 Python-cutecharts 手绘风格图表绘制 Python-py-roughviz 手绘风格图表绘制 总结 前言 大家好,今天给大家带来绘制“手绘风格”可视化作品的小技巧,主要涉及Python编码绘制.主要内容如下: Python-matplotlib 手绘风格图表绘制 Python-cutecharts 手绘风格图表绘制 Python-py-roughviz 手绘风格图表绘制 Python-matplotlib 手绘风格

  • Python pandas替换指定数据的方法实例

    目录 一.构造dataframe 二.替换指定数据(fillna.isin.replace) 1.用"sz"列的同行数据将"bj"列的空值替换掉 2.在1的基础上,将"sz"列为2或者6的数据替换成-4 三.替换函数replace()详解 1.全局替换元素 2.通过指定条件替换元素 3.通过模糊条件替换指定元素 总结 一.构造dataframe import pandas as pd import numpy as np df=pd.DataFr

随机推荐