Giter Club home page Giter Club logo

koreanocr-for-web's Introduction

KoreanOCR-for-Web

AI_OCR for enhancement of accessibility about web's image resources.

Sources & References

(취소선은 미사용 소스)

Environment Setting


python == 3.7.x (conda virtual environment)
tensorflow == 2.3.0
pandas == latest ver
numpy == latest ver
cv2 == latest ver
cuda == 11.3.1
cudnn == cudnn for cuda 11


Structures

  • Document - README.md 에 쓰이는 이미지 리소스
  • Korean OCR - 학습데이터와 저장모델, 크롬드라이버 등 필수 구동요소가 들어있지만 일부는 push하지 않았다. (용량문제)
  • WebExample - 로컬 웹페이지 구현을 위한 코드와 리소스
  • Train.py - 학습 시작 지점
  • DatasetBuilder.py - AI Hub 가 제공하는 .json에서 한글 2350종류만 추출하여 정리한 .csv를 통해 학습을 위한 데이터셋 정보 생성
  • TrainCallback.py - 학습중 학습 현황 표시와 모델저장을 위한 콜백 클래스
  • Recognizer.py - 학습된 모델을 이용하여 추론하는 메서드를 담은 클래스
  • WebController.py - Selenium을 이용하는 웹 접근용 파일
  • WebControllerForLocal.py - Text Detection의 부재와 urlretrieve()의 로컬파일 다운 불가 문제로 로컬 .html에 대해 동작하는 별도의 파일
  • Model.py & Model.ipynb(test file) - CNN 모델 파일. .ipynb는 아래에 있는 현재 구성된 모델의 구성도를 만들기 위해 사용된 파일입니다. Failed to load

Processing sequence

Model Training

Composing Training Dataset

먼저 AI Hub 에서 가져온 syllable 데이터에서 현대한글 2350 자만을 사용하기 위해 .json 파일에서 2350자에 해당하는 메타데이터를 추출하여 .csv 에 정리합니다.
Train.py를 실행하면, 이 .csv를 통해 DatasetBuilder.py에서 학습 데이터셋의 정보를 배열에 담아 리턴합니다.

Training

가져온 데이터 정보로 학습을 시작합니다. 각 데이터는 상기한 모델 구조를 돌게 됩니다.
매 학습마다 TrainCallback.py를 keras 모듈이 콜백하여 학습 진행 현황 데이터를 넘겨줍니다.
학습률은 0.001, epoch는 10입니다.
10 epoch 를 돌며 가장 정확도가 크고 손실이 낮은 모델을 자동으로 \Korean OCR\saved_model 에 저장해둡니다.


Webpage Modifying

Opening Window Assigned to WebDriver

사용자가 WebDriver.exe(Chrome version) 에 의해 열린 창을 통해 인터넷 검색을 한다고 가정합니다.
WebController.py는 초기에는 해당 창을 띄우기만 할뿐, 특정 사이트에 자동으로 접속하거나 데이터를 긁어오지는 않습니다.
Selenium에서 드라이버를 연결한 후 input()에서 무한루프를 돌며 사용자의 응답을 기다립니다.

Replacing HTML Element

input()무한루프에서는 현재 기준 두 가지 명령어를 받습니다. [Enter]exit 입니다.
사용자가 엔터키를 누르게 되면 Selenium은 현재 페이지의 HTML을 가져와 이미지가 있는지 분석합니다.
이미지가 있다면 해당 이미지를 다운받아 가공하여 이미지 안의 글자를 텍스트 형태로 반환합니다.
페이지 소스에서 분석이 완료된 이미지 element를 지워 그 자리에 반환된 텍스트를 넣습니다.

  • Downloading images Failed to load Failed to load
  • Changed web's Failed to load

Result

잘 학습시켰음에도 학습된 데이터의 양이 너무 적은지, PPT에서 폰트로 글자를 찍어내면 잘 인식하지만 일반 웹상의 글자를 인식하지는 못한다.
글자 이코노미스트를 넣은 결과로 디크그디그크 처럼 모양을 다르게 하거나 소위 '야민정음' 처럼 한 두 획을 제하거나 더해야 나오는 모양의 글자로 인식이 되었다.
과적합은 아닌 것으로 보이는 것이, 10에포크만을 돌렸고 대략 8에포크 정도의 결과를 썼기 때문에 단순 데이터의 양과 종류가 부족했던 것으로 생각된다.
또한 Image Preprocessing -> Text Detection -> Text Recognizing 순으로 절차를 밟아야 하지만 Text Detection에 대한 이해가 너무 부족해 구현하지 못했다는 한계가 있다.
추후 더욱 많은 데이터셋을 학습시키고 Text Detection 기능을 추가한 뒤 폰트 속성을 약간 조정한다면 웹 번역을 서포트 할 수 있는 좋은 기능이 될 것이라 생각한다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.