1. 程式人生 > >caffe中將某個目錄下的jpg影象轉換為hdf5型別

caffe中將某個目錄下的jpg影象轉換為hdf5型別

網上相關資料很少,今天做了將資料夾下的所有.jpg格式的圖片轉換成hdf5格式,中途踩了很多坑,最後在老師的指導下寫出來了,特此記錄。
二話不說,直接上程式碼,很好理解。我的圖片命名是x1_y1_x2_y2.jpg的形式,用CNN做迴歸,找到2個座標的x,y值。建議用python做文字處理,非常快,很容易上手。
主要看data和label具體怎麼寫,怎麼定義,怎麼轉換,這個是關鍵。所有的圖片都讀取完,一次性create_dataset,不然會出錯。

import numpy as np
import h5py
import cv2
import os
import random
import
code import string def store_hdf5(filename, mapping): """Function to store data mapping to a hdf5 file Args: filename (str): The output filename mapping (dic): A dictionary containing mapping from name to numpy data The complete mapping will be stored as single datasets in the h5py file. print("Storing hdf5 file %s" % filename) with h5py.File(filename, 'w') as hf: for label, data in mapping.items(): print(" adding dataset %s with shape %s" % (label, data.shape)) hf.create_dataset(label, data=data) print(" finished") if __name__=="__main__": src_dir = "/usr/MyProject/chineseWordsRecognition/meta/desdir2" des_dir = "/usr/caffe_20150410/examples/licensefile/train_desdir" des_txt = "/usr/caffe_20150410/examples/licensefile/train_destxt.txt" flist = os.listdir(src_dir) if not os.path.exists(des_dir): os.mkdir(des_dir) print "num of files: " + str(len(flist)) random.shuffle(flist) des_txt_file = open(des_txt,'w') #max_num=1000000 #56GB max_num=32000 #one split contains 32000 images W = 210 H = 30 TOT_MAX=1000000 data = np.zeros((max_num,3, H, W),dtype=np.float32) labels = np.full((max_num, 4), -1, dtype=np.float32) CNT=0;
TOT = len(flist) TOT_CNT = 0 BATCH_CNT=0 for fname in flist: if fname[0]=="." or fname[0]=="_": continue src_path = src_dir + "/" + fname res = cv2.imread(src_path, cv2.IMREAD_COLOR).astype(np.float32) tmpimg = cv2.resize(res,(W,H)) h,w,ch = tmpimg.shape if
h==0 or w==0: continue img = np.zeros((3,H,W),dtype=np.float32) img[0,:,:] = tmpimg[:,:,0]-104 #圖片歸一化,除以每個通道的均值 img[1,:,:] = tmpimg[:,:,1]-117 img[2,:,:] = tmpimg[:,:,2]-123 annot = fname.split(".")[0].split("_")[0:4] #取圖片命名的四個座標 if len(annot)!=4: continue resh,resw,resch = res.shape l = string.atof(annot[0])/resw labels[CNT,0] = l l = string.atof(annot[1])/resh #座標一定要歸一化,切記切記 labels[CNT,1] = l l = string.atof(annot[2])/resw labels[CNT,2] = l l = string.atof(annot[3])/resh labels[CNT,3] = l data[CNT,:,:,:] = img CNT+=1 TOT_CNT+=1 if TOT_CNT == 10000: #hdf5檔案的大小有限制,如果太大的話,一定要分批寫 break if TOT_CNT%1000==0: print "TOT=" + str(TOT) + ", TOT_CNT=" + str(TOT_CNT) print code if CNT>=max_num: des_path = des_dir + "/" + str(BATCH_CNT) + ".h5" des_txt_file.write(des_path + "\n") CNT=0 BATCH_CNT+=1 store_hdf5(des_path, {"data" : data, "labels" : labels}) data = np.zeros((max_num,3, H, W),dtype=np.float32) labels = np.full((max_num, 4), -1, dtype=np.float32) if TOT_CNT>=TOT_MAX-1: break if CNT>0: data = data[0:CNT, :, :, :] labels = labels[0:CNT, :] des_path = des_dir + "/" + str(BATCH_CNT) + ".h5" des_txt_file.write(des_path + "\n") store_hdf5(des_path, {"data" : data, "labels" : labels}) des_txt_file.close()

相關推薦

caffe中將某個目錄jpg影象轉換hdf5型別

網上相關資料很少,今天做了將資料夾下的所有.jpg格式的圖片轉換成hdf5格式,中途踩了很多坑,最後在老師的指導下寫出來了,特此記錄。 二話不說,直接上程式碼,很好理解。我的圖片命名是x1_y1_x2_y2.jpg的形式,用CNN做迴歸,找到2個座標的x,y值

Unicode字符集,CString 轉換char型別

//CString 轉換為char型別,Unicode字符集下 UINT num = WideCharToMultiByte(CP_ACP,0,m_SendData,m_SendData.

Java如何解析某個目錄xml檔案,將XML檔案轉換報表資料來源?

在Java開發的報表工具FineReport中,假如在目錄下儲存了幾個XML檔案,希望把XML檔案轉換為報表資料來源,同時希望展示動態xml資料來源的效果,這時可通過引數的方式,動態獲取xml欄位中的值再作為報表資料來源。Northwind.xml記錄資料格式如下:<?

linux刪除某個目錄大量文件辦法

時間 垃圾 spa delete lam lamp session nohup 具體步驟 在lamp架構裏,因為設置session 超時時間為一天,所以遇到php產生的session大量存在/data/tmp目錄下,數量大概有200萬,並且不能及時回收。使用 rm

java利用WatchService實時監控某個目錄的文件變化並按行解析(註:附源代碼)

tomcat啟動 interrupt extend red -name 利用 end eba tor 首先說下需求:通過ftp上傳約定格式的文件到服務器指定目錄下,應用程序能實時監控該目錄下文件變化,如果上傳的文件格式符合要求,將將按照每一行讀取解析再寫入到數據庫,解析完之

某個目錄的所有文件進行壓縮

project buffer sts string urn creat row pro 生成 /** * @project: Test * @author chenssy * @date 2013-7-28 * @Description: 文件壓縮工具類 *

用shell腳本遞歸遍歷某個目錄的所有文件並移動到某個指定的目錄

腳本 遞歸遍歷 執行 val else valid RoCE elif ive 1,先看下腳本cat recursive.sh #!/bin/shread -p "input path:" FilePath function getAllfiles

Python 讀取某個目錄所有的檔案 -- untested

# coding=utf-8 #Python 讀取某個目錄下所有的檔案例項 import os import os.path import re import sys import codecs reload(sys) sys.setdefaultencoding('utf-8') path

windows 2008將新增磁盤掛載到某個目錄

計算 disk mar water 新增 e30 ces roc fff 1、首先將新增的磁盤聯機2、新建簡單卷3、創建完成在計算機中不會出現新的盤符4、要訪問新的磁盤,直接進入c盤下的disk目錄即可windows 2008下將新增磁盤掛載到某個目錄下

通過 Java 去監測某個目錄的檔案變動(commons.io方式)

org.apache.commons.io包 使用Commons-io的 monitor 下的相關類可以處理對檔案進行監控,它採用的是觀察者模式來實現的。 可以監控資料夾的建立、刪除和修改 可以監控檔案的建立、刪除和修改 採用的是觀察者模式來實現的

通過 Java 去監測某個目錄的檔案變動 (File Watch Service方式)

最近處理了一個需求,大概是這樣的: 己方搭建好FTP伺服器 對方往該伺服器的指定目錄(假設叫 目錄A)上傳檔案 己方需要將對方上傳好的檔案(處於上傳中狀態的檔案不能進行處理)解析並更新到資料庫中 己方對 目錄A 只有 “讀”的許可權,即,不能對 目錄A中的檔案進行刪除、重

Centos中查詢並替換某個目錄所有檔案中的某個字串

查詢目錄下包含某個字串的檔案 例:查詢 dir 目錄下所有包含 str 的檔案。 grep -lr 'str' dir vim替換單個檔案中所有字串方法 例:替換當前檔案中所有 old 為 new :%s/old/new/g 替換目錄下所有檔案中到某

java:File類(練習)--獲取某個目錄的所有某種型別的檔案

需求:從鍵盤輸入接收一個資料夾路徑,打印出該資料夾下所有的.java檔名  package com.heima.chario; import java.io.File; import java.ut

Caffe將圖片轉換lmdb格式

在Caffe的例程裡,自帶了轉換格式的程式碼。檢視檔案:./example/imagenet/create_imagenet.sh 檔案內容如下: #!/usr/bin/env sh # Create the imagenet lmdb inputs #

python 某個目錄的所有檔案列表

使用os.listdir() 函式來獲取某個目錄中的檔案列表 import os names = os.listdir('somedir')     結果會返回目錄中所有檔案列表,包括所有檔案,子目錄,符號連結等等。如果你需要通過某種方式過濾資料,可以考慮結合os.pa

Python for Windows——監控Windows某個目錄檔案的變化

https://win32com.goermezer.de/content/view/286/285/ 這個網站真是給力,不多說,程式碼直接搬運過來,還有我的測試結果,拿走不謝! import os import sys import win32file impor

輸出某個目錄的所有檔案和資料夾,包括子資料夾中的內容

IO流中File類中有個listFiles() 方法,它可以返回一個抽象路徑名陣列,這些路徑名錶示此抽象路徑名錶示的目錄中的檔案。此時用這個方法來講檔案中的所有路徑儲存在一個數組中,在去判斷這個陣列中哪

在Linux如何使用C語言列出某個目錄的檔案

在Linux下可採用readdir ( ) 函式來實現,程式碼實現過程如下: 開啟目錄 迴圈讀目錄, 輸出目錄下檔案 關閉目錄指標 #include <dirent.h> #include <stdio.h> int main

jpg影象轉換成yuv420p格式

from PIL import Image import numpy def my_open_jpg(filename): "open a jpg file and return a file

刪除某個目錄的全部文件

for 文件 urn delet mdi pycharm mtr exist import def delete_file_in_dir(dir): if not os.path.exists(dir): return 1 try: