글모음

Kriss 데이터 구축 프로그램 개발기 - 텍스트 추출 본문

프로젝트

Kriss 데이터 구축 프로그램 개발기 - 텍스트 추출

Nova_61 2021. 5. 27. 20:26
728x90
반응형

Kriss 데이터 구축 일을 하기 위해 만들었던 프로그램 중 하나.

프로그램 개발 기록을 다 남길 수 있으면 좋겠는데 제한적으로 포스팅이 가능해서 아쉽다..

 

< 텍스트 추출 프로그램 설명 >

텍스트 추출 기능은 텍스트를 복사할 때 문단이 이상하게 나뉘는 경우,

복사해서 붙여넣었을 때 변환이 이상해서 깨지는 경우에 사용하기 위해 만들었다.

 

 

트래픽

이건 찔끔 찔끔 내가 일하면서 나왔던 트래픽이다 ㅋㅋㅋ

 

 

이상하게 복사되는 텍스트

가끔 이런식으로 문단이 이상하게 넘어가는 경우에 유용하게 사용할 수 있다.

 

 

[ Google OCR API ]

TextExtract.py -> 텍스트 추출

 

TextExtract.py가 이미지를 텍스트로 추출하는 코드다.

Google API의 OCR 기능을 사용했는데, 구글 드라이브에서 이미지를 문서화한 뒤에 텍스트로 뽑아주는 기능에도 적용되는 기술이다.

 

 

이런 사진 text 추출에도 OCR 이 들어간다.

 

Google API 덕분에 OpenCV부터 글자 인식부터 인공지능 써서 학습시켜주지 않아도 되어서 다행이다^^

 

구글 드라이브에서 이미지를 텍스트로 추출하려면
1. 구글 드라이브 이미지 업로드 -> 2. 이미지 문서 변환 -> 3. 텍스트 추출
이렇게 이미지 하나하나 업로드해서 변환을 시켜줘야 하는데 번거롭고 변환시킨 문서들과 이미지들도 쌓인다.


나는 같은 방법이지만 프로그램 안에 이미지를 모으면 자동으로 업로드시키고,
OCR API 추출한 text가 내 컴퓨터에 바로 저장되도록 과정을 간소화시켰다.
(드라이브 내에 이미지가 쌓이지 않도록 삭제시키는것도 포함)

 

[ Google Cloud Platform 등록 ]

먼저 Google API를 사용하려면 Google Cloud Platform에 들어가 등록해줘야 된다.

https://console.cloud.google.com/apis/dashboard?hl=ko&project=kriss-301522&folder=&organizationId= 

 

Google Cloud Platform

하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.

accounts.google.com

Google Drive 기능을 쓰기 때문에 Google Drive API 사용 설정을 해줘야한다.

 

[ 인증받기(Auth) ]

API 등록해서 바로 쓸 수 있는 게 아니라 인증을 받아줘야 API를 사용할 수 있다.
텍스트 라벨링이나 자동 업로드 등 다른 기능들은 외부 API를 사용하지 않아서 번거로운 일은 없고

텍스트 추출 기능만 인증 과정이 필요하다.

 

1. 프로그램 실행 

2. Auth 허가

3. credential 발급

4. Google API 동작

5. 완료

 

Google API 사이트에서 프로젝트 등록을 해야 하고

credential을 받아서 프로젝트에 적용해한다.

드라이브 사용권한 받고

 

https://console.cloud.google.com/apis/dashboard?hl=ko&project=kriss-301522&folder=&organizationId= 

 

< Google API Auth >

https://developers.google.com/drive/api/v3/about-auth

auth 종류는 생각보다 다양하다.

 

<동작 방식>

https://developers.google.com/identity/protocols/oauth2

 

 

[ Google OAuth scope ]

Google OAuth scope를 설정해서 어느 정도까지 허가 권한을 허용할지도 설정해줘야 하는데 종류가 많다.

 

drive auth scope

이미지 업로드니까 드라이브 허가, 문서를 만들어 이미지에서 텍스트를 뽑아내는 거니까 문서 작성, 수정 삭제 권한도 줘야 할 것 같고 다 필요해 보여서 나중엔 허가만 5개 넘게 줬는데

그냥 구글 드라이브 'https://www.googleapis.com/auth/drive' 이 접근 권한 하나만 줘도 프로그램이 돌아갔다.

 

 

[ 사용자 권한 설정 ]

아직도 이해가 가지 않는 credential 파일 생성.

허가를 받고 credential 파일을 만들어야 Token을 받아 API를 돌릴 수 있다.

어쩔 때는 허가가 나고 어쩔 때는 실패했는데, 진짜 기준이 없어서 미치는 줄 알았다.

 

이건 TextExtract 기능을 쓸 때마다 Token을 발급받기 위해 매번 해줘야 하는 과정이다.

그냥 개발자 센터에서 추가한 계정 선택하고 계속 허용만 누르면 된다.

근데 마지막 허용까지 누르면 계속 로딩이 걸린다. ^^
여기서 그냥 두면 나중엔 페이지 열기 실패가 뜨는데, 이러면 허가 실패가 난 것. 이유는 모른다^^
저 오류 그대로 구글링 해봐도 해결책도 나오지도 않는다..

 

 

 

구글 credential 코드란 코드는 다 찾아봐서 바꿔보기도 하고 브라우저 종류도 사파리, 크롬, 오페라, 파이어폭스 별거 다 써보면서 이걸로 며칠 날밤을 새다가 우연히 알게 된 건데

나름의 꼼수로 1번째 창에서 허가를 받는다고 로딩이 걸릴 때 2번째 창을 열어 허가를 받으면 통과된다. 

(브라우저 종류는 상관없음)

 

Authentication Status 창이 나오면 credential.json 파일이 생성되고,

Google API를 사용할 수 있는 Token도 생성되면서 API가 돌아가고 이미지에서 글자를 뽑은 txt 파일이 생성된다.

참고로 Token은 몇 시간 동안만 유효하기 때문에 나중에 Text 추출 프로그램을 써야 할 일이 생기면 다시 허가 과정을 거쳐야 한다.

 

Auth는 혼자 쓰면 상관이 없는데 여러 명이 쓰면 어떤 식으로 해야 할지 생각 좀 해보겠다.

 

[ 사용 ]

사용하는 건 간단하다.

그냥 TextImg 폴더에 변환하고 싶은 이미지를 넣어주고 허가만 받으면 끝이고, 이미지 이름만 번호로 바꿔주는 것만 주의하면 된다.

TextImg 폴더

 

< 허가받기 >

클릭하면 계정 선택 창이 나오는데, 아무 계정이나 선택하면 안되고 앞에서 API 프로젝트를 설정했던 계정을 선택해야 한다.

 

* 주의

1번 창에서 허가받는다고 로딩이 걸릴 때 2번 창을 열어 허가를 진행해줘야 credential 파일이 만들어진다. (왜 그런지는 모름..)

한마디로 창 2개 열어서 동시에 권한 확인을 해주면 된다.

 

이런 창이 나오면 인증 성공.

 

< 결과 >

인증에 성공하면 즉시 이미지 파일 1번부터 text 파일로 만들기 시작한다.

추출된 텍스트는 이미지 번호. txt 파일 형식으로 저장된다.

결과

이미지가 1~2개가 아니라 20개나 30개라도 변환하는데 시간은 1분도 걸리지 않는다.

 

 

1번 이미지
2번 이미지

역시 Google API라서 그런지 정확도는 믿을만하다.

다만 스캔이 진짜 이상하거나, 사람도 읽기 힘든 필기체의 경우에는 조금 정확도가 떨어지는데 컴퓨터체라면 잘못되는 상황은 없다.

 

단락별로 끊어서 합친 뒤에 엑셀 파일로 내보내는 기능도 만들어볼까 생각했는데

실제로 작업을 할 때 논문의 일부분만 캡처해서 사용하는 경우가 많아서 필요가 없었다.

 

< 이용 제한 >

테스트 1명 ㅋㅋㅋ 바로 나다..

비공개 프로그램인 경우에 100명까지는 사용할 수 있다고 한다.

API 사용 요금이 있기는 한데 처리되는 이미지 개수로 측정한다. 

월 1,000개까지 무료. 그 이상부터는 비용을 지불해야 한다. 그냥 3000원 내면 마음편하게 사용가능 ㅋㅋㅋ

일단 나는 나 혼자 쓰는 거라 지금까지 지불을 해야 하는 경우는 없었다.

 

 

초대된 테스터 같은 경우에는 개발 환경만 세팅해서 바로 사용할 수 있는데 Kriss 측에서 뭐라 할지가 걸린다 ㅋㅋㅋ

나중에 물어봐야겠지만 이건 따지고 보면 그냥 Kriss 업무랑 전혀 상관없는, 단순하게 이미지에 있는 텍스트 추출 기능이기 때문에 상관없지 않을까 싶다.

728x90
반응형
Comments