python生成lmdb格式的文件实例


Posted in Python onNovember 08, 2018

在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 is None:
  return False
 imageBuf = np.fromstring(imageBin, dtype=np.uint8)
 img = cv2.imdecode(imageBuf, cv2.IMREAD_GRAYSCALE)
 if img is None:
  return False
 imgH, imgW = img.shape[0], img.shape[1]
 if imgH * imgW == 0:
  return False
 return True
 
def writeCache(env, cache):
 with env.begin(write=True) as txn:
  for k, v in cache.iteritems():
   txn.put(k, v)
 
def createDataset(outputPath, imagePathList, labelList, lexiconList=None, checkValid=True):
 """
 Create LMDB dataset for CRNN training.
# ARGS:
  outputPath : LMDB output path
  imagePathList : list of image path
  labelList  : list of corresponding groundtruth texts
  lexiconList : (optional) list of lexicon lists
  checkValid : if true, check the validity of every image
 """
 # print (len(imagePathList) , len(labelList))
 assert(len(imagePathList) == len(labelList))
 nSamples = len(imagePathList)
 print '...................'
 env = lmdb.open(outputPath, map_size=8589934592)#1099511627776)所需要的磁盘空间的最小值,之前是1T,我改成了8g,否则会报磁盘空间不足,这个数字是字节
 
 cache = {}
 cnt = 1
 for i in xrange(nSamples):
  imagePath = imagePathList[i]
  label = labelList[i]
  if not os.path.exists(imagePath):
   print('%s does not exist' % imagePath)
   continue
  with open(imagePath, 'r') as f:
   imageBin = f.read()
  if checkValid:
   if not checkImageIsValid(imageBin):
    print('%s is not a valid image' % imagePath)#注意一定要在linux下,否则f.read就不可用了,就会输出这个信息
    continue
 
  imageKey = 'image-%09d' % cnt
  labelKey = 'label-%09d' % cnt
  cache[imageKey] = imageBin
  cache[labelKey] = label
  if lexiconList:
   lexiconKey = 'lexicon-%09d' % cnt
   cache[lexiconKey] = ' '.join(lexiconList[i])
  if cnt % 1000 == 0:
   writeCache(env, cache)
   cache = {}
   print('Written %d / %d' % (cnt, nSamples))
  cnt += 1
 nSamples = cnt - 1
 cache['num-samples'] = str(nSamples)
 writeCache(env, cache)
 print('Created dataset with %d samples' % nSamples)
 
 
def read_text(path):
 
 with open(path) as f:
  text = f.read()
 text = text.strip()
 
 return text
 
 
if __name__ == '__main__':
 # lmdb 输出目录
 outputPath = 'D:/ruanjianxiazai/tuxiangyangben/fengehou/train'#训练集和验证集要跑两遍这个程序,分两次生成
 
 path = "D:/ruanjianxiazai/tuxiangyangben/fengehou/chenguang/*.jpg"#将txt与jpg的都放在同一个文件里面
 imagePathList = glob.glob(path)
 print '------------',len(imagePathList),'------------'
 imgLabelLists = []
 for p in imagePathList:
  try:
   imgLabelLists.append((p, read_text(p.replace('.jpg', '.txt'))))
  except:
   continue
   
 # imgLabelList = [ (p, read_text(p.replace('.jpg', '.txt'))) for p in imagePathList]
 # sort by labelList
 imgLabelList = sorted(imgLabelLists, key = lambda x:len(x[1]))
 imgPaths = [ p[0] for p in imgLabelList]
 txtLists = [ p[1] for p in imgLabelList]
 
 createDataset(outputPath, imgPaths, txtLists, lexiconList=None, checkValid=True)

以上这篇python生成lmdb格式的文件实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中bisect的用法
Sep 23 Python
Python(Django)项目与Apache的管理交互的方法
May 16 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
Python给图像添加噪声具体操作
Mar 03 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
对PyQt5中树结构的实现方法详解
Jun 17 Python
python SVM 线性分类模型的实现
Jul 19 Python
python 自定义装饰器实例详解
Jul 20 Python
Python API自动化框架总结
Nov 12 Python
TensorFlow 显存使用机制详解
Feb 03 Python
matplotlib 多个图像共用一个colorbar的实现示例
Sep 10 Python
详解Python利用configparser对配置文件进行读写操作
Nov 03 Python
python实现嵌套列表平铺的两种方法
Nov 08 #Python
python用列表生成式写嵌套循环的方法
Nov 08 #Python
在Python中实现shuffle给列表洗牌
Nov 08 #Python
python实现RabbitMQ的消息队列的示例代码
Nov 08 #Python
对Python 3.5拼接列表的新语法详解
Nov 08 #Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 #Python
python RabbitMQ 使用详细介绍(小结)
Nov 08 #Python
You might like
摩卡咖啡
2021/03/03 咖啡文化
基于php冒泡排序算法的深入理解
2013/06/09 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
PHP获取当前系统时间的方法小结
2018/10/03 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
javascript 面向对象 function类
2010/05/13 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
JavaScript模块详解
2017/12/18 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
详解vue-cli3多环境打包配置
2019/03/28 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
Python中类型检查的详细介绍
2017/02/13 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
Centos7 下安装最新的python3.8
2019/10/28 Python
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
美国NBA官方商店:NBA Store
2019/04/12 全球购物
英国百年闻名的优质健康产品连锁店:Holland & Barrett
2019/12/19 全球购物
英语教学随笔感言
2014/02/20 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
2014年寒假社会实践活动心得体会
2014/04/07 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
区级文明单位申报材料
2014/05/15 职场文书
学习礼仪心得体会
2014/09/01 职场文书
《好妈妈胜过好老师》:每个孩子的优秀都是有源头的
2020/01/03 职场文书