AI

AI 입문 - PaddleOCR 사용기(CUDA, cuDNN 설치)

parkjg20 2024. 4. 16. 22:30

 

우리 회사 근처의 구내식당들은 매일 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 설치와 시행착오

참고

https://velog.io/@maseully_hoit/GPU-%EC%82%AC%EC%9A%A9-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-with-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. 글을 잘 읽자.

근데 나같은 사람은 글을 잘 읽어도 내가 꼭 삽질을 해봐야 깨닫는 게 있는 것 같다.