Python에서 Tesseract 사용하기

 

·       Version : MAC OS, Python 3.X, PIP3

 

이전 포스트에서 Tesseract 오픈소스 소프트웨어를 사용하여 이미지에 포함된 문자열을 추출하는 방법에 대해서 알아 보았다.

·       Tesseract 활용한 이미지 문자인식 : https://sungwookkang.com/1475

 

다른 포스트에도 언급한바 있지만, 이미지의 경우 배경 색상이나, 글꼴, 언어 타입에 따라 인식률에 차이가 크므로, 전처리 과정이 수반되어야 어느정도 정확도를 높일 있다. OpenCV 오픈소스로 공개된 다양한 이미지 처리 모듈을 사용하기 위해서는 파이썬을 활용할 있는데, 시작으로 파이썬에서 Tesseract 임포트하여 사용하는 방법을 설명한다. 이번 포스트의 내용을 따라하기 전에, Tesseract 프로그램이 설치되어 있어야 한다.

 

Python3.X PIP3 설치 한다. 그리고 아래 명령을 사용하여 Tesseract패키지를 설치 한다. 설치과정에서 Permission 문제가 발생하면 –user 명령을 함께 사용한다.

pip3 install pytesseract --user

pip3 install opencv-python --user

 

Python3 실행하여 아래 코드를 작성한다.

from PIL import Image

from pytesseract import *

import re

import cv2

 

img = Image.open('이미지파일명')

 

text = pytesseract.image_to_string(img,lang='euc') #한글은 'kor'

#간혹 lang 오류가 발생할경우, lang 파라메터 제거

#text = pytesseract.image_to_string(img)

 

print(text)

 

아래 결과는 인터넷에서 어느 식당에서 메뉴 사진을 찍은 이미지에서 메뉴와 가격을 추출한것이다. 아직 데이터가 정제되지 않은 상태이며 한글과 영어가 섞여 있는데, 한글은 판독하지 못한것을 확인할 있다.

 

실제 추출된 문자열에서 데이터로 활용하려면, 이미지 인식 개선, 다양한 문자열 인식, 데이터 가공을 통한 유요한 데이터 추출 등의 작업이 추가되어야 한다. 이러한 작업을 하나의 프로그램으로 만들기 위해서 오늘 실습한 코드에서 점진적으로 코드가 추가될 예정이다.

 

 

2020-12-18/ Sungwook Kang / http://sungwookkang.com

 

이미지 인식, OCR, Tesseract, 문자열 인식, OpenCV, 딥러닝, 머신러닝, 글자 인식, 이미지 분석, 파이선, 파이썬, python

 

Tesseract 활용한 이미지 문자인식

 

Tesseract 이미지로부터 텍스트를 인식하고 추출하는 소프트웨어이며 HP 연구에서에서 개발된 오픈소스 OCR 엔진이다. 현재까지도 LSTM(Long short-term memory) 같은 딥러닝 방식을 통해 텍스트 인식률을 지속적으로 개선하고 있다. Tesseract 사용하기 위해서는 관련 프로그램을 설치 해야한다. 프로그램은 아래 주소에서 다운로드 받을 있다.

·       https://github.com/tesseract-ocr/tesseract/wiki

 

필자의 경우 MAC OS에서 설치를 진행하였으며 home brew 사용하여 설치 하였다.

brew install tesseract

 

brew 설치한 경우 아래 명령으로 설치된 경로를 확인할 있다.

brew list tesseract

 

 

설치가 완료 되었으면, 이미지 파일을 읽어 문자열을 출력하도록 한다. 배경색상과 글자색상에 따른 이미지 인식률을 확인하기 위해 3가지 케이스를 테스트하였다. 실행명령은 아래와 같다.

tesseract /이미지경로/파일명 stdout

 

Image

Results

 

출력 결과를 살펴보면, 배경색과 글자색의 대비가 높을 수록 높은 인식률을 나타내고 있다. 또한 이미지속의 글자가 단순하고, 글꼴에 따라서도 인식률이 다르게 나타나는것을 확인할 있다. 글에는 포함되어 있지 않지만, 한글과 영어에 따른 인식률 차이도 발생함을 확인할 있었다.

이처럼 전체 텍스트 구조를 분석하고 인식하는 과정에 다양한 오차가 발생하기 때문에, 이미지의 인식률을 높이기 위한 전처리 과정이 필요하며, 대표적으로 OpenCV 사용하여 배경과 글자를 분리하여  작업을 진행할 있다.

 

 

 

2020-12-17/ Sungwook Kang / http://sungwookkang.com

 

이미지 인식, OCR, Tesseract, 문자열 인식, OpenCV, 딥러닝, 머신러닝, 글자 인식, 이미지 분석

 

파이썬과 OpenCV 이용한 성별 연령 판별하기

 

·       Version : Python 3.X, OpenCV

 

파이썬과 OpenCV 라이브러리를 활용하여 성별 연령을 판별해 보도록 한다. 이번 포스트에서는 프로그램 코드에 대한 설명이나 알고리즘에 대한 설명은 다루지 않는다. 참고 사이트에서 다운로드 받은 소스를 단순히 실행하고 결과를 얻음으로써, 이미지 분석에 대한 흥미를 유발하는데 목적이 있다.

 

CV (Computer Vision) 컴퓨터가 인간처럼 디지털 이미지와 비디오를 보고 식별할 있게 하는 연구분야 이다. Computer Vision 디지털 이미지를 수집, 처리, 분석 이해하여 실제 세계에서 고차원적 데이터를 추출하여 결정에 사용할 있는 기호 또는 숫자 정보를 생성한다. 과정에는 물체 인식, 비디오 추적, 모션 추정 이미지 복원과 같은 사례가 포함된다.

Open CV Open Source Computer Vision 약자이다. 라이브러리는 실시간 이미지 비디오를 처리하는 동시에 분석 기능을 제공한다. 딥러닝 프레임워크인 TensorFlow, Caffe PyTorch 지원한다.

이번 프로젝트에서 사용되는 알고리즘은 CNN (Convolutional Neural Network)으로 이미지 인식 처리 NLP 목적으로 사용되는 DNN(Deep Neural Network)이다. ConvNet이라고도하는 CNN에는 입력 출력 레이어와 여러 개의 숨겨진 레이어가 있으며 다수는 컨볼루션이다. 실습에 사용된 파이썬 프로젝트의 CNN 3개의 컨볼루션 레이어가 있다.

·       Convolutional layer; 96 nodes, kernel size 7

·       Convolutional layer; 256 nodes, kernel size 5

·       Convolutional layer; 384 nodes, kernel size 3

 

각각 512개의 노드가 있는 2개의 완전히 연결된 레이어와 softmax 유형의 최종 출력 레이어가 있다. 이번 프로젝트에서는 아래와 같은 분석 결과를 도출한다.

·       얼굴 감지

·       남성 / 여성으로 분류

·       8 가지 연령대 하나로 분류

·       결과를 이미지에 놓고 표시

 

프로젝트에는 Adience 데이터셋을 사용한다. 데이터셋은 얼굴 사진의 벤치 마크 역할을 하여 노이즈, 조명, 포즈 모양과 같은 다양한 실제 이미징 조건을 포함한다. 이미지는 Flicker 앨범에서 수집되어 CC(Creative Commons) 라이선스에 따라 배포되었다. 8가지 연령대((0 – 2), (4 – 6), (8 – 12), (15 – 20), (25 – 32), (38 – 43), (48 – 53), (60 – 100)) 2,284명의 피사체에 대한 26,580장의 사진이 있으며 크기는 1GB 이다. 프로젝트에서 사용된 모델은 데이터셋을 사용하여 훈련되었다. (그래서인지 동양인에 대한 나이 예측을 하지 못한다.)

 

프로젝트를 실행하기 위해서는 파이썬이 설치되어 있어야 하며, 아래 패키지를 PIP 사용하여 설치 있도록 한다.

pip install opencv-python

 

프로젝트를 다운로드 한다.

·       Download : https://drive.google.com/file/d/1yy_poZSFAPKi0y2e2yj9XDe1N8xXYuKB/view)

 

프로젝트에는 아래와 같은 파일로 이루어져 있다.

·       opencv_face_detector.pbtxt : 얼굴을 감지 하기 위한 파일. 텍스트 형식

·       opencv_face_detector_uint8.pb : 얼굴을 감지 하기 위한 파일. 이진 형식

·       age_deploy.prototxt : 연령에 대한 네트워크 구성 설정

·       age_net.caffemodel : 연령에 대한 레이어 매개 변수의 내부 상태를 정의

·       gender_deploy.prototxt :성별에 대한 네트워크 구성

·       gender_net.caffemodel : 성별에 대한 레이어 매개 변수의 내부 상태를 정의

·       a few pictures to try the project on

 

프로그램을 실행하여 사진속의 인물 성별과 연령이 맞는지 확인해 본다. (필자의 실험에서는 사진에 필터가 적용되어 있거나, 포샵을 과하게 한경우 정확한 인식을 하지 못하였다.)

python gad.py --image woman1.jpg

 

다운로드 받은 프로젝트에 포함되어 있는 woman1.jpg 결과.

 

 

다운로드 받은 프로젝트에 포함되어 있는 girl1.jpg 결과.

 

 

 

필자의 얼굴을 Snow 앱을 사용하여 뽀샤시 필터를 적용한 결과

 

 

[참고자료]

·       Interesting Python Project of Gender and Age Detection with OpenCV : https://data-flair.training/blogs/python-project-gender-age-detection/?fbclid=IwAR1d43CEOg-5dnzxPTxE06uB60leOzBKe30bRZewVvsM88V7v6TmTN9GDYI

·       Adience Benchmark Gender And Age Classification : https://www.kaggle.com/ttungl/adience-benchmark-gender-and-age-classification

 

 

 

2020-03-02/ Sungwook Kang / http://sungwookkang.com

 

 

 

파이썬, Python, 얼굴인식, 파이썬 이미지 처리, 이미지 프로세싱, 연령 분석, 성별 분석, 이미지 분석, Convolutional, OpenCV, Computer Vision, 머신러닝, 딥러닝, Neural Network

  1. omty 2020.03.24 23:33 신고

    15~20세... 항상 많이 배우고 갑니다 좋은 글 감사합니다~

  2. Rena 2020.12.31 17:02

    많이 배우고 갑니다. 다만 얼굴을 인식하는 창 크기를 조절하고 싶은데 처음보는 구조라서 잘 모르겠네요.
    전체화면으로 하고 싶은데..
    알려주실 수 있으신가요?

+ Recent posts