python生成lmdb格式的文件實(shí)例
在crnn訓(xùn)練的時(shí)候需要用到lmdb格式的數(shù)據(jù)集,下面是python生成lmdb個(gè)是數(shù)據(jù)集的代碼,注意一定要在linux系統(tǒng)下,否則會(huì)讀入圖像的時(shí)候出問題,可能遇到的問題都在代碼里面注釋了,看代碼即可。
#-*- coding:utf-8 -*- import os import lmdb#先pip install這個(gè)模塊哦 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,否則會(huì)報(bào)磁盤空間不足,這個(gè)數(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就不可用了,就會(huì)輸出這個(gè)信息 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'#訓(xùn)練集和驗(yàn)證集要跑兩遍這個(gè)程序,分兩次生成 path = "D:/ruanjianxiazai/tuxiangyangben/fengehou/chenguang/*.jpg"#將txt與jpg的都放在同一個(gè)文件里面 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格式的文件實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python讀取excel數(shù)據(jù)繪制簡(jiǎn)單曲線圖的完整步驟記錄
這篇文章主要給大家介紹了關(guān)于python讀取excel數(shù)據(jù)繪制簡(jiǎn)單曲線圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10python GUI庫(kù)圖形界面開發(fā)之PyQt5狀態(tài)欄控件QStatusBar詳細(xì)使用方法實(shí)例
這篇文章主要介紹了python GUI庫(kù)圖形界面開發(fā)之PyQt5狀態(tài)欄控件QStatusBar詳細(xì)使用方法實(shí)例,需要的朋友可以參考下2020-02-02sklearn.metrics 中的f1-score簡(jiǎn)介
這篇文章主要介紹了sklearn.metrics 中的f1-score簡(jiǎn)介,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05解決Pycharm出現(xiàn)的部分快捷鍵無(wú)效問題
今天小編就為大家分享一篇解決Pycharm出現(xiàn)的部分快捷鍵無(wú)效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-10-10在Python中將函數(shù)作為另一個(gè)函數(shù)的參數(shù)傳入并調(diào)用的方法
今天小編就為大家分享一篇在Python中將函數(shù)作為另一個(gè)函數(shù)的參數(shù)傳入并調(diào)用的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-01-01Python語(yǔ)言內(nèi)置數(shù)據(jù)類型
這篇文章主要介紹了Python語(yǔ)言中數(shù)據(jù)類型支持得運(yùn)算符,Python語(yǔ)言提供了豐富的內(nèi)置數(shù)據(jù)類型。用于有效的處理各種類型的數(shù)據(jù),下文將介紹到其數(shù)據(jù)類型支持的運(yùn)算符等相關(guān)內(nèi)容,需要的朋友可以參考一下2022-02-02PyTorch實(shí)現(xiàn)手寫數(shù)字的識(shí)別入門小白教程
這篇文章主要介紹了python實(shí)現(xiàn)手寫數(shù)字識(shí)別,非常適合小白入門學(xué)習(xí),本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06用python監(jiān)控服務(wù)器的cpu,磁盤空間,內(nèi)存,超過郵件報(bào)警
這篇文章主要介紹了如果用python監(jiān)控服務(wù)器的cpu,磁盤空間,內(nèi)存,超過郵件報(bào)警,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01