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异步回调机制实现和使用方法
Nov 26 Python
基于python实现的抓取腾讯视频所有电影的爬虫
Apr 22 Python
python基于phantomjs实现导入图片
May 13 Python
python僵尸进程产生的原因
Jul 21 Python
scrapy爬虫实例分享
Dec 28 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
Jun 26 Python
Python使用pymongo模块操作MongoDB的方法示例
Jul 20 Python
对Python random模块打乱数组顺序的实例讲解
Nov 08 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
Python中zip()函数的简单用法举例
Sep 02 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
Dec 31 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
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
显示js对象所有属性和方法的函数
2009/10/16 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
jQuery实现切换字体大小的方法
2015/03/10 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
关于Javascript回调函数的一个妙用
2016/08/29 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
js实现城市级联菜单的2种方法
2017/06/23 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
Python使用django获取用户IP地址的方法
2015/05/11 Python
Python中pygame安装方法图文详解
2015/11/11 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
利用Django提供的ModelForm增删改数据的方法
2019/01/06 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
Python gevent协程切换实现详解
2020/09/14 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
教学实验楼管理制度
2014/02/01 职场文书
学生会离职感言
2014/02/11 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
迎国庆主题班会
2015/08/17 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL