본문 바로가기

프로젝트

opencv - 프로젝트 2 - 2. 카드 인식

이전 프로젝트(https://codestudycafe.tistory.com/47)에서 라벨링을 하는 툴을 만들었습니다. 먼저 이 툴을 이용해 라벨링을 해 줍니다.

우선 이정도로만 만들고 머신러닝을 학습해 보겠습니다.

 

먼저 GPU를 사용할 수 있게 세팅을 해줍니다.

 

몇가지 필요한 설정을들 import한 다음 이미지 파일을 받아옵니다. 저는 data에 원본 이미지, filter에 라벨링한 이미지를 넣었습니다. 

 

이미지를 다 가져오고 크기를 확인해 봅니다.

 

보니까 몇가지 문제가 있는 것 같네요. 우선 이미지가 너무 큽니다. U-net 논문에서는 572*572 이미지를 사용했는데 그것보다 4배 정도 큰 것 같네요. 그리고 label의 shape가 (8, 1356, 1018, 4)입니다. 마지막 차원이 1이길 바랬는데 .png 파일이라 그런지 투명도까지 포함해서 4차원이 된 것 같습니다.

 

cv2.resize를 이용해 크기 문제를 해결해 봅시다.

 

 

image와 label의 최대값, 최소값을 확인해 봅시다.

 

값의 범위가 0 ~ 255입니다. 이것을 0 ~ 1로 바꿔봅시다.

 

원본 이미지만 한번 출력해 봅시다. 

 

비율이 맞지 않으니 조금 찌그러 진 것을 볼 수 있습니다. 하지만 뭐 어때요. 파는것도 아닌데.

 

저는 label에 있는 값이 0 아니면 1이여야 한다고 생각합니다. label에서 0이 아닌 값 중 가장 작은 값을 봅시다.

 

 

0.5를 기준으로 큰 것은 1, 작거나 같은 것은 0으로 만들어 줍니다.

 

 

크기도 줄였고 0 아니면 1로 만들어 주었습니다. 이제 (8,200,200,4)로 되어 있는 이미지를 (8,200,200)으로 바꿔 줍니다.

 

 

이제 이미지를 출력해 봅시다.

 

 

잘 나온 것 같긴 한데 따로 보니까 정확히 알기는 어렵네요. 겹쳐서 보도록 합니다.

 

 

현재 train_label의 type은 float64인데 cvtColor에서는 float32를 입력으로 받기 때문에 변환을 해 주었습니다.

addWeighted는 같은 타입끼리 연산을 해 주기 때문에 train_image도 float32로 바꾸었습니다.

이정도면 얼추 잘 되었다고 할 수 있겠네요. 다음부터 모델을 만들고 학습을 시켜 보도록 하겠습니다.