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 相关文章推荐
web.py中调用文件夹内模板的方法
Aug 26 Python
python字符串连接的N种方式总结
Sep 17 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
Dec 25 Python
Python lambda函数基本用法实例分析
Mar 16 Python
Python常用字符串替换函数strip、replace及sub用法示例
May 21 Python
安装python及pycharm的教程图解
Oct 10 Python
Python序列化pickle模块使用详解
Mar 05 Python
parser.add_argument中的action使用
Apr 20 Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 Python
python入门之算法学习
Apr 22 Python
Python面向对象编程之类的概念
Nov 01 Python
python 镜像环境搭建总结
Sep 23 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
我常用的几个类
2006/10/09 PHP
PHP中session变量的销毁
2014/02/27 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
2013/05/17 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
vue-cli4项目开启eslint保存时自动格式问题
2020/07/13 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python 时间处理datetime实例
2008/09/06 Python
Python最基本的输入输出详解
2015/04/25 Python
解析Python中的异常处理
2015/04/28 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
python中退出多层循环的方法
2018/11/27 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
2013/01/30 HTML / CSS
BNKR中国官网:带你感受澳洲领先潮流时尚
2018/08/21 全球购物
安全检查验收制度
2014/01/12 职场文书
2014年话务员工作总结
2014/11/19 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
工程款申请报告
2015/05/15 职场文书
开学第一天的感想
2015/08/10 职场文书
反四风问题学习心得体会
2016/01/22 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
Python中三种花式打印的示例详解
2022/03/19 Python
详解pytorch创建tensor函数
2022/03/22 Python