"서랍"의 두 판 사이의 차이

cdc wiki
이동: 둘러보기, 검색
(광학 문자 인식(Optical Character Recognition, OCR))
(광학 문자 인식(Optical Character Recognition, OCR))
78번째 줄: 78번째 줄:
 
<p>전통적인 OCR 기술은 텍스트 라인을 찾는 모듈, 문자를 분할하는 모듈 등 세분된 모듈로 동작하였다. 또한, 서로 다른 패턴을 인식하는 특징(feature)은 개발자가 직접 설계해야 했으므로 문자의 폰트, 크기, 스타일에 따라 각각 다른 특징의 정의가 필요했으며, 특히 한글의 경우 자음과 모음의 조합까지 모두 고려해야 했다. 따라서 스캐너로 촬영한 고품질 이미지에서만 제한적으로 동작하였으므로 이미지의 품질의 영향을 많이 받았고, 사람이 직접 작성한 손글씨 문서의 인식률이 상대적으로 좋지 못했다.</p>
 
<p>전통적인 OCR 기술은 텍스트 라인을 찾는 모듈, 문자를 분할하는 모듈 등 세분된 모듈로 동작하였다. 또한, 서로 다른 패턴을 인식하는 특징(feature)은 개발자가 직접 설계해야 했으므로 문자의 폰트, 크기, 스타일에 따라 각각 다른 특징의 정의가 필요했으며, 특히 한글의 경우 자음과 모음의 조합까지 모두 고려해야 했다. 따라서 스캐너로 촬영한 고품질 이미지에서만 제한적으로 동작하였으므로 이미지의 품질의 영향을 많이 받았고, 사람이 직접 작성한 손글씨 문서의 인식률이 상대적으로 좋지 못했다.</p>
 
<p>딥러닝 기반 OCR 기술은 CNN(Convolutional Neural Network)을 이용하여 대량의 데이터 학습을 통해 이미지에서 텍스트를 인식하는 규칙(feature extraction)을 스스로 만들어 낸다. 이는 일반적으로 이미지에서 텍스트 영역을 검출하는 부분과 텍스트 영역 내 텍스트를 개별적으로 인식하는 부분으로 이루어진다.</p>
 
<p>딥러닝 기반 OCR 기술은 CNN(Convolutional Neural Network)을 이용하여 대량의 데이터 학습을 통해 이미지에서 텍스트를 인식하는 규칙(feature extraction)을 스스로 만들어 낸다. 이는 일반적으로 이미지에서 텍스트 영역을 검출하는 부분과 텍스트 영역 내 텍스트를 개별적으로 인식하는 부분으로 이루어진다.</p>
<br>
 
 
<br>
 
<br>
  

2021년 6월 14일 (월) 08:06 판

프로젝트 개요

기술개발 과제

국문 : 독서 모임 모바일 어플리케이션

영문 : Mobile Application for Book Club

과제 팀명

서랍

지도교수

유하진 교수님

개발기간

2021년 3월 ~ 2021년 6월 (총 4개월)

구성원 소개

서울시립대학교 컴퓨터과학부 20189200** 유*리(팀장)

서울시립대학교 컴퓨터과학부 20169200** 신*선

서울시립대학교 컴퓨터과학부 20169200** 이*인

서울시립대학교 컴퓨터과학부 20189200** 정*희

서론

개발 과제의 개요

개발 과제 요약

◇ 비대면/대면 독서 모임의 효과적인 운영을 위한 모바일 모임 애플리케이션
◇ OCR을 통해 사진에서 텍스트를 추출해 책의 내용을 공유하는 기능 제공
◇ 독서 모임의 자료를 관리하는 게시판과 앨범을 제공하고 독서 모임 참여를 독려하기 위한 독서 진행 상황 공유, 일정 기능 제공


개발 과제의 배경

서랍독서실태조사.PNG

◇ 문화체육관광부와 통계청의 조사에 따르면 성인 독서 인구는 2013년 이후 계속 감소하는 추세였다(출처: 2019국민독서실태조사). 하지만 2021년 현재, 코로나19로 인해 실내 활동을 할 시간이 증가하면서 사람들의 책에 대한 관심이 높아지고 있다. 책을 읽고 토의를 진행하는 비대면/소규모 독서 모임의 수요도 증가해 독서 모임을 효과적으로 관리하는 것의 중요성 또한 대두되고 있다.

◇ 위의 이유와 함께, 실제 독서 모임을 운영하며 카카오톡 단톡방과 네이버 밴드를 이용했을 때 불편한 경험이 존재했다. 카카오톡 단톡방으로 독서 모임을 운영했을 때, 모임원들의 책 진행 상황이나 모임 시간, 모임 장소들이 대화에 휩쓸려서 모임이 제대로 진행되지 못했던 경험이 많았다. 토의 주제 같은 중요한 내용도 제대로 정리되지 못해 사용에 불편함이 존재했다. 네이버 밴드나 노션 등 다른 프로그램을 이용해 모임의 기록을 정리할 경우, 일정 관리 기능보다는 독서 모임 기록지처럼 사용하게 되어 나중에는 회원들이 글을 읽지 않는 경우도 있었다.

◇ 책에서 원하는 부분을 찍어 올리거나, 전자책 앱 내 캡처 사진으로 공유 시 사진들이 쌓여서 어느 책에서 발췌한 것인지 확인하지 못하는 경우가 발생했다.

◇ 다른 독서 관련 앱의 경우 '인스타그램' 형식으로 책 사진을 공유하고 글을 작성해 볼 수 있게 하는 기능이 주 기능이었기 때문에 모임 운영에는 맞지 않았다. 또한 오프라인 모임이 기준이 되는 경우가 많아 비대면으로 토의한 내용을 정리하고 공유하는 데에는 어려움이 있었다.

◇ 위와 같은 사용자의 불편함을 해소하고, 다른 앱과는 차별화된 기능을 제공하기 위해 '독서 모임 어플리케이션’을 제작하고자 한다.


개발 과제의 목표 및 내용

서랍개념목표.png

◇ 독서 모임의 자료를 공유
- 게시판을 통해 독서 모임 회의록, 토의 자료 등을 공유할 수 있도록 한다.
- 앨범을 통해 회의 사진, 감명 깊은 책 구절 사진 등을 공유할 수 있도록 한다.

◇ OCR 기능을 이용한 책의 내용 활용
- 감명 깊은 책 구절을 사진을 통해서만 공유하지 않고, OCR을 이용해 텍스트를 추출해 에세이를 작성함으로 사용자들의 의견 교환을 효과적으로 이루어질 수 있도록 한다.
- 기존 OCR API(Google Vision API)를 통해 추출한 텍스트를 맞춤법 검사, 줄 바꿈 수정 등의 후처리를 통해 사용자가 더 편리하게 어플을 이용할 수 있도록 한다.

◇ 독서 진행 상황 공유 기능을 통한 모임원 동기 부여
- 모임원 전체가 볼 수 있는 독서 진행 상황 공유 기능을 제공한다.
- 모임원이 현재의 독서 상황을 기록하여 편리한 독서 생활을 가능하게 한다.

◇ 독서 모임 내 편의 기능 제공
- 일정 기능을 통해 대면 모임의 시간과 장소 등을 공유한다.
- 도서 API를 통한 검색, 추천 시스템으로 진행할 책을 선정하는데 도움을 준다.


관련 기술의 현황

State of art

모바일 애플리케이션 개발

모바일 애플리케이션 개발의 경우 크게 아래와 같은 4가지 종류로 구분되어 개발을 진행할 수 있다.

◇ 네이티브 앱(Native App): 안드로이드 소프트웨어 개발 키트를 이용해 JAVA로 개발하거나, iOS 운영체제의 소프트웨어 개발 키트를 이용해 Swift로 개발하여 모바일 기기에 최적화시킨 앱. 기기의 고유 정보에 직접적 접근이 가능하다.
◇ 모바일 앱(Mobile App): PC에서 볼 수 있는 웹 등을 모바일 기기에 보기 쉽도록 사이즈를 맞게 변경한 웹사이트.
◇ 모바일 웹앱(Mobile WebApp): 모바일 앱과 비슷하나, 웹보다 모바일에 대해 최적화된 앱.
◇ 하이브리드 앱(Hybrid App): 모바일 웹과 모바일 웹앱의 단점을 보완한 것. 네이티브 앱과 비교하였을 때는 성능이 떨어지는 단점이 있다.
React(웹 프레임워크)

JavaScript 라이브러리의 하나로, 사용자 인터페이스(UI)를 만들 수 있다. 페이스북과 개별 개발자 및 기업들 공동체에 의해 유지 보수되며, 싱글 페이지 애플리케이션, 모바일 애플리케이션 개발에 사용된다.

광학 문자 인식(Optical Character Recognition, OCR)

광학 문자 인식(Optical Character Recognition, OCR)이란 사람이 쓰거나 기계로 인쇄한 문자의 영상을 이미지 스캐너로 획득하여 기계가 읽을 수 있는 문자로 변환하는 것이다.

전통적인 OCR 기술은 텍스트 라인을 찾는 모듈, 문자를 분할하는 모듈 등 세분된 모듈로 동작하였다. 또한, 서로 다른 패턴을 인식하는 특징(feature)은 개발자가 직접 설계해야 했으므로 문자의 폰트, 크기, 스타일에 따라 각각 다른 특징의 정의가 필요했으며, 특히 한글의 경우 자음과 모음의 조합까지 모두 고려해야 했다. 따라서 스캐너로 촬영한 고품질 이미지에서만 제한적으로 동작하였으므로 이미지의 품질의 영향을 많이 받았고, 사람이 직접 작성한 손글씨 문서의 인식률이 상대적으로 좋지 못했다.

딥러닝 기반 OCR 기술은 CNN(Convolutional Neural Network)을 이용하여 대량의 데이터 학습을 통해 이미지에서 텍스트를 인식하는 규칙(feature extraction)을 스스로 만들어 낸다. 이는 일반적으로 이미지에서 텍스트 영역을 검출하는 부분과 텍스트 영역 내 텍스트를 개별적으로 인식하는 부분으로 이루어진다.


기술 로드맵

서랍기술로드맵.png

◇ React Native
리액트 네이티브(React Native)는 페이스북이 개발한 오픈 소스 모바일 애플리케이션 프레임워크로, 안드로이드, iOS, 웹, UWP용 애플리케이션을 개발하기 위해 사용되며 개발자들이 네이티브 플랫폼 기능과 더불어 리액트를 사용할 수 있게 한다.

◇ Firebase
React Native를 이용한 앱 개발을 진행할 때, Firebase로 애플리케이션 상태를 동기화하고 React Native로 상태 변경을 통한 애플리케이션 UI 플로우를 진행하는 것이 이상적인 앱 개발의 조합이다.

◇ 사용 API
- Google Vision API
구글에서 제공하는 오픈 소스 서비스로, 한국어를 포함한 다양한 언어를 제공한다. 요청과 응답에 JSON을 사용하는 REST API로도 제공되고, C#, Go, JAVA, Node.js, PHP, Python, Ruby에서 사용할 수 있는 클라이언트 라이브러리로도 제공된다.
- 알라딘 Open API
알라딘 검색 결과를 XML, JSON 형태로 출력해주며, 제목, 도서 상세 URL, ISBN, 상품설명, 도서 출간일, 상품 가격, 표지 이미지, 카테고리, 출판사, 고객 평점을 출력한다.


특허조사 및 특허 전략 분석

◇ 독서 모임 추천 방법 및 장치(Method for recommending book club and apparatus thereof) / 출원번호: 1021149130000

복수 개의 독서 모임을 데이터베이스에 저장, 상기 독서 모임에 가입된 개별 회원들의 독서 성향 및 개인정보들을 결합하여 해당 독서 모임 고유의 특성 정보를 생성한다. 이후 사용자의 도서 추천 정보와 같은 선택 정보를 입력받아 데이터베이스 내 정보와 비교, 독서 모임 추천 후보를 생성, 제공한다. 해당 추천 방법은 컴퓨터에서 실행시킬 수 있도록 프로그램상으로 구현된다.

◇ 촬영 이미지 기반의 문자 인식 장치 및 방법(APPARUS AND METHOD FOR CHARACTER RECOGNITION BASED ON PHOTOGRAPH IMAGE) / 출원번호: 1020110133502

입력 이미지 내에서 이미지 분석을 위한 관심 영역을 선택하고, 선택된 관심 영역을 분석하여 상기 입력 이미지의 종류를 판단한다. 판단 결과 입력 이미지가 디스플레이 화면을 촬영한 디스플레이 화면 이미지인 경우, 입력 이미지에 디스플레이 화면 내 문자 영역과 배경 영역을 구분하기 위한 이미지 효과를 적용한 후 이미지 효과가 적용된 입력 이미지를 이진화하고, 이진화된 입력 이미지로부터 문자를 인식한다.

◇ 최적 문자 인식을 위한 모바일 문서 획득 지원(MOBILE DOCUMENT CAPTURE ASSIST FOR OPTIMIZED TEXT RECOGNITION) / 출원번호: 1020140099844

모바일 기기에 문자 영상을 개선하기 위한 시각적 정보를 제공하는 방법으로, 모바일 기기로 획득되는 영상의 정확한 광학 문자 인식 (OCR)을 위하여 최소 문자 크기를 결정하는 단계, 인쇄체의 영상 스트림을 수신하는 단계, 영상 스트림과 영상 스트림에 중첩되는 시각적 정보(최소 문자 크기)를 표시하는 단계로 구성된다. 또한, 상기 방법은 영상 스트림에 표시되는 문자가 적어도 최소 문자 크기일 때 모바일 기기 사용자에게 통지하는 단계를 포함한다.

시장상황에 대한 분석

  • 경쟁제품 조사 비교

서랍북플.png

서랍리더스.png

  • 마케팅 전략 제시

서랍swot.png

개발과제의 기대효과

기술적 기대효과

◇ 크로스 플랫폼 앱 개발을 이용한 개발 비용 및 시간 절감
◇ 모바일 중심 개발을 통해 독서 모임 커뮤니티 이용자들의 편의성 및 접근성 확대
◇ OCR 기술을 활용한 독서 모임 참여자 간 의견 공유 및 소통의 편리성 증진

경제적, 사회적 기대 및 파급효과

◇ 2013년 이후 계속 감소하는 성인 독서인구의 독서 의지 고취 및 독서 모임의 효과적 관리
◇ 코로나 19의 확산으로 인해 제한적으로 운영되는 대면 모임을 보완 및 대체하는 비대면 모임 플랫폼으로의 확장


기술개발 일정 및 추진체계

개발 일정

서랍개발일정.png

구성원 및 추진체계

◇ 유*리 (팀장)

- OCR 후처리 API 및 책 추천(둘러보기) API 제작
- 앱 로고 및 아이콘 디자인
- 클라이언트 개발

◇ 신*선

- 지원금 관리
- 데이터베이스 및 클라이언트 개발

◇ 이다인

- 보고서 등 문서 작성
- 클라이언트 개발

◇ 정우희

- UI 디자인 및 구현
- 클라이언트 개발

설계

설계사양

제품의 요구사항

서랍요구사항.png

설계 사양

서랍기능요구.png

개념설계안

서랍개념설계안.png

◇ OCR 기술을 이용한 에세이 작성
: 사용자가 지정한 사진을 Google Vision API의 OCR 기술을 이용해 텍스트를 추출한다. 추출한 텍스트를 맞춤법 검사 등의 후처리를 진행하고, 사용자가 텍스트를 이용해 에세이를 작성할 수 있도록 한다.
◇ 진행상황 공유 기능
: 모임장은 메인(진행상황 확인)화면에서 책을 등록할 수 있다. 사용자는 독서 진행상황을 체크하고 다른 사용자와 공유할 수 있다. 이를 통해 사용자의 참여를 독려하고 모임의 활성화를 도모한다.


이론적 계산 및 시뮬레이션

OCR 추출 API 및 텍스트 후처리

에세이 게시판에서 사용하는 OCR 기능을 사용하고 추출한 텍스트를 후처리를 통해 사용자가 사용하기 쉽게 만들기 위해 API를 구현하고 이를 배포, 적용했다. 텍스트 후처리의 경우, 줄 바꿈이 문장 기준으로 일어날 수 있도록 하고, 맞춤법 검사를 통해 오류를 검출할 수 있도록 했다.

◇ API 내부 원리
- Flask 웹 서버 사용
- 한글: py-hanspell이라는 네이버 맞춤법 교정기 기반 라이브러리 사용
 ① 보통 책 한 페이지 기준 인식하는 글자수가 1000자가 되기 어려우므로, 500자 기준으로 한 번 끊어서 인식할 수 있도록 500자 제한을 둠
 ② 각각의 맞춤법 검사 실행
- 영문: Python 기본 함수 사용
 ① 단어 중간에 줄 바꿈이 일어나지 않도록 수정

POSTMAN 테스트 결과
- 국문
서랍포스트맨한글.png
- 영문
서랍포스트맨영문.png

앱에 API를 적용한 스크린샷 (에세이 작성)
서랍에세이실험.png

Content-based filtering 책 둘러보기(추천) 시스템

앱의 특성 상 user와 item 간의 관계를 분석하기 어려우므로, 제한적이지만 content 자체의 feature을 이용하는 Content-based filtering 방법을 사용했다. 데이터는 YES24 같은 온라인 서점 사이트에서 크롤링 후 전처리를 통해 도출했고, API로 구현해 배포, 앱에 적용했다.

상세설계 내용

소프트웨어 설계

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

내용

포스터

서랍포스터1.png 서랍포스터2.png

서랍포스터3.png 서랍포스터4.png

관련사업비 내역서

서랍내역서.png

완료작품의 평가

서랍평가.png

향후계획

어려웠던 내용들

◇ 초창기 기휙 단계에서, 다른 주제(OCR을 이용한 스크린샷 관리 어플리케이션)로 완전한 네이티브 앱을 제작하기로 했으나 핵심 기능 구현에 한계가 존재했기 때문에 주제를 변경했다.

◇ 커뮤니티 앱 특성 상 구현해야 할 화면과 기능이 생각 이상으로 많았다. 기획하면서 기능들이 늘어나서, 초창기 계획보다 앱의 규모가 커져 어려운 점이 많았다. 특히, 초반 설계에서 구조적 변경사항이 있었기 때문에 푸시알림 등의 기능을 추가하기 어려웠다.

◇ React Native, Javascript가 생소했다. 특히 React Native에 관한 국문 자료가 많지 않아 참고할 예제가 부족했다.

◇ React Native 내비게이션 구조가 기존의 웹 페이지와는 다른 개념이라, 내비게이션을 통해 컴포넌트와 페이지 간에 변수(데이터)를 주고받는 통신 구조를 이해하는 것이 어려웠다.

◇ NoSQL 사용 경험이 없었기 때문에, 안정성과 데이터 신뢰성을 지키기 위해 DB(트랜잭션)를 디자인하고 설계하는 것이 생소해 어려움이 있었다.

◇ OCR 후처리 기능, 책 추천(둘러보기) 기능을 API 형식으로 구현해 배포할 때 어려움이 있었다. 배포 경험이 없어 플랫폼 선택이나 배포 도중, 이후 발생하는 문제점을 해결하는 데 많은 시간이 소요됐다.

◇ OCR 후처리 API를 설계할 때, 한글 텍스트를 처리하기 위한 목적에 맞는 라이브러리를 찾기 어려웠고, 결국 맞춤법 검사기를 활용해 API를 구현했다.

차후 구현할 내용

◇ 기존에 계획했던 동적 푸시 알림 기능 구현 (일정 생성 등)

◇ 누적된 클럽별 데이터를 이용해 실제로 유저에게 맞는 책을 추천하는 알고리즘 구현

◇ 기본적으로 제공하는 게시판, 앨범, 에세이를 제외한 유저 커스텀 게시판 기능

◇ 추후 OCR API 이용 요금의 발생을 대비해 프리미엄 회원 기능을 추가해 유료 구독을 받아 이익을 얻을 수 있도록 구현

서랍요금제.png

◇ 서점과 연계해 책 둘러보기나 책 검색 페이지에서 구매 페이지로 이동하는 기능
- 서점에 일정량 로열티를 받아 이익을 얻을 수 있도록 구현