python生成lmdb格式的文件實例
在crnn訓練的時候需要用到lmdb格式的數(shù)據(jù)集,下面是python生成lmdb個是數(shù)據(jù)集的代碼,注意一定要在linux系統(tǒng)下,否則會讀入圖像的時候出問題,可能遇到的問題都在代碼里面注釋了,看代碼即可。
#-*- 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,否則會報磁盤空間不足,這個數(shù)字是字節(jié)
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格式的文件實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python讀取excel數(shù)據(jù)繪制簡單曲線圖的完整步驟記錄
這篇文章主要給大家介紹了關(guān)于python讀取excel數(shù)據(jù)繪制簡單曲線圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10
python GUI庫圖形界面開發(fā)之PyQt5狀態(tài)欄控件QStatusBar詳細使用方法實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5狀態(tài)欄控件QStatusBar詳細使用方法實例,需要的朋友可以參考下2020-02-02
在Python中將函數(shù)作為另一個函數(shù)的參數(shù)傳入并調(diào)用的方法
今天小編就為大家分享一篇在Python中將函數(shù)作為另一個函數(shù)的參數(shù)傳入并調(diào)用的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
PyTorch實現(xiàn)手寫數(shù)字的識別入門小白教程
這篇文章主要介紹了python實現(xiàn)手寫數(shù)字識別,非常適合小白入門學習,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
用python監(jiān)控服務(wù)器的cpu,磁盤空間,內(nèi)存,超過郵件報警
這篇文章主要介紹了如果用python監(jiān)控服務(wù)器的cpu,磁盤空間,內(nèi)存,超過郵件報警,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01

