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的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
python实现感知器算法详解
Dec 19 Python
Django的HttpRequest和HttpResponse对象详解
Jan 26 Python
用python处理图片之打开\显示\保存图像的方法
May 04 Python
Python3.4解释器用法简单示例
Mar 22 Python
PyTorch的深度学习入门教程之构建神经网络
Jun 27 Python
Python Django中的STATIC_URL 设置和使用方式
Mar 27 Python
pyspark 随机森林的实现
Apr 24 Python
Python3爬虫中关于Ajax分析方法的总结
Jul 10 Python
详解Python中Pyyaml模块的使用
Oct 08 Python
OpenCV-Python直方图均衡化实现图像去雾
Jun 07 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取进制余数函数代码
2012/01/19 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
WordPress分页伪静态加html后缀
2016/06/08 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
nodejs修复ipa处理过的png图片
2016/02/17 NodeJs
通过学习bootstrop导航条学会修改bootstrop颜色基调
2017/06/11 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
javascript实现计算指定范围内的质数示例
2018/12/29 Javascript
爬虫利器Puppeteer实战
2019/01/09 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
python使用any判断一个对象是否为空的方法
2014/11/19 Python
pygame实现雷电游戏雏形开发
2018/11/20 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
使用layui实现左侧菜单栏及动态操作tab项的方法
2020/11/10 HTML / CSS
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
Unix/Linux开发面试题
2016/08/16 面试题
学雷锋志愿者活动总结
2014/06/27 职场文书
员工安全责任书范本
2014/07/24 职场文书
晚会开幕词
2015/01/28 职场文书
外贸业务员岗位职责
2015/02/13 职场文书
写给同事的离职感言
2015/08/04 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python
Win11 Build 22000.51版本文件资源管理器“命令栏”和上下文菜单有什么新变化?
2021/11/21 数码科技