뭐지? 해서 간단하게 검색해서 테스트 해봤는데
이해를 못하고 해서그런지 제대로 한지 잘 모르겠다.
일단 20기가정도 되는 이미지로 h5파일 만들었을때 1시간정도 걸렸는데
노트북이 안좋아서그런지 h5여러개로 만들면 더 효율적일듯 싶다.
그래도 h5파일에서 key-value로 이미지데이터를 불러올수 있는건 편한거 같다.
import cv2
import datetime as dt
import h5py
import numpy as np
import os
import fnmatch
start = dt.datetime.now()
#이미지가있는 폴더 경로
PATH = os.path.abspath(os.path.join('..', 'input'))
SOURCE_IMAGES = os.path.join(PATH, "images")
#images폴더 내에 여러폴더 조회. 폴더엔 이미지파일만 있다고 가정..
images = []
for root, dirnames, filenames in os.walk(SOURCE_IMAGES):
for filename in fnmatch.filter(filenames, '*.*'):
images.append(os.path.join(root, filename))
try:
#h5파일 쓰기 시작..
with h5py.File('data.h5', 'w') as hf:
for i, img in enumerate(images):
# Images
#openCV 사용해서 이미지 읽기
image = cv2.imread(img)
# 이미지 읽는 와중에. 못읽는 경우가 발생해서 일단 예외로 넘김.
# 원인은 추후에 더 파고들게되면 확인해야합니다..
if isinstance(image, (np.ndarray, np.generic)):
HEIGHT, WIDTH, CHANNELS = image.shape
else:
continue
# 이미지 크기 설정.. 원본크기로 설정하기 떄문에 주석
# image = cv2.resize(image, (WIDTH, HEIGHT), interpolation=cv2.INTER_CUBIC)
Xset = hf.create_dataset(
name='X' + str(i),
data=image,
shape=(HEIGHT, WIDTH, CHANNELS),
maxshape=(HEIGHT, WIDTH, CHANNELS),
compression="gzip",
compression_opts=9)
#진행 체크
if i%25==0:
progTime = dt.datetime.now()
print("\n--------------------In LOOP: ", (progTime - start).seconds, "seconds")
#h5파일 읽기 시작..
f = h5py.File('static/h5/data3.h5', 'r')
keys = f.keys()
dset = ''
fIndex = -1
fName = ''
arrLen = len(keys)
#key로 이미지 데이터 불러옴. 필요한 logic은 안에 추가하면 됨
#우선 첫번째이미지만 확인
for i, fName in enumerate(keys):
dset = f[fName]
break
#이미지 데이터를 png로 인코드, b로 인코드. 후에 imgForm 값을 이미지 태그에 넣으면 웹에서 확인가능.
data = np.array(dset[:,:,:])
retval, buffer = cv2.imencode('.png', data)
png_as_text = base64.b64encode(buffer)
imgForm = "data:image/png;base64, "
imgForm += png_as_text.decode("utf-8")
'python' 카테고리의 다른 글
python json file read & write (0) | 2019.04.10 |
---|
댓글