이번 시간에는 HOG알고리즘과 SVM 알고리즘을 조합해서 필기체 숫자를 인식하는 프로그램을 만들어본다.
HOG알고리즘을 이용해서 필기체 숫자의 방향성정보를 추출하고
그 방향성 정보를 SVM 알고리즘을 이용해서 10개의 클래스로 나눠준다.
그리고 사용자가 숫자를 입력하면 해당 클래스를 비교하여 숫자를 인식하는 방법이다.
그럼 저번강의에서도 봤었던 digit 이미지 내부에있는 숫자를 분리해야하는데
해당 숫자들을 HOG알고리즘 사용을 위해 나눠주고 주황색 박스처럼 4개의 셀을 하나로 묶어주어 사용하면
셀 하나가 9개의 히스토그램 그래디언트 방향성 정보를 갖게된다.
그러면 나오게되는 500X324 크기의 행렬에서
SVM 알고리즘의 초평면에 의해서 클래스가 나뉘게 된다.
SVM알고리즘은 기본적으로 2개의 클래스로만 나뉘게 된다.
따라서 10개의 클래스로 나뉜다고 할 때 0번클래스와 아닌 클래스, 1번클래스와 아닌 클래스, 2번클래스와 아닌 클래스
등과 같이 나뉘는 방법을 사용하고 있다.
코드리뷰
위 프로그램은 400X400의 창이 하나 생성되면
마우스로 숫자 하나를 입력시키고 해당 숫자를 분류시켜주는 프로그램이다.
일단 처음에 HOGDescriptor 객체를 하나 만든 뒤
하나의 영상을 20x20 , 블록의 크기를 10x10 , 셀의 크기는 5x5 , 블록 이동범위는 5x5, 방향 히스토그램 개수 9개를
지정해주면 Descriptor 의 크기가 자동으로 결정된다.
그리고 cells 변수에는 20x20 짜리가 5000개 있는 형태로 저장된다.
그럼 각각의 서브 이미지 ( cells ) 에서 HogDescript 정보를 추출해서 desc리스트에 채워준다..
채워진 desc를 이용해서 ndarray를 만들어준다.
그리고 이전에 배웠던 방법 그대로 SVM 학습을 시켜준다.
그리고 trainAuto 를 사용하여 C, Gamma 값을 추출해준다.
강의에서는 강사님이 미리 해놓은 C,Gamma 값으로 train 해준다.
그리고 train 한 값을 .yml 파일로 저장해준다.
.yml 파일은 머신러닝에서 train 한 정보들을 모두 저장하고 있는 파일인데
위 이미지와 같이 어떤 타입을 사용했고 어떤 커널을 사용했고 gamma , c 값은 어떤지
트레이닝에 대한 모든 정보들을 포함하고 있는 파일이다.
따라서 한번 트레이닝을 시켜 yml 파일을 생성하면 다음 상황에서 yml 파일만 로드하여 빠르게 사용할 수도 있다.
이 전에 사용했었던 숫자 인식 프로그램보다는
잘 되는 것을 느낄 수 있지만 아직 위치 변화에 대한 인식에는 서툰 것을
느낄 수 있는데 이를 보완한 방법을 다음시간에 설명한다.
'Program > 머신러닝' 카테고리의 다른 글
[Open CV] 머신러닝 _ 숫자 영상 정규화 (0) | 2022.07.14 |
---|---|
[Open CV] 머신러닝 _ 숫자 영상 정규화 (0) | 2022.07.12 |
[Open CV] 머신러닝 _ OpenCV SVM 사용하기 (0) | 2022.07.10 |
[Open CV] 머신러닝 SVM 알고리즘 (0) | 2022.07.09 |
[Open CV] 머신러닝 k 최근접 이웃 알고리즘 (0) | 2022.07.08 |