더북(TheBook)

이렇게 만든 blob 객체는 4차원 행렬이며, 그 크기는 1×1×28×28로 생성됩니다. 이 블롭 객체를 그대로 네트워크 입력으로 설정하고, 순방향으로 실행하면 예측 결과 행렬을 얻을 수 있습니다.

net.setInput(blob);
Mat prob = net.forward();

앞 예제 코드에 의해 반환되는 행렬 prob의 크기는 10×1이고, 타입은 CV_32FC1입니다. prob 행렬에서 각 행의 원소는 입력 영상이 0부터 9에 해당하는 숫자일 확률을 나타냅니다. 그러므로 prob 행렬에서 최댓값 위치 행 번호가 입력 필기체 숫자 인식 결과이고, 해당 위치의 원소 값은 확률을 의미합니다.

텐서플로에서 학습된 mnist_cnn.pb 파일을 이용하여 필기체 숫자를 인식하는 OpenCV 예제 프로그램 소스 코드를 코드 16-3에 나타냈습니다. 코드 16-3의 dnnmnist 예제 프로그램은 16.2.1절에서 텐서플로로 학습시킨 mnist_cnn.pb 파일을 불러와서 네트워크를 생성하고, 사용자가 마우스로 그린 필기체 숫자 영상을 네트워크 입력으로 전달하여 그 결과를 예측합니다. 코드 16-3에 나타난 소스 코드 파일은 내려받은 예제 파일 중 ch16/dnnmnist 프로젝트에서 확인할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.