Computer Vision

    [이미지 전처리] BGR and RGB

    openCV 와 PIL 패키지를 왓다갔다 사용하다 보면 이런 괴상한 형식의 이미지를 발견하게 된다. 이런 이유를 계속찾아봤더니 두 패키지의 이미지불러오기 방식이 다르기 때문이였다. openCV 는 기본적으로 BGR의 형태로 변환하여 데이터를 가져오고 PIL 은 이미지가 가지고있는 형식 그대로를 가져온다. def stringToRGB(base64_string): imgdata = base64.b64decode(base64_string) dataBytesIO = io.BytesIO(imgdata) image = Image.open(dataBytesIO) return cv2.cvtColor(np.array(image), cv2.COLOR_BGR2RGB) 이 함수를 통해 문자열이미지 데이터를 변환했을 때 뒤에있..

    [이미지 전처리]. ImageDataGenerator 클래스 : 이미지 제너레이터

    케라스 공식 홈페이지 keras.io/ko/preprocessing/image/ Image Preprocessing - Keras Documentation 이미지 전처리 [source] ImageDataGenerator 클래스 keras.preprocessing.image.ImageDataGenerator(featurewise_center=False, samplewise_center=False, featurewise_std_normalization=False, samplewise_std_normalization=False, zca_whitening=False, zca_epsi keras.io ImageDataGenerator 클래스란? 이미지를 학습시킬 때 학습데이터의 양이 적을 경우 학습데이터를 조금씩..

    [이미지 전처리] Pillow PIL , Opencv cv2 , 이미지 형태 정규화(RGB, RGBA)

    나는 사용자들이 업로드한 이미지를 받아서 처리해주는 프로젝트를 진행하고 있고 역시 에러가 발생하기 전까지는 이런 사실을 전혀 몰랐다. 이미지 칼라의 형식은 다양한 형식이 있고 이것에 따라 차원이 달라진다. RGB , RGBA 등등... 모든 데이터를 RGB든 RGBA 든 모두 같은 형식(정규화)으로 통일 시켜야 정확한 결과를 얻을 수 있다. 내가 여지것 본 데이터들은 ( 143 , 266 , 3 ) 과 같이 뒤에가 항상 3 으로 끝나는 이미지가 대부분이여서 이미지는 끝이 3으로 끝나는 구나 라고 생각했는데 그게 아니였다. 에러를 발생시킨 이미지를 봤더니 위처럼 이미지 객체가 이런식으로 차원의 맨 끝이 4로 되어있더라.. 궁금해서 mode( ) 함수를 통해 형식을 알아봤다. 보니까 RGBA 형식이더라 RG..

    [이미지 전처리]. 이미지 차원 추가하기 , np.append_dim()

    코딩을 하다보면 아주 간단한 문제인데도 불구하고 오랜시간을 매달리게 되는 경우가 많다. 이것 역시 간단한 문제... 모델을 학습시킬 때는 많은 차원의 데이터들이 트레이닝 데이터로 활용된다. 하지만 우리가 실제로 사용할 때는 하나의 데이터를 넣고 모델을 거쳐 결과를 뽑아낸다. 여기서 차원이 맞지 않는 문제가 발생한다. *어떤 예측모델인지에 따라 다르지만 예측할때 들어가는 input 데이터의 shape를 확인해서 shape을 맞춰주는 작업이 필요하다. 이미지는 행렬로 변환하면 3차원 데이터이다. 하지만 예측할 때 이 데이터를 넣으면 에러가 발생한다. 왜냐하면 예측에 필요한 데이터는 4차원 데이터 이기 때문이다. 그래서 서론이 길었지만 차원을 하나 추가해주어야한다. testimg_resized = np.exp..

    [이미지 전처리] Url to image , url 주소를 통한 이미지 처리

    이미지 학습데이터를 크롤링하며 수집하는 도중 이런 생각이 들었다. 아니 어차피 값을 통해 이미지 url을 열어서 하드에 저장하는 방식인데. 그냥 src 값만 저장하고 나중에 읽기만한 다음에 트레이닝데이터로 쓰면 좋지 않을까? 심지어 PIL 의 Image 패키지를 사용하면 로컬경로를 넣지않고 이미지 주소값을 넣어도 이미지가 주피터에서 열린다는 사실도 알고있었다. Image.open(url) 하면 해당 이미지가 주피터에서 열림.. 그래서 나는 이미지주소만 받아서 그 이미지를 numpy 객체로 변환하는 방법을 공유하려 한다. 어차피 모델 학습을 위한 input data 는 numpy 이니까.. ㅎㅎ 먼저 나는 이미지주소만 크롤링했다. url 을 다 크롤링했다면 함수를 정의해서 사용하면된다. import url..

    [이미지 전처리]. image to base64 , base64 to image 변환하는 방법

    image to base64 , base64 to image 변환하는 방법 본래 html 에 있는 이미지들의 src를 보면 대부분 로컬주소가 들어있거나 url 주소가 들어있다. 하지만 우리는 사용자가 업로드한 이미지에 대한 처리를 해줘야 할 상황이 생기고 사용자가 업로드한 이미지를 살펴보니까, base64의 형태로 에 저장되어있더라. 여기서 간단히 base64에 대해서 알아보자. Base64 란 8비트 2진 데이터를 (플랫폼의) 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념이다. Base 64는 데이터를 64진법 으로 나타낸다. 이를 0부터 63까지 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopq..

    [이미지 전처리]. 이미지 크기 한꺼번에 변경하기 ( image preprocessing)

    구글의 티쳐블 머신을 학습시키기 위해선 224px , 224px로 이미지 크기를 조정해야 한다. 많은 이미지들의 크기를 한번에 바꾸는 방법을 알아보자.프로그래머는 귀차니즘이 많을수록 실력이 늘어나는 것같다. ㅋㅋ 먼저 패키지를 임포트 한다.import os import glob 그리고 현재 경로를 확인하는 함수 os.getcwd() 실행해서 현재 위치를 체크한다.os.getcwd() # 현재경로 확인 그리고 glob 함수를 통해서 이미지들의 경로들을 리스트로 받아온다.animal = glob.glob(os.getcwd() + "./동물/동물/*.jpg") beauti = glob.glob(os.getcwd() + "./뷰티/뷰티/*.jpg") fashion = glob.glob(os.getcwd() + ..