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编写一个国际象棋AI程序
Nov 28 Python
在Python的Flask框架下收发电子邮件的教程
Apr 21 Python
Python3遍历目录树实现方法
May 22 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
Python Requests模拟登录实现图书馆座位自动预约
Apr 27 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
May 10 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 Python
代码总结Python2 和 Python3 字符串的区别
Jan 28 Python
django model通过字典更新数据实例
Apr 01 Python
python获取本周、上周、本月、上月及本季的时间代码实例
Sep 08 Python
解决Pytorch半精度浮点型网络训练的问题
May 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
星际争霸秘籍
2020/03/04 星际争霸
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
分享一下贝贝成长进度的php代码
2012/09/14 PHP
PHP7.0版本备注
2015/07/23 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
Flask中获取小程序Request数据的两种方法
2017/05/12 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
2019/04/19 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
详解Django中的ifequal和ifnotequal标签使用
2015/07/16 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
Python使用requests发送POST请求实例代码
2018/01/25 Python
opencv与numpy的图像基本操作
2019/03/08 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
优秀志愿者事迹材料
2014/02/03 职场文书
餐厅经理岗位职责和岗位目标
2014/02/13 职场文书
校企合作协议书
2014/04/16 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
2015年国培研修感言
2015/08/01 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript