이번 글에서는 Amazon Linux(AMI) 및 Python에서 Tesseract-ocr을 설치하고 사용하는 법을 알아본다.


먼저 Tesseract-ocr 이란 무엇인가부터 보자.

간단하게, 이미지에서 문자를 추출하기 위한 ocr 기술을 오픈소스로 제공하는 도구로 보면 된다.


사실 이것과 관련해서는 이 블로그 외에도 다른 블로그에도 상당히 많은 자료가 있어서 금방 찾기가 쉽다.

하지만, Amazon Linux AMI 및 Python 2.7 기반에서 설치 및 사용하는 부분은 문서 하나로 정리되어 있지 않고 여러 문서를 통해서 나타나 있어서

이를 하나로 정리하고자 포스팅을 올려본다.


개발 환경

OS: Amazon Linux AMI

python: 2.7

tesseract-ocr: 3.04



1. tesseract-ocr 설치 및 실행

Amazon Linux에서의 tesseract-ocr 설치는 다음 문서를 기반으로 한다.

https://gist.github.com/IaroslavR/834066ba4c0e25a27078

물론 OS가 다르다면 다른 블로그 및 tesseract-ocr 설치 문서에 의거해서 설치가 가능하지만,

Amazon Linux AMI는 해당 문서대로 설치해도 설치가 실제로 잘 안된다.

그러므로 위 링크에 있는 문서를 기반으로 하게 되었다.


다만 위 문서대로 100% 할 수는 없다. 

왜냐하면 우리는 한국어 버전을 설치하고 사용해야 하기 때문에, 코드도 이에 맞게 변형이 필요하다.

이에 따라 위 문서를 기반으로 코드를 수정하면 다음과 같다.


# 기본 프로그램 설치
sudo yum install autoconf aclocal automake
sudo yum install libtool
sudo yum install libjpeg-devel libpng-devel libtiff-devel zlib-devel

# Leptonica 설치 - 이미지 처리 분석을 위한 도구

cd ~/downloads
wget http://www.leptonica.com/source/leptonica-1.72.tar.gz
tar -zxvf leptonica-1.72.tar.gz
cd leptonica-1.72
./configure
make
sudo make install
cd ..

# Tesseract-ocr 3.04 설치

# 주의점: c++이 설치되어있지 않으면 설치가 안된다. 
# 만약 설치가 안되어있다면 sudo yum install gcc-c++ 을 실행해서 설치한다.

wget https://github.com/tesseract-ocr/tesseract/archive/3.04.00.tar.gz

tar -zxvf 3.04.00.tar.gz
cd tesseract-3.04.00/
./autogen.sh
./configure
make
sudo make install
sudo ldconfig

# 언어 팩을 다운받고 추가하는 부분을 아래에서 진행한다.

cd /usr/local/share/tessdata
# 원문 문서에서는 해당 경로가 아닌 다른 경로에서 다운받도록 되어있으나, 3.04 파일이 아니므로 아래 링크에서 받아야 한다.

# 만약 다운을 받았는데 용량이 너무 적게 나타나면, 제대로 다운로드가 안된것이니 참고하도록 한다.

sudo wget https://github.com/tesseract-ocr/tessdata/tree/3.04.00/eng.traineddata
sudo wget https://github.com/tesseract-ocr/tessdata/tree/3.04.00/kor.traineddata
export TESSDATA_PREFIX=/usr/local/share/

# 최적화에 사용되는 파일이다. 이것은 받아두도록 한다.
sudo wget hhttp://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.01.osd.tar.gz
sudo tar xvf tesseract-ocr-3.01.osd.tar.gz
sudo mv tesseract-ocr/tessdata/* .
sudo rm tesseract-ocr-3.01.osd.tar.gz

nano ~/.bash_profile
# Copy this line to the end: export TESSDATA_PREFIX=/usr/local/share/
# Verify:
tesseract --list-langs



여기까지만 하면 설치 완료. 테스트를 해보도록 한다.

테스트를 위해서 아무 문서나 막 퍼오면 안되므로, 공정거래법 조항 일부를 이미지로 저장해보도록 한다.



이제 한번 실행해보도록 한다.


~/$ tesseract test.png ./out_kor -l kor hocr
Tesseract Open Source OCR Engine v3.04.00 with Leptonica


여기서 파라미터를 보자.

test.png: 이미지파일

out_kor: 텍스트파일, out_kor.txt로 생성된다.

-l kor: language를 한국어(kor)로 한다.

hocr: 이건 사실 안붙여도 된다. 결과값을 XML로 받아볼 때 쓰는 파라미터로, out_kor.hocr 파일이 추가 생성된다.


이제 한번 결과를 보도록 한다.



제1징 충직
제1조(독적) 미 킵톨 시밉저익 시짐저쎄직저뮈익 님욤피 과도한 결재릭익 짐중들 말저히고「 부딥한곰돔뱉뮈 및 믈곰짐거레뱉뮈쿨 규재히며 곰절히고 저뮤로문 결젤들 촉 같으로써 칠익직민 기밉팥돔들 조

제츠조썹의) 미 밑에서 시욤히는 욤머익 짐익는 다믈피 같다 <개절 `딘므2 `2 핀′ 잿딘므듭 `2 3[| ′ 잿므므므 2 5 ′ 2[|미 ` 내 ′ 2띤띤4 `2 어 ′2[|띤7 4 27 ′ 2딘[|7 된 3 ′ 2미7 4 내 ′ 2미7 m 읽 >
` 쩨밉쟈맙 말든 재조밉「 서비스밉「 기다시밉들 미 }는 저들 말한다 시밉저익 미믹들 무 햐뱉뮈쿨 흡 밈뮌 좁밉뮌 대리인 기다익 저는 시밉저한체에 관한 규절익 직욤에 있어서는 미룰 시밉저로 튼다
`익2 에주회샤맙 말릴 ×식(붉홍들 쪼힙한다 미바같다뵙 소뮤쿨 톰히며 극내회시익 시밉내욤들 저쎄바는 것들 주된 시밉으로 허는 회시로서 저 솝긔미 다쇼톨효렬미 접히는 굳맥미심민 회시쿨 렬한다
잿익딘 셈저회시셈긴흔 펫주회시에 익히며 돠쇼롤효렬미 접히는 기준에 따리 그 시밉내욤들 저쎄말는 극내회시쿨 말한다
`익4 "손 텃샤한 저회시에 익히며 다쇼롤효렬으로 접히는 기준에 따리시밉내욤들 저쎄말는 극내회시쿨 말한다
2 미밉짐」 미리 말든 돔말민미 다들 칵독익 구쿤에 따리다쇼롤효렬미 접히는 기준에 익히며 시실십 그 시밉내욤들 저쎄히는 회시익 짐한들
기 돔말민미 회시민 결무그 돔말민피그 돔말민미 저배늘 」 히다미십익 회시익 징한
다 돔말민미 회시기미닌 결무 그 돔말민미 저쎄히는 2미심익 회시익 징한
3 에멸회샤맙 말든 2미십익 회시기돔말한기밉짐한에 속하는 결무에 미돌 회시는 서로 심대말익 계멸회시리 한다
3익2 에멸줄쟈틴 기밉짐한 소속 회시기 계멸회시익 주식들 취득 또는 소뮤히는 뱉뮈쿨 }
딘익딘 에멸줄저회 린 계멸줄저쿨 톱히며 튼 계열 법 주식들 또는 소뮤히는 계멸회시쿨 말한다
3익4 에멸줄저대뺄뵈샤틴 계멸줄저쿨 뺄바며 계멸줄저회시기 쉐득 또는 소뮤히는 계멸회시 주식들 말뱉한 계멸회시쿨 말한다
딘익드 }줄저”린 크게 미십익 계멸줄저로 민결된 계멸회시모두기계멸줄저회시 및 계멸줄저대심회시기 되는 계멸줄저 핀계쿨 말한다
딘익듭 〉줄저회시짐한"미린 기밉짐한 소 회시중 순흰줄저핀계에 있는 계 법 짐한들 말한다
3익7 재무보즐떼린 기밉짐한에 속바는 회시기다믈 칵 독인 어느 히다에 레딥바는 극내굳튤기핀익 며신피핀킥히며 극내계멸회시에 대히며 뱉히는 보즐 말한다



보다시피, 100% 만족하는 결과가 나오지는 못하였다.

하지만 그래도 어느 정도의 인식은 가능하다는 것을 증명할 수 있다.

해당 부분의 정확도를 높이기 위한 부분은 추후 테스트를 통해서 세부적으로 다룰 예정이다.



2. python에서의 설치 및 실행 (pytesseract)

Python 2.7에서는 pytesseract 를 설치하여 구현이 가능하다.

물론 Tesseract가 사전에 설치가 되어 있어야 한다.

그러므로 설치한다.



~/$ pip install opencv-python
~/$ pip install pytesseract

이렇게 두개를 설치하면 된다.

테스트 코드도 다음과 같이 짜본다.



import cv2
import PIL
import pytesseract

img_path = 'test.png'
img = cv2.imread(img_path,cv2.IMREAD_COLOR)
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img2 = PIL.Image.fromarray(img2)
txt = pytesseract.image_to_string(img2, lang='kor')
print(txt)



1. test.png를 img_path 이름으로 한다.

2. img 변수에 cv2.imread를 이용해서 이미지를 실제로 불러온다.

3. img2 변수에 Grayscale(흑백) 으로 변환을 시킨다.

4. 이미지 처리 및 핸들링을 위해서 PIL Image를 사용한다. (다만 위 예제에서는 이를 직접적으로 활용하지는 않는다, 세부적으로 다룰 때 사용할 것으로 보인다)

5. pytesseract를 사용하여 이미지 내 글자 추출을 txt로 하고 출력한다.


이렇게 하면 다음과 같은 결과가 나온다.



제1징 충직
재1조(독적) 미 킵톨 시밉저익 시짐저쎄직저뮈익 님욤피 과도한 결재릭익 짐중들 말저히고「 부딥한곰돔뱉뮈 및 믈곰짐거레뱉뮈쿨 규재히며 곰절히고 저뮤로문 결젤들 촉 같으로써 칠익직민 기밉팥돔들 조

재츠조찔의) 미 밑에서 시욤히는 욤머익 짐익는 다믈피 같다 <개절 `딘므2 `2 핀′ 잿딘므듭 `2 3[| ′ 잿므므므 2 5 ′ 2[|미 ` 내 ′ 2띤띤4 `2 어 ′2[|띤7 4 27 ′ 2딘[|7 된 3 ′ 2미7 4 내 ′ 2미7 m 읽 >
` 쩨밉쟈맙 말든 재조밉「 서비스밉「 기다시밉들 미 }는 저들 말한다 시밉저익 미믹들 무 햐뱉뮈쿨 흡 밈뮌 좁밉뮌 대리인 기다익 저는 시밉저한체에 관한 규절익 직욤에 있어서는 미룰 시밉저로 튼다
`익2 에주회샤맙 말릴 ×식(붉홍들 쪼힙한다 미바같다뵙 소뮤쿨 톰히며 극내회시익 시밉내욤들 저쎄바는 것들 주된 시밉으로 허는 회시로서 저 솝긔미 다쇼톨효렬미 접히는 굳맥미심민 회시쿨 렬한다
잿익딘 셈저회시셈긴흔 펫주회시에 익히며 돠쇼롤효렬미 접히는 기준에 따리 그 시밉내욤들 저쎄말는 극내회시쿨 말한다
`익4 "손 텃샤한 저회시에 익히며 다쇼롤효렬으로 접히는 기준에 따리시밉내욤들 저쎄말는 극내회시쿨 말한다
2 미밉짐」 미리 말든 돔말민미 다들 칵독익 구쿤에 따리다쇼롤효렬미 접히는 기준에 익히며 시실십 그 시밉내욤들 저쎄히는 회시익 짐한들
기 돔말민미 회시민 결무그 돔말민피그 돔말민미 저배늘 」 히다미십익 회시익 징한
다 돔말민미 회시기미닌 결무 그 돔말민미 저쎄히는 2미심익 회시익 징한
3 에멸회샤맙 말든 2미십익 회시기돔말한기밉짐한에 속하는 결무에 미돌 회시는 서로 심대말익 계멸회시리 한다
3익2 에멸줄쟈틴 기밉짐한 소속 회시기 계멸회시익 주식들 취득 또는 소뮤히는 뱉뮈쿨 }
딘익딘 에멸줄저회 린 계멸줄저쿨 톱히며 튼 계열 법 주식들 또는 소뮤히는 계멸회시쿨 말한다
3익4 에멸줄저대뺄뵈샤틴 계멸줄저쿨 뺄바며 계멸줄저회시기 쉐득 또는 소뮤히는 계멸회시 주식들 말뱉한 계멸회시쿨 말한다
딘익드 }줄저”린 크게 미십익 계멸줄저로 민결된 계멸회시모두기계멸줄저회시 및 계멸줄저대심회시기 되는 계멸줄저 핀계쿨 말한다
딘익듭 〉줄저회시짐한"미린 기밉짐한 소 회시중 순흰줄저핀계에 있는 계 법 짐한들 말한다
3익7 재무보즐떼린 기밉짐한에 속바는 회시기다믈 칵 독인 어느 히다에 레딥바는 극내굳튤기핀익 며신피핀킥히며 극내계멸회시에 대히며 뱉히는 보즐




물론 위 예제와 마찬가지로 글씨 필터링이 썩 만족스럽지는 못한다.

다만 tesseract-ocr에서 직접 실행한 것보다는 그나마 조금 나아 보이기도 하다.


이제 이 부분을 바탕으로 좀 더 정교한 검색 및 부분 추출 등에 대해서는 다음 글에서 다루도록 하며,

기초적인 설치 및 사용은 여기서 마친다.





WRITTEN BY
鬼風
생각이 깨어있지 않다면 살아갈 이유도 없다

트랙백  0 , 댓글  0개가 달렸습니다.
secret

오늘도 블로터에서 좋은 기사가 하나 나왔네요.



스냅챗, 광고주 위한 서비스 업데이트



관련된 해외 기사원문은 다음과 같습니다.


https://techcrunch.com/2017/06/12/snap-publisher/




사진출처: bloter



TechCrunch에 따르면, Snapchat에서 광고주를 위한 3가지 서비스를 오픈했다고 발표를 하였습니다.


1. 광고 효과 추적 관리자(Ad Manager)

2. 광고 제작 도구(Snap Publisher)

3. 공식인증 파트너(Snapchat Certified Partners)



하나씩 간단하게 살펴보죠.




1. 광고 효과 추적 관리자(Ad Manager)


출처: techcrunch


게재 광고가 얼마나 효과가 있는지 관리하는 도구입니다.

광고 비용, 효과 등을 추적하는 것으로 봐야되곘지요.


Google Analytics, Facebook Page 등 이미 하고 있는 자체 분석도구를 스냅챗 광고주들에게도 똑같이 제공하는 것으로 보면 됩니다.




2. 광고 제작 도구(Snap Publisher)


어쩌면, 이 부분이 가장 핵심이 되는 내용일 수도 있겠네요.


사진출처: techcrunch



영상 편집 프로그램으로 광고를 입히는 도구로 보시면 됩니다.


회사 브랜드 로고 삽입(Import existing brand assets)


동영상의 가로/세로 규격 잘라내기(Trims horizontal videos for the vertical format)


사진에 Motion 추가(Adds motion to static photos)


다양한 광고 템플릿 제공(Offers Snap-provided ad templates for different objectives)


A/B 테스트(두 집단에게 기존/신규광고를 나눠서 보여준 후 효과측정)(A/B test different ad variats for performance)


광고주들이 광고매니저를 통해서 원클릭으로 구매할 수 있도록 제공(Lets advertisers buy through the Ad Manager with one click)



(Techcrunch 기사원문과 비교해본 결과, 블로터 기사에서는 조금 다르게 번역된 것 같은데, 이 블로그에 언급된 형태가 맞습니다. 블로터에서 약간의 오역이 있었던듯 싶네요)


이 도구를 활용하면 TV, Youtube의 광고를 Snap 광고(Snap ads)로 변환하는 데 들이는 시간을 줄일 수 있다 하네요.




3. 공식인증 파트너(Snapchat Certificated Partner)


외부 애드테크(Ad-tech) 업체와 인증제도를 시작한다고 하였습니다.

(애드테크란, 디지털광고 전문업체로 광고효과 및 빅데이터 기반으로 최적의 광고를 제공하는 전문업체로 보시면 됩니다.)


스냅챗 인증을 받은 파트너사는 스냅챗의 광고 API를 지원받으며, 이를 통해서 전문적인 광고전략 수립 및 더욱 큰 수익 창출이 가능해진다 하였습니다.

현재 제휴를 맺은 애드테크업체는 SocialCode, Adaptly, Unified, Hyfn 등이 있으며, 향후에는 Standard Partner Program을 통해서 

Resolution Media, Booyah Advertising, and PMG Worldwide를 포함한 25개 파트너사로 확장할 계획이라고 하였습니다.


사진출처: techcrunch



Techcrunch / Bloter 기사 요약은 여기까지입니다.





우리나라에서는 사실 Snapchat을 그리 많이 쓰지는 않습니다.

주로 Instagram이나 Youtube를 많이 사용하는 것으로 알고 있는데요.


Snapchat이 미국에서는 폭발적인 인기를 끌었었지요.




광고 시장이 예전의 신문, 방송으로만 이루어지는 시대에서 인터넷, SNS 마케팅을 통한 광고로 확산되었다는 것은 모두가 아는 사실일 것입니다.

그리고 스마트폰과 모바일이 활성화되면서 모바일 광고도 이미 상당부분 활성화가 된 상태입니다.


미디어를 소화하는 속도도 그만큼 빨라졌습니다.

사람들은 복잡하고 장황한것보다 단순하면서 임팩트있는 광고를 더욱 선호할 수밖에 없는 것이 현실이고요.



사진출처: techcrunch



그렇기 때문에 스냅챗의 이번 서비스는 광고시장의 진화로 받아들일 수 있습니다.



광고를 쉽게 만든다는것. 그리고 다양한 형태를 가지고 Simple하게 만들 수 있는 도구를 제공한다는 것.

그만큼 Impact 있는 광고가 탄생할 가능성이 높다는 것을 반증할 수 있습니다.


즉 요즘 시대의 소비자들에게 더욱 어필할 수 있는 광고가 나올 수 있다는 뜻입니다.




광고에 있어서 제일 중요한 것은 무엇일까요. 아이디어입니다.

스냅챗의 이번 광고 제작도구는 아이디어 도출을 위한 도움을 줄 수도 있습니다.

그리고 광고 제작에 들이는 시간도 절약할 수 있습니다.


광고주들 입장에서는 스냅챗의 새로운 기능을 통해서 업무효율을 향상에 기여 할 수 있습니다.




IT 활용한 광고와 마케팅시장의 끝없는 진화. 어디까지 계속될까요.

계속 지켜보겠습니다.



WRITTEN BY
鬼風
생각이 깨어있지 않다면 살아갈 이유도 없다

트랙백  0 , 댓글  0개가 달렸습니다.
secret

2017/05/27 - [IT/General IT] - 2017 월드 IT 쇼 관람기 (1) - 입장

2017/05/28 - [IT/General IT] - 2017 월드 IT 쇼 관람기 (2) - 중소기업 상품전

2017/05/28 - [IT/General IT] - 2017 월드 IT 쇼 관람기 (3) - 대기업 전시전(자동차, 집)


글 작성 시점에서

이미 전시회가 끝났기 때문에 큰 인기는 없겠지만, 
전시회를 통해서 국내 IT 트렌드의 방향 정도는 진단할 수 있기 때문에
전시회가 목적은 아니더라도 트렌드를 짚어보기에는 충분한 자료가 될 수 있을 것입니다.


SK텔레콤 부스입니다.

아이들이 무언가를 가지고 놀고 있네요.
그런데 저게 그냥 단순히 놀이기구로 사용되는 것은 아닌것 같습니다.


그리고 두번째 사진 보면, 어린이들이 역시 조그만 집에 연결된 컴퓨터를 가지고 뭔가를 하고 있네요.


도대체 이게 무엇을 하는걸까요??

궁금하겠죠?


그래서 아시아투데이 기사를 가지고 왔습니다.

SK텔레콤 “4차 산업혁명 어렵지 않아요”사물인터넷 ‘D.I.Y’등 체험공간 마련

요약하면 다음과 같습니다.


1. 첫번째 사진의 알버트 로봇(Albert Robot)은 어린이들에게 프로그래밍 코딩을 쉽게 하도록 가르쳐주는 교육용 로봇이라고 합니다.

사진출처: 연합뉴스
(이 사진과 아래 사진들을 제외한 모든 사진 출처는 제가 직접 찍은것입니다)


알버트 로봇은 이미 시판이 되었으며, 이를 다시 널리 알리기 위해서 전시회에도 나온 것입니다.


2. 두번째 사진은 IoT 모듈을 직접 프로그래밍을 통해서 조정하는 모습이라고 하였습니다. 어린아이들도 쉽게 사용할 수 있도록 구축이 되어있으며, 어린이 관람객들이 역시 재미있게 이용하고 있네요.


이젠 프로그래밍의 시대도 변화해 나가고 있네요.
제가 프로그래밍 관련 글은 나중에 별도로 시간날 때 언급할 예정이지만, 간단히 소고를 들자면 다음과 같네요.

옛날같으면 프로그래밍은 전공자만의 영역이자 아무나 쉽게 할 수 없었습니다.
하지만 프로그래밍 언어가 진화해 나가고 이를 다루는 도구(Tool)가 발전해나가면서,
이제는 누구나 프로그래밍을 쉽게 할 수 있는 수많은 도구가 등장하였고,
그로 인해서 전공자가 아닌 일반인들도 만들고 싶은 것을 만들 수 있는 시대가 나타나고 있습니다.


사진출처: Samsung Newsroom



스크래치(Scratch)라는 프로그래밍 언어와 도구가 사람들로부터 널리 사용되어진다는 것은,
프로그래밍의 개념이 한층 더 확장되고 고차원적으로 올라갔다고 해석될 수 있겠네요.

(고차원적이라는 뜻은 더욱 수준이 높아졌다 이런 뜻은 아닙니다. 프로그래밍을 하는 분들은 '고차원'이 무슨 뜻인지 아실 것이므로 일단 이 글에서는 생략하겠습니다)


다음은 SKT에서 전시한 IoT 전시관입니다.

스마트홈을 구현한 일부분을 나타내는데요.

보다시피 세탁기, 싱크대, 침대 등등에 모두 사물인터넷(IoT) Device 장치가 달려있고 연동이 되어 있습니다.

우측 거울 오른쪽을 보시면 뭔가 도구가 하나 있고,

왼쪽 협탁 위에도 역시 같은 도구가 하나 있습니다.


이들 도구는 요즘 유행하는 바로 '누구(NUGU)'고요.

누구를 중심으로 스마트홈이 구현되었다라는 사실을 전시하고 싶었던 것으로 보입니다.

사진출처: SKT블로그



여기 밥솥에도 NUGU가 설치되어 있습니다. 신기하군요.


SKT에서는 Connected Car도 더불어 전시하고 있군요.


앞선 글에서 KT의 Connected Car에 대항해서, SKT도 VR 장비를 통해서 어떤 식으로 차량에서 SKT 서비스가 구현되는지를 나타내고 있네요.

물론 전 저거 해보지는 않고 보기만 했습니다만, 이젠 통신사들도 각 차량과 연계된 여러가지 IT 서비스를 준비하고 기획하는 것으로 생각되네요.


세상 많이 좋아졌네요.

통신사에서도 이제는 자사가 보유한 강력한 통신망을 바탕으로 해서

IoT 기반의 여러가지 다양한 서비스를 선보이고 있고.


어쩌면 국내 IT의 발달은 전자제품을 만드는 업체나, IT를 선두하는 온라인 서비스기업의 그 중심이기도 하지만,
국내 통신망을 쥐고 있는 통신사의 역할도 굉장히 중요할 것으로 생각됩니다.

그리고 KT와 SKT가 이에 앞장서서 해 나가고 있는 모습을 볼 수 있고요.


통신요금만 좀 줄여주고, 대신에 여러가지 다양한 서비스를 제공한다면 더욱 바람직한 IT세상이 되지 않을까 기대됩니다.

(물론 이들 서비스를 통해서 통신사는 또다른 수익원을 창출할 수 있을 것입니다)


WRITTEN BY
鬼風
생각이 깨어있지 않다면 살아갈 이유도 없다

트랙백  0 , 댓글  0개가 달렸습니다.
secret