• 12행 mnist_cnn.pb 파일을 이용하여 Net 객체 net을 생성합니다.
• 14~17행 net 객체가 정상적으로 생성되지 않으면 에러 메시지를 출력하고 프로그램을 종료합니다.
• 19행 400×400 크기의 빈 영상 img를 생성합니다. 이후 img 영상에 숫자 그림을 그려서 숫자를 인식합니다.
• 22행 마우스 콜백 함수를 등록합니다. 마우스 콜백 함수에 사용자 데이터로 img 영상 주소를 전달합니다.
• 29행 img 창에서 키보드 Space 키를 누르면 dnn 인식을 수행합니다.
• 30행 img 영상을 28×28 크기로 줄이고, 픽셀 값을 0부터 1 사이로 정규화하여 네트워크에 입력으로 전달할 블롭 inputBlob을 생성합니다. inuptBlob은 4차원 행렬이고, 1×1×28×28 크기입니다.
• 31행 inputBlob을 네트워크 입력으로 설정합니다.
• 32행 네트워크를 순방향으로 실행하고, 네트워크 출력을 prob 행렬에 저장합니다. prob 행렬은 1×10 크기이고, 타입은 CV_32FC1입니다.
• 34~37행 prob 행렬에서 최댓값과 최댓값 위치를 찾습니다. 최댓값 maxVal은 최대 확률 값이며, 최댓값 위치 maxLoc.x는 가장 확률이 높은 숫자를 나타냅니다.
• 39행 인식된 숫자와 확률을 콘솔 창에 출력합니다.
• 41~42행 img 영상을 검은색으로 초기화하고, 화면에 출력합니다.
• 49~65행 마우스를 이용하여 img 영상에 숫자를 그리는 코드입니다. 자세한 코드 설명은 15.2.3절 코드 15-3을 참고하세요.