ocr 여러가지 테스트 중~
1. Tesseract
2024.07.07 - [Study/비전] - [OCR] 광학 문자 인식 기술 (1)
2. Easy OCR
https://github.com/JaidedAI/EasyOCR?tab=readme-ov-file
OCR은 detection - recognition 단계로 진행되는데
현재 default로 이용하면 detection model로 네이버 클로바의 'CRAFT'를 이용하고,
recognition model로 알고리즘 : CRNN (feature extractor: ResNet + sequence labeling: LSTM + decoder: CTC)을 이용한다.
위 사진에서 회색 박스를 보면 아래에 'Other Detection Models'라고 쓰여 있는데 성능이 더 좋은 다른 모델(이 있다면)을 쉽게 적용할 수 있다는 장점이 있다.
사용법도 tesseract와 같이 완전 쉽다.
1) pip install easyocr 로 설치하고
(이렇게 하면 알아서 필요한 다른 package - ex. torchvision같은거 알아서 다 설치됨)
2) Reader class를 불러온다. (언어는 'ko,eng' : 원하는 언어로 입력)
앞서 pytesseract 실험 하면서 가상환경 파고 opencv모듈 설치할 때 알아서 numpy2.0.0이 설치됐는데 (2024 7월 기준 제일 최신에 막 나왔던 버전)
현재 easyocr api를 동작시키기 위해서는 numpy version을 1.x.x대로 downgrade 해줘야 한다.
detection단에서 이뤄지는 bbox와 confidence level까지 함께 출력할 수도 있고,
그냥 recognition된 text 결과만 뽑을 수도 있다. (detail=0이라는 parameter 추가 )
참고로, easyOCR Reader 클래스 파라미터 종류에 대한 설명은 여기서 확인할 수 있다.
아무튼 text result만 보면
['2024 BITAmin 겨운 연합프로적트 시계엽 1조', 'Netflix Stock Price Prediction', 'with', 'News Topic & Sentiment', '시계열 1조', '12기1 ***', '12기1 ***', '12기1 ***', '13기1 ***', '13기1 ***']
요렇게 리스트 형식으로 출력된다. 지난번 tesseract는 줄바꿈으로 출력됐는데 이번에는 각 bbox마다 쉼표로 구분해서 출력되는 것 같다.
- detection error : 없음
- recognition error : 겨울 > 겨운 / 시계열 > 시계엽 / (이름 조금 오류)
위 recognition 오류 사유는 글씨가 작아서 그런듯
지난번과 동일하게 12페이지를 한 번 더 인식해보겠다.
text result는 아래와 같다.
['2024 BITAmin 겨운 연합프로적트 시계염 1조', '02. DATA PREPROCESING', '2.2 Add indecators', 'TA(Technical Analysis) Library', ' 금움 시계열 데이터 세트(시가; 마감, 고가; 저가 거래량)에 대한 기술 분석 라이브러리', '변동성', '거래량', '주세', '지표(26)', '지 표(19)', '지표(43)', '모멘럼', '기타', '지표(29)', '지표(6)', 'Technical Analysis Libraryin', 'Python']
- detection error : 없음
- recognition error : 겨울 > 겨운 / 시계열 > 시계엽 / 모멘텀 > 모멘럼
pytersseract와 비교했을 때 텍스트 detection error가 없었다. easyOCR의 default detection model인 CRAFT의 성능이 좋았던 것 같다.
다만, 지난번보다 detection 단계에서 bbox가 더 작고, 섬세한 범위로 설정되다 보니
변동성 지표 (26) 으로 인식되는게 아니라 '변동성' 따로 , 다른 단어들 인식 후, '지표(26)'을 따로 인식함을 확인할 수 있었다. 사실 이 부분은 자연어처리로도 처리하기 힘든 부분이라 어떻게 해야할지 고민을 좀 해봐야 할 것 같다.
(detection 단계에서 해당 부분에 대해서 미세조정이 가능한지 등..)
확실히 개선의 여지가 보이는 부분은 (아직 다른 페이지들을 안해보긴 했지만)
지난번에 아예 인식하지 못한 단어 '모멘텀'과 같은 전문 용어를 거의 인식해냈다는 것이다.
confidence level 확인해보니 해당 단어에서 가장 낮은 수치 (0.1)을 보이긴 했다.
3. Paddle OCR
https://github.com/PaddlePaddle/PaddleOCR
얘도 오픈소스, multilingual, 중국 바이두가 만든 딥러닝 플랫폼 PaddlePaddle로 구현된 ocr이라고 한다.
깃허브 리드미에 한국어 인식 예시도 나와있는데 저 노래 고른게 신기함
일단 다른 기능들은 나중에 더 실험해 보기로 하고, 지금은 위에와 같이 간단하게 PoC를 위한
pdf의 p.1, p.12를 인식해보기로!
1) pip install paddlepaddle, pip install paddleocr 로 설치하고
(만약 gpu 이용시 paddlepaddle-gpu)
2) PaddleOCR class를 불러온다.
result에는 모든 detection 결과에 대한 bbox coordinates, recognition을 거친 text, confidence lvl이 출력된다. (list 형식)
위와 같이 result[0][0]으로 제한하여 출력하면 paddle OCR이 감지한 첫번째 bbox의 결과가 아래와 같은 format으로 출력된다.
[[[23.0, 22.0], [58.0, 22.0], [58.0, 38.0], [23.0, 38.0]], ('2024', 0.9998788833618164)]
앗 2024만 출력되는걸 보아하니, 이거는 detection bbox resolution (섬세한 정도) 가 더 높다.
tesseract, easyocr 둘다 그래도 첫 bbox는 ' 2024 BITAmin 겨운 연합프로적트 시계염 1조' 로 한 번에 잡았는데 말이당...
text 결과만 쭉 뽑아보겠다. 1p에서는 총 26개의 bbox로 detection이 되엇다고 나온다.
- detection error : 없음
- recognition error : 없음
wow~
p.12 출력 결과
- detection error :
- recognition error :
음.. 막 error가 있다기 보다는 너무 bbox resolution이 높다보니 너무 bbox (41개)가 많이 출력되고, 괄호 같은 기호 부분들이 많이 빠져있다.
이 경우에는 후처리가 어려울 수도 있겠다..라는 생각이 들었다.. ㅠ
4. Pororo
https://github.com/kakaobrain/pororo
pororo는 자연어처리와 관련된 다양한 기능을 제공하지만 그 중에서도 ocr을 간단하게 처리할 수 있도록 만든 pororo ocr이 있다.
Pororo도 EasyOCR과 text detection model & text recognition model 구조가 동일하다고 한다.
원래 pip install pororo를 통해서 pororo ocr 을 실행시킬 수 있지만, ocr 이외의 다양한 nlp task들을 수행하기 위해 설치되는 모듈이 정말 많으므로 불필요하게 나의 소중한 가상환경이 더러워질 수 있다.
따라서 이 글을 작성하신 분께서 편하게 ocr만 불러올 수 있도록 깃헙 소스룰 만들어 놓으셔서, 나는 요 깃헙을 클론해서 실험해볼 것이다.
앗
그런데 torchvision version 문제 발생
troubleshooting 미룰게요
5. Naver Clova
api 직접 호출해보기 전에 데모로 확인해보기
사실 y축 좌표 같은거끼리 나열하는게 1페이지 같이 도식이 없는 경우에는 좋지만,
위 페이지처럼 도식이 들어가 있는 경우에는 너무 훌륭하게 잘 나열하는 나머지
순서가 뒤죽박죽이 된다는 것이다...
이렇게 인식해둬도 우리 프로젝트 차원에서 괜찮은지는 회의를 통해서 결정해야 할 것 같다....
(저 정보를 정확히 활용할 필요가 없고, 주어진 글씨들만 정확히 인식 : Recognition 만 중요하다면 오히려 clova api가 활용도 쉽고, 한글의 정확한 인식에 매우 용이할 것 같기 때문이다!!)
하이고
이게 블로그까지 같이 쓰려다보니 시간이 오래걸림 ㅋㅋ
구체적으로 지표 뽑고 pdf 파일 전체에 대한 성능 비교는 다음주 중에 진행해보겠습니다 ㅎㅅㅎ
'Study > 비전' 카테고리의 다른 글
[OCR] 광학 문자 인식 기술 (1) (2) | 2024.07.07 |
---|---|
[Object Detection] R-CNN (0) | 2024.03.26 |
CV Tasks에 대하여 (2) | 2024.03.14 |