pycaffe对lmdb的写入与读取

轻量数据库,删和改就没啥必要了。

1,将图片数据写入lmdb。

def image_dataset_to_lmdb(image_folder_path,lmdb_path):
    # 创建db
    db = lmdb.open(lmdb_path, map_size=int(1e12))
    # 开始事务
    with db.begin(write=True) as db_txn:
        # 枚举图片地址
        for parent, dirnames, filenames in os.walk(image_folder_path):
            # 限制目录范围,子目录跳过
            if (parent == image_folder_path):
                for index, filename in enumerate(filenames, start=0):
                    image_path = image_folder_path + filename

                    # read image into numpy.narray
                    image_array = numpy.array(Image.open(image_path))

                    # image type recognition
                    if type(image_array[0][0]) is numpy.uint8:
                        print(image_path + ‘ => image type : grayscale, this function can not handle this case, skip.‘)
                        continue
                    elif type(image_array[0][0]) is numpy.ndarray:
                        print(image_path + ‘ => image type : color, go.‘)

                    # RGB format to BGR format
                    image_array = image_array[:, :, ::-1]
                    # channel split by transpose matrix
                    image_array = image_array.transpose((2, 0, 1))
                    # convert numpy narray to caffe datum format
                    im_dat = caffe.io.array_to_datum(image_array)
                    # write to db
                    # 这里可以为每张图片设置y值
                    im_dat.label = 1
                    # ‘{:0>10d}‘.format(index) => key, im_dat.SerializeToString() => value
                    db_txn.put(‘{:0>10d}‘.format(index), im_dat.SerializeToString())
    db.close()

2,读取数据库

def read_lmdb(lmdb_path):

    #open lmdb
    lmdb_env = lmdb.open(lmdb_path)
    #begin transaction
    lmdb_txn = lmdb_env.begin()
    #get cursor
    lmdb_cursor = lmdb_txn.cursor()
    #get data object
    datum = caffe.proto.caffe_pb2.Datum()

    for key, value in lmdb_cursor:
        #parse back to datum
        datum.ParseFromString(value)
        #get y value
        label = datum.label
        print(‘label = ‘ + str(label))
        data_array = caffe.io.datum_to_array(datum)
        print(‘data is numpy.narray :‘)
        for data in data_array:
            print(str(data) + ‘\n‘)
时间: 2024-08-27 15:19:02

pycaffe对lmdb的写入与读取的相关文章

iOS中plist的创建,数据写入与读取

iOS中plist的创建,数据写入与读取功能创建一个test.plist文件,textInput作为输入,displayLabel作为显示,有一个按钮来触发保持程序triggerStorage: -(void)triggerStorage { displayLabel.text = textInput.text; NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)

如何写入和读取注册表

参考下面代码,写入和读取注册表 1 string registrySubKey = @"SOFTWARE\RegistryTest"; 2 RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(registrySubKey, true); 3 if (registryKey == null)//没有则创建路径 4 { 5 Registry.LocalMachine.CreateSubKey(registrySubKey);

蜗牛爱课- iOS中plist的创建,数据写入与读取

iOS中plist的创建,数据写入与读取功能创建一个test.plist文件-(void)triggerStorage{    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);    NSString *path=[paths    objectAtIndex:0];      NSString *filename=[path stringByAppendin

java一行一行写入或读取数据

        假如E:/phsftp/evdokey目录下有个evdokey_201103221556.txt文件, 现在对evdokey_201103221556.txt文件进行写入或读取操作,并解决写入或读取出现的乱码问题. /**     * 一行一行读取文件,适合字符读取,若读取中文字符时会出现乱码     *      * 流的关闭顺序:先打开的后关,后打开的先关,     *       否则有可能出现java.io.IOException: Stream closed异常    

NSUserDefaults写入和读取自定义的对象

需要写入的对象必须实现NSCoding protocol Person Class Person.h #import <Foundation/Foundation.h> #import "Face.h" @interface Person : NSObject <NSCoding> @property (nonatomic, strong) NSString *personId; @property (nonatomic, strong) NSString *n

.Net常用技巧_C#写入和读取txt文件

using System.Text.RegularExpressions; //脱机数据导出 private void writeTxt(string str) { string strFileName = @"\Program Files\firexungengcard\FireXungeng.txt"; FileInfo file = new FileInfo(strFileName); StreamWriter sWriter; if (file.Exists) { sWrite

手机的sd卡的写入和读取数据的方

我们要实现的是:往输入框输入数据,点击一个写入按钮,将输入框内的数据写入到sd卡上,在点击读取按钮,则将sd卡上只等的文件名称内的数据显示到一个textView上. 首先,看一下XML文件,很简单,只有两个按钮,一个输入框,和一个文本控件: 保存的数据可以到mnt/sdcard/下查看 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http:

【Java编程】写入、读取、遍历Properties文件

在Java开发中通常我们会存储配置参数信息到属性文件,这样的属性文件可以是拥有键值对的属性文件,也可以是XML文件,关于XML文件的操作,请参考博文[Java编程]DOM XML Parser 解析.遍历.创建XML.在该篇博文中,我将展示如何向属性文件写入键值对,如何读取属性文件中的键值对,如何遍历属性文件. 1.向属性文件中写入键值对 特别注意: Properties类调用setProperty方法将键值对保存到内存中,此时可以通过getProperty方法读取,propertyNames(

java处理Excel文件---excel文件的创建,删除,写入,读取

这篇文章的代码是我封装的excel处理类,包含推断excel是否存在,表格索引是否存在,创建excel文件,删除excel文件,往excel中写入信息,从excel中读取数据. 尤其在写入与读取两个方法中,我採用了java反射机制去实现,以object对象作为參数就可以.代码自己主动解析该实体类的属性与方法.代码重用性高. 代码另一些须要改进和扩展的地方.大家能够依据实际情况进行简单改动. 上代码,首先是我封装的这个类(採用的是POI包): package module.system.commo