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中关于中文编码问题的处理建议
Apr 08 Python
用Python解决计数原理问题的方法
Aug 04 Python
详解Python中的静态方法与类成员方法
Feb 28 Python
小白如何入门Python? 制作一个网站为例
Mar 06 Python
Python读取txt内容写入xls格式excel中的方法
Oct 11 Python
OpenCV 边缘检测
Jul 10 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 Python
windows下Pycharm安装opencv的多种方法
Mar 05 Python
Django+Uwsgi+Nginx如何实现生产环境部署
Jul 31 Python
Python中Yield的基本用法
Oct 18 Python
python 模块重载的五种方法
Apr 24 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
非常不错的MySQL优化的8条经验
2008/03/24 PHP
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
SESSION存放在数据库用法实例
2015/08/08 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
PHP __call()方法实现委托示例
2019/05/20 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
js function使用心得
2010/05/10 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
每天学点Vue源码之vm.$mount挂载函数
2019/03/11 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
python之PyMongo使用总结
2017/05/26 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
如何使用VSCode愉快的写Python于调试配置步骤
2018/04/06 Python
python 判断网络连通的实现方法
2018/04/22 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
大学生年度自我鉴定
2013/10/31 职场文书
安全生产活动月方案
2014/03/09 职场文书
五一劳动节活动记录
2014/03/23 职场文书
房屋出租协议书
2014/04/10 职场文书
销售个人求职信范文
2014/04/28 职场文书
1亿有多大教学反思
2014/05/01 职场文书
兴趣小组活动总结
2014/05/05 职场文书
运动会口号大全
2014/06/07 职场文书
2014年外联部工作总结
2014/11/17 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL