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 cookielib 登录人人网的实现代码
Dec 19 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
May 25 Python
整理Python 常用string函数(收藏)
May 30 Python
python中print的不换行即时输出的快速解决方法
Jul 20 Python
学生信息管理系统python版
Oct 17 Python
一看就懂得Python的math模块
Oct 21 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
Python按钮的响应事件详解
Mar 04 Python
解决Tensorflow占用GPU显存问题
Feb 03 Python
python入门之基础语法学习笔记
Feb 08 Python
Python接口开发实现步骤详解
Apr 26 Python
python中plt.imshow与cv2.imshow显示颜色问题
Jul 16 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
js 连接数据库如何操作数据库中的数据
2012/11/23 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
2015/11/27 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
python对html过滤处理的方法
2018/10/21 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
python cumsum函数的具体使用
2019/07/29 Python
python pygame实现挡板弹球游戏
2019/11/25 Python
Python partial函数原理及用法解析
2019/12/11 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
美国在线家具网站:GDFStudio
2021/03/13 全球购物
生物科学系大学生的自我评价
2013/12/20 职场文书
开工仪式策划方案
2014/05/23 职场文书
收款委托书范本
2014/09/11 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript