AI 입문 - PaddleOCR 사용기(CUDA, cuDNN 설치)
우리 회사 근처의 구내식당들은 매일 SNS를 통해 오늘의 메뉴를 공지한다.
점심시간마다 여러 계정을 확인하기가 귀찮은 나머지 해당 메뉴 게시글을 크롤링해서 이미지가 포함되어 있다면 텍스트로 변환한 후 메신저에 자동으로 알려주는 크롤러를 만들기도했다.
그 크롤러를 만들 때 사용한 OCR 라이브러리의 인식률이 떨어지는 것을 보며 더 좋은 방법이 없을까 하던 중 paddleocr이라는 라이브러리를 발견해서 적용해보기로했다.
PaddleOCR 코드 작성
참고
https://yunwoong.tistory.com/249
https://github.com/yunwoong7/korean_ocr_using_paddleOCR
위 글을 참고해서 PaddleOCR 코드를 작성하고 구동해보았다.
맥북으로 실행하였을 때는 CPU를 이용한 라이브러리인 paddlepaddle을 이용해 구동해보았었는데 시간이 상당히 오래걸려서 데스크탑으로 다시 시도해보았다.
드디어 AI를 위해 GPU를 사용해본다는 설레는 마음으로 얼른 paddlepaddle-gpu 라이브러리를 설치해서 OCR을 실행시켜보았다.
그랬더니, CUDA와 cuDNN이 설치되지 않았다는 오류를 뱉었다.
CUDA, cuDNN 설치와 시행착오
참고
위 글을 참고하여 CUDA, cuDNN을 설치했다.
시행착오 1
내 그래픽 카드는 RTX3070이기때문에 CUDA는 작성 시점 기준 최신 버전인 12.4 버전으로, cuDNN은 NVIDIA의 cuDNN 다운로드 페이지 접속하면 가장 먼저 표시되는 버전을 설치하였다.
윗 글 본문에서도 CUDA와 cuDNN은 사용하는 환경의 요구사항에 맞게 구성해야한다고 기재되어있으나 처음에는 그 말이 와닿지 않았었다.
설명에 따라 CUDA, cuDNN을 설치하고 다시 OCR을 실행시켜보았는데, 여전히 에러 텍스트가 변하지 않았다.
오류 문구는 대충 아래와 같았다.
RuntimeError: (PreconditionNotMet) The third-party dynamic library (cudnn64_8.dll) that Paddle depends on is not configured correctly. (error code is 126)
Suggestions:
1. Check if the third-party dynamic library (e.g. CUDA, CUDNN) is installed correctly and its version is matched with paddlepaddle you installed.
2. Configure third-party dynamic library environment variables as follows:
- Linux: set LD_LIBRARY_PATH by `export LD_LIBRARY_PATH=...`
- Windows: set PATH by `set PATH=XXX;
무언가 이상하다고 느꼈던 부분은 내가 설치했던 cudnn 버전이 12 였고, 위 에러에서는 cudnn64_8.dll 파일을 요구한다는 것이었다. 내 PC의 CUDA 디렉토리에서 비슷한 파일명을 찾아보니 cudnn64_12.dll 이라는 파일이 보였다.
여기서 CUDA와 cuDNN 버전이 맞지 않는다는 것을 떠올렸다.
시행착오 2
이번에는 CUDA 12.x와 호환되는 cuDNN 8.x 버전대로 다시 다운받았고 다시 구동해봤다.
오류 메시지는 가지고 있지 않지만, 여전히 CUDA를 정상적으로 설치하지 않은 것 같다는 에러 메시지가 표시되었다.
이 때 OCR 라이브러리인 paddlepaddle에서 지원하는 사양이 CUDA 11.x, cuDNN 8.x 버전이라는 생각이 들어 기존 설치했던 버전을 삭제하고 위 사양대로 다시 설치하였다.
드디어 OCR 실행

왼쪽 이미지를 대상으로 OCR을 수행하면 오른쪽 이미지처럼 Text Detecting 된 결과를 보여준다.
그리고 Text Recognize를 수행한 결과는 아래와 같다.
['오늘의메뉴', '돼지갈비쯤', '탕수육', '떡이', '그린야채샐러드', '비타민야채겉절이', '계란장조림', '포기김치', '콩나물김치국']
다른 이미지를 한 번 더 돌려보았다.

['흰밥/흑미밥', '돼지갈비쯔', '깐풍기', '불닭볶음면', '나박감자소시지볶을', '종상추겉절이', '배추김치겉절이', '김치콩나물국']
'찜', '볶' 등 같은 글자는 획 수가 많아서 인식이 제대로 안되는 것 같다는 추측을 해보았다. 또한 동일한 이미지에 대해 여러 번 돌려봐도 결과는 변하지 않았다
어쨌든 기존에 사용하던 라이브러리보다는 인식률이 조금은 좋은 것 같다. 다만 텍스트 추출까지 걸리는 시간은 현재 사용하고 있는 라이브러리가 훨씬 빠른 걸로 느껴진다..
탐구 포인트
- 인식률을 높일 수 있는 방법이 있는지?
- 실행 시간을 줄일 수 있는 방법이 있는지?
결론 및 요약
1. paddlepaddle-gpu 라이브러리는 CUDA 11.x, cuDNN 8.x 버전으로 구성해야 정상 동작한다.
2. 글을 잘 읽자.
근데 나같은 사람은 글을 잘 읽어도 내가 꼭 삽질을 해봐야 깨닫는 게 있는 것 같다.