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: