[패스트캠퍼스 수강후기] 업무자동화강의 100% 환급 챌린지 9회차 미션

2021. 3. 15. 23:25카테고리 없음

패스트캠퍼스 6개월 치 업무를 하루 만에 끝내는 업무자동화 올인원 패키지 Online

 

bit.ly/3pIrVoN

 

6개월 치 업무를 하루 만에 끝내는 업무자동화 | 패스트캠퍼스

대한민국 직장인, 개인 사업자 여러분! 오늘도 귀찮은 반복 업무에 스트레스 받으셨나요? 6개월 치 업무를 하루 만에 끝낸 '카이스트 공익'이 여러분의 칼퇴를 도와 드립니다! 여러 정부기관과

www.fastcampus.co.kr

 

학습강의

 

저작권은 무서움 - 저작원 없는 이미지 1 (이미지파일의 구조)
저작권은 무서움 - 저작원 없는 이미지 2 (이미지 텐서, 언패킹, numpy,uint8)
저작권은 무서움 - 저작원 없는 이미지 3 (이미지 저장하기)

 

 

pip install numpy pillow

 

디자인 라이브러리 설치

 

 

이미지 파일의 구조와 픽셀

 

이미지를 무리하게 학대하면 이미지가 깨진다.

정사각형 점 하나를 픽셀이라고 부르면 정사각형 픽셀이 모여 우리가 알고 있는 이미지가 된다

 

픽셀의 구조?

 

픽셀에는 색상 정보만이 있다

 

RGB?

 

빛의 삼원색 모든 색상은 비율의 조합으로 이루어진다
RGB 비율로 색이 결정되며 0~255 사이 값을 통해 색이 정해진다.

 

RGB(255, 0, 0)
RGB(0, 255, 0)
RGB(0, 0, 255)

 

그림판을 활용하면 픽셀을 가장 쉽게 체험해 볼 수 있다

이미지파일은 2차원 데이터를 포함하고 있다 (너비와 높이, 색상)

또 3차원 데이터도 포함되어 있다 (RGB)

 

 

이미지 텐서 / 코드 설계 과정

 

3차원 이상의 데이터를 배열할 때 텐서라고 지칭
(순서와 자기위치가 정해진 채로 데이터가 배열되어 있다)

Uint8 (8bit 숫자, 2의 8승)

0~255 숫자를 입력 안했을경우 오류 표시됨

 

목표

 

1.라이브러리 설치 PIL, numpy
2. 가로 세로 길이 랜덤으로 정하기
3. 이미지 내용물을 랜덤으로 칠하기

 

 

In [1]: import numpy as np

넘파이라는 라이브러리는 불러오고 넘피라고 부르겠다

 

In [3]: np.random.randint(100,400)
Out[3]: 102

np에 랜덤을 입력하고 randint (정수)인트를 붙인다

 

In [4]: np.random.randint(100,400)
Out[4]: 339

 

x = [1,2][0]
y = [1,2][1]

 

x = 1
y = 2

 

언패킹 처리 시

 

x, y = [1,2]

x=1
y=2

 

In [6]: np.random.randint(100,400, size=2)
Out[6]: array([373, 323])

 

사이즈에 숫자을 붙이면 랜덤하게 원하는 갯수만큼 출력된다

넘파이와 언패킹으로 랜덤 숫자 만들기

 

In [7]: x, y = np.random.randint(100,400, size=2)

언패킹을 이용해 x,y 값을 랜덤하게 각각 저장

 

In [8]: x
Out[8]: 159

In [9]: y
Out[9]: 383

 

 

이미지 텐서를 랜덤하게

 

In [13]: image_tensor = np.random.randint(256, size=(x, y, 3))

x는 가로 y세로 3은 색상값 RGB

 

In [14]: image_tensor
Out[14]:

array([[[ 21, 76, 99],
[ 7, 75, 243],

[245, 31, 212],
...,
[195, 223, 128],
[123, 255, 0],
[199, 56, 186]],
[[122, 100, 123],
    [ 36, 103,  40],
    [196,  29, 246],
    ...,
    [203, 177,  71],
    [123, 147, 118],
    [ 85,  65,   6]],

   [[184, 110, 104],
    [137, 192, 160],
    [ 15,  38, 130],
    ...,
    [  7, 200, 212],
    [233, 155, 152],
    [ 60, 220, 212]],

   ...,

   [[128,  92, 215],
    [218,  43,  33],
    [ 99,  32, 232],
    ...,
    [220,  31, 138],
    [109,   2, 191],
    [ 25,  10,  28]],

   [[ 87, 139,  34],
    [102,  20, 112],
    [182,  39, 250],
    ...,
    [164,  38,  69],
    [  3, 241,  73],
    [226,  31, 102]],

   [[ 84, 150,  14],
    [185, 248,  28],
    [202,  93, 191],
    ...,
    [155,  16, 104],
    [201,  48,  77],
    [168, 224, 185]]])

In [15]: image_tensor.shape
Out[15]: (159, 383, 3)

 

텐서는 많은 데이터가 모여있기 때문 한눈에 보기 쉽지 않다
shape 입력하면 방금 만든 사이즈를 볼 수 있다

 

오류가 나지 않게 포맺을 유인트 8로 변경해 준다


astype ~타입을 바꿔준다

 

In [16]: image_tensor.astype('uint8')
Out[16]:


array([[[ 21, 76, 99],
[ 7, 75, 243],
[245, 31, 212],
...,
[195, 223, 128],
[123, 255, 0],
[199, 56, 186]],

   [[122, 100, 123],
    [ 36, 103,  40],
    [196,  29, 246],
    ...,
    [203, 177,  71],
    [123, 147, 118],
    [ 85,  65,   6]],

   [[184, 110, 104],
    [137, 192, 160],
    [ 15,  38, 130],
    ...,
    [  7, 200, 212],
    [233, 155, 152],
    [ 60, 220, 212]],

   ...,

   [[128,  92, 215],
    [218,  43,  33],
    [ 99,  32, 232],
    ...,
    [220,  31, 138],
    [109,   2, 191],
    [ 25,  10,  28]],

   [[ 87, 139,  34],
    [102,  20, 112],
    [182,  39, 250],
    ...,
    [164,  38,  69],
    [  3, 241,  73],
    [226,  31, 102]],

   [[ 84, 150,  14],
    [185, 248,  28],
    [202,  93, 191],
    ...,
    [155,  16, 104],
    [201,  48,  77],
    [168, 224, 185]]], dtype=uint8)

 

결합해서 한번에 하는법

 

image_tensor = np.random.randint(256, size=(x, y, 3)).astype('uint8')

 

 

결과물을 PIL Image 형태로 만듭니다.


result = Image.fromarray(image)

 

넘파이에 있는 프로세스로 이미지 형태로 변경해 저장해준다