Dobby is !free/Intern 🐣

인턴일지🥕 이미지 전처ring..ring..💍..

컴공생 C 2021. 5. 5. 23:39
반응형

이미지를 여전히 변환하고 있다.

10만개가 넘으니까 진짜 오래걸린다 예상시간 84시간 제정신인가요 휴먼?으겔겔..

일단 일부를 돌려봐야할 것 같은데.. 무튼 전처리 쪽을 하고있다 요즘

여러모로 생각해 보았을 때 사용하기로 한 column 값은

['Diastolic blood pressure','Heart Rate','Mean blood pressure','Oxygen saturation','Respiratory rate','Systolic blood pressure']

이렇게 6가지 이다. csv파일을 만들때는 위의 6개 + time을 만들었는데 time은 필요없을 것 같다. 애초에 시간에 따른 환자의 수치 변이가 더 중요한 요소일 것이다.

그래서 각 pid, eid의 column 별 이미지를 만들어서 pid_eid 하나당 6개의 이미지를 input으로 처리해야한다.

6개의 이미지를 하나의 input 으로 어떻게 받지..? 🧐 => 6개의 채널을 이용하기로 했다❗️

말로는 굉장히 간단해 보이는데 알고보니 나는 이전 과제에서 keras를 주로 이용했고 이미지 자체를 이용하지 않고 시계열을 전처리를 거쳐 사용했기 때문에 이미지 전처리 부분에서 많이 헤맸던 것 같다. 이미지를 통으로 넣는다는게 불가능 하다는 건 알고 있었지만 pixel을 RGB로 킵할지 흑백을 할지 등등 고려해야할 점이 훨씬 많았다.

일단은 그래서 cv2로 읽고 resize를 했씀다.

과정을 단순하게 정리해보면

1-1. test_listfile에서 {pid}_episode{eid}_timeseries.csv , label 추출

1-2. {pid}_episode{eid}_timeseries.csv -> {pid}_episode{eid} 로 변환 / label int로 변환

2. {pid}_episode{eid}+ 각 column별 이미지 변환해서 dstack으로 합치기

3. 각 pid-eid에 대해 위 과정을 반복 -> 저장

#필요 라이브러리 import
import csv
import os
import cv2
import numpy as np
from tqdm import tqdm

#이미지 전처리 함수
def read_img_csv(csv_filepath, imgpath,savepath):
    Images=[]
    Labels=[]
    #지정한 factor 리스트로 선언
    col=['Diastolic blood pressure','Heart Rate','Mean blood pressure','Oxygen saturation','Respiratory rate','Systolic blood pressure']
    f=open(csv_filepath)
    csv_list=[]
    rdf=csv.reader(f)
    #헤더 스킵
    next(rdf)
    for line in rdf:
        line[0]=line[0].replace('timeseries.csv','')
        Labels.append(int(line[1]))
        csv_list.append(line)
    f.close()
    #train/test listfile 읽어서 pid_eid 추출
    csv_list=sorted(csv_list)
    for i in tqdm(csv_list):
        #pid_eid=j
        j=i[0]
        img=[]
        #j의 각 요소를 변환한 이미지를 불러옴
        for k in col:
            try:
                #print(imgpath+j+k+'.jpeg')
                
                #이미지 읽고 resize
                image=cv2.imread(imgpath+j+k+'.jpeg',0).astype(np.float32)
                image=cv2.resize(image,(48,48))
                
                # image=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
                # print(image.shape)
                # image =  tf.image.decode_jpeg(tf.read_file(image),channels=1)
                
                #한번에 합치기 위해서 배열에 담아둠
                img.append(image)
            #이미지가 비어있는 경우
            except:
                #0으로 채워줌 - 모든 pid_eid의 Input (48,48,0)으로 맞추기 위함
                image=np.zeros((48,48))
                img.append(image)
                print('filled with 0: '+ imgpath+j+k)
        #6가지 요소의 이미지 합치기
        new=np.dstack((img[0],img[1],img[2],img[3],img[4],img[5]))
        Images.append(new)
    #전체 결과를 파일로 저장    
    np.savez(savepath+'testdata_v1',x=Images,y=Labels)
    return Images,Labels



    

인턴에서 tqdm을 배운건 정말 두고두고 잘 쓸 것 같다.

 

 

48시간이어서 이미지 크기를

이미지 처리가 정-말 오래 걸리지만 이걸 어떻게 빨리 끝내야 돌려 볼텐데 🥲

일단 이 부분을 가지고 cnn 넣어보기를 해야겠다 !

반응형