관념과 사고

1. AWS Console 접속 후 RDS 선택

2. 업그레이드 할 MySQL 5.6 Instance 선택

3. 인스턴스 수정 선택



4. 그리고나서 아래로 쭉쭉 내려가고 업그레이드 진행까지 눌렀을 떄 아무 이상없이 잘된다면 다행이지만,

이런 메시지가 나올 수 있습니다.


Current Parameter Group (xxx-parameter-group) is non-default. "You need to explicitly specify a new Parameter Group in this case (default or custom)"


(여기서 xxx-parameter-group은 임의의 파라미터 그룹명을 나타내는겁니다. 실제로는 각각 다르게 나타날 것입니다.)


이러한 에러가 나오면서 진행이 안되는 이유는 간단합니다.

만약에 5.6 버전에서 파라미터 그룹이 default로 지정된 상태라면 모를까, 

임의의 파라미터 그룹을 생성 후 적용 중이라면 업그레이드 시 적용되지 않습니다.


그 이유는 AWS RDS - MySQL의 파라미터 그룹(Parameter Group)은 각 버전 별로 생성되고 관리되기 때문입니다.



위 사진과 보시다시피, RDS의 파라미터 그룹은 각 패밀리 별로 구성되어 있으며, 패밀리는 DB의 Version 별로 관리가 됩니다.

즉 기존에 사용되었던 파라미터 그룹은 MySQL 5.6전용이므로, 버전 업그레이드 시 그대로 사용할 수 없습니다.


그러므로 MySQL 5.6에서 5.7로 업그레이드하기 위해서는 MySQL 5.7용 파라미터 그룹을 미리 생성을 해야 합니다.


MySQL 5.7 버전 파라미터 그룹을 미리 생성한 후, 

기존 MySQL 5.6 인스턴스를 업그레이드하기 위해서 위 절차대로 다시 수정하려고 하면 파라미터 그룹은 다음과 같이 나타납니다.



여기에서의 custom-group은 MySQL 5.7 버전용으로 미리 생성해놓은 파라미터 그룹으로, MySQL 5.7 버전 업그레이드 시 기본으로 표시되게 됩니다.

이 상태에서 업그레이드를 하면 아무 문제없이 진행되며, 10분 정도 시간이 소요된 후 완료가 됩니다.


MySQL Version Upgrade 시 유의사항이므로 참고하시기 바랍니다.


추후에는 MariaDB나 AuroraDB로의 Migration에 대해서도 시간나면 다루어 보겠습니다.


Comment +0

간단한 잡담

ETC2018.08.15 12:29

최근 일주일 간 방문자 수를 확인한 결과,

하루 평균 방문자 수가 200명 미만으로 줄어들었네요.

어떤 날은 100명 미만인 날도 있고요.


2018년 들어서 블로그에 글을 자주 올리지는 못해도 방문자수는 주기적으로 체크를 했었는데,

200명 미만은 아마 처음이 아닐까 싶네요.


말 그대로 자주 올리지 못하기 때문일까요.

제 스스로의 책임이겠죠.


사실 시간이 없어서 글을 못 올리는것이 맞긴 합니다.

예전같으면 게을러서 글도 안쓴다 그러지만, 지금은 그것이 아니라 굉장히 바쁘게 여러가지를 하기 때문이거든요.

광복절에도 집에서 코딩하면서 현재 웹 애플리케이션을 개발하는데 매진 중입니다.


최근에 올렸던 게시물 중에서 CCO Repository를 신규 출시했다고 하였습니다.

관련해서 기능개선 작업이 계속해서 진행중이고, 예전과는 달리 이제는 진짜 규모는 작지만 하나의 서비스를 출시하고 운영하는 입장으로서

지속적인 관리도 필요하기 때문입니다.


정식버전 개발까지 완료되면 개발노트 정리해서 진짜로 올리겠습니다.

'ETC' 카테고리의 다른 글

간단한 잡담  (0) 2018.08.15
노선영은 진짜 피해자이고 잘못이 없을까.  (0) 2018.03.06
2018년 시장 경제와 투자에 대한 소고.  (0) 2018.01.09
요즘 근황  (2) 2017.12.21
세상엔 쉬운일이 없다  (0) 2017.11.30
다시 복귀합니다  (0) 2017.10.31

Comment +0

이번 글에서는 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에서 직접 실행한 것보다는 그나마 조금 나아 보이기도 하다.


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

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




Comment +0