* 저번글 tensorFlow 설치 에러 문제점: Conda가 32-bit 버전으로 깔려있었는데 tensorFlow는 conda에서 64bit만 지원한다고 한다. 그래서 Conda를 지우고 64-bit로 설치한 후 VS python interpreter 경로를 새로 잡아주었다.
12-4. OpenCV DNN 모듈
OpenCV DNN
학습은 지원하지 않으나 미리 학습된 딥러닝 모델을 이용하여 실행(forward pass, inference)는 가능
OpenCV 3.3버전부터 기본 기능으로 제공 됬으며 OpenCV 4.3버전부터는 GPU(CUDA)를 지원하나 소스 코드를 직접 빌드해야한다. (참고 링크)
지원하는 딥러닝 프레임워크는 Caffe, TensorFlow, Torch, Darknet, ONNX 등이 있고, 검증된 딥러닝 네트워크는 아래 그림과 같다. 참고 링크를 보면 지원하는 레이어도 볼 수 있다.

네트워크 불러오기: cv2.dnn.readNet(model, config, framwork) -> <cv2.dnn_Net object>
model는 훈련된 가중치를 저장하고 있는 이진 파일 이름
config는 네트워크 구성을 저장하고 있는 텍스트 파일 이름
framework는 명시적인 딥러닝 프레임워크 이름 (필수적이지는 않음)

네트워크 입력 블롭(blob) 만들기: cv2.dnn.blobFromImage(image, scalefactor, size, mean, swapRB, crop, ddepth) -> retval
image는 입력 영상
scalefactor는 입력 영상 픽셀 값에 곱할 값으로 기본값은 1
size는 출력 영상의 크기로 기본값은 (0,0)
mean는 입력 영상 각 채널에서 뺄 평균값으로 기본값은 (0,0,0,0)
swapRB는 R과 B 채널을 서로 바꿀 것인지 결정하는 플래그로 기본값은 False
crop은 crop 수행 여부로 기본값은 False
ddepth는 출력 블롭의 깊이로 CV_32F(기본값) 또는 CV_8U 사용
retval는 (N,C,H,W) 크기와 np.float32 데이터 형식을 갖는 np.ndarray 형태의 영상으로 부터 구한 블롭 객체
네트워크 입력 설정하기: cv2.dnn_Net.setInput(blob, name, scalefactor, mean) -> None
blob는 블롭 객체
name는 입력 레이어 이름
scalefactor는 추가적으로 픽셀 값에 곱할 값
mean는 추가적으로 픽셀 값에서 뺄 평균 값
네트워크 순방향 실행(추론):
1. cv2.dnn_Net.forward(outputName) -> retval
outputName는 출력 레이어 이름
retval는 지정한 레이어의 출력 블롭이며 네트워크마다 다르게 결정된다.
2. cv2.dnn_Net.forward(outputNames, outputBlobs) -> outputBlobs
outputNames는 출력 레이어 이름 리스트
outputBlobs는 지정한 레이어의 출력 블롭 리스트
12-5. MNIST 학습 모델 사용하기
숫자 인식
12-3에서 생성한 pb 파일로 네트워크 생성 후 창에서 그려진 숫자 영상을 정규화 시킨 후 블롭 처리를 통해 어떤 숫자가 쓰였는지 추론 진행

12-6. GoogLeNet 영상 인식
GoogLeNet 영상 인식
12-2에서 소개됬던 네트워크로 2014년 ILSVRC에서 영상 인식 분야 1위를 차지한 네트워크
입력은 (104,117,123)의 평균값과 224x224 크기의 BGR 컬러 영상을 받으며, 출력은 1x1000 크기의 행렬로 1000개 클래스에 대한 확률 값을 제공한다.
미리 학습된 GoogLeNet 모델 및 구성 파일을 다운로드하여 네트워크 불러오기 함수를 활용하여 테스트
- 모델 파일 링크
- 설정 파일 링크
- 모델 파일 링크
3. 클래스 이름 파일: 1~1000번 클래스에 대한 설명을 저장한 테스트 파일

12-7. 실전 코딩
필기체 한글 인식
TensorFlow를 이용하여 한글 손글씨를 학습하여 모델을 저장하고 OpenCV에서 저장된 모델을 이용하여 한글 글자를 인식하는 프로그램
참고 자료: IBM "한글 손글씨를 인식 및 번역하는 모바일앱 만들기" (소개 링크, 소스 코드 링크, 동영상 링크)
구현할 기능:
1. 한글 손글씨 학습하여 모델 저장
- 소스 코드 다운로드: 소스 코드 링크 내 전체 소스 코드 다운로드 후 프로젝트 제작할 폴더 안에서 압축 해제
- 필요한 파이썬 패키지 설치: 소스 코드가 압축 해체된 폴더((프로젝트 제작할 폴더)\tensorflow-hangul-recognition-master)에서 아래 명령 실행
> pip install -r requirements.txt

- 폰트 파일 다운로드: 폰트 다운로드 링크 내 테스트를 위해 대략 40~50개 폰트 파일(*.ttf - Window Font file) 다운로드 후 ~\tensorflow-hangul-recognition-master\fonts\ 폴더에 저장
- 한글 이미지 데이터 생성
> python tools\hangul-image-generator.py --label-file labels\256-common-hangul.txt

- 한글 이미지 데이터 생성 후 위치 정규화

- 한글 이미지를 TFRecords로 변환


- ~\tensorflow-hangul-recognition-master에 모델을 구현한 py 파일을 넣고 실행 해 모델 학습
2. 마우스로 한글 입력 후 인식
인증 타임
TensorFlow를 python 설치 버전에 맞춰서 2. 버전 대를 설치 했더니 마지막 실전 코딩에서 AttributeError가 많이 떠서 수정하느라 마우스로 쓴 한글을 인식하는 모습을 볼 수 없었다. 이 점은 내일 포스팅에 추가해야할 거 같다. 설치 에러로 인해 GoogLeNet도 돌려볼 수 없었어서 이 또한 낼 포스팅에 추가해야할 점이다. ㅜㅜ 중요한 포스팅이였는데 결과 모습을 같이 첨부할 수 없어서 너무 아쉽다.




#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #OpenCV를 활용한 컴퓨터비전과 딥러닝 올인원 패키지 Online
패스트캠퍼스(FastCampus) 강의 둘러보러 가기
↓ ↓ ↓
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'남돈내배 > 2022_FastCampus_환급이벤트' 카테고리의 다른 글
| 패스트캠퍼스 챌린지 50일차 - Ch13. 딥러닝 활용: 객체 검출, 포즈 인식 (0) | 2022.03.14 |
|---|---|
| 패스트캠퍼스 챌린지 49일차 - Ch13. 딥러닝 활용: 객체 검출, 포즈 인식 (0) | 2022.03.13 |
| 패스트캠퍼스 챌린지 47일차 - Ch12. 딥러닝 이해와 영상 인식 (0) | 2022.03.11 |
| 패스트캠퍼스 챌린지 46일차 - Ch12. 딥러닝 이해와 영상 인식 (0) | 2022.03.10 |
| 패스트캠퍼스 챌린지 45일차 - Ch11. 머신 러닝 (0) | 2022.03.09 |