사이트링크1 | https://developmentdiary.tistory.com/m/561 |
---|---|
사이트링크2 |
만들기전에 대체할수 있는 방법들
1.구글드라이버에서 이미지를 구글문서로 여는방법(굉장히 귀찮다)
2.EasyOCR 사용하기
https://swiftcam.tistory.com/198
Easy OCR을 이용하는방법(20회이상 사용시 라이센스가 필요-유료)
가격이 비싸지 않고 성능도 꽤 준수한편이기 때문에 많이 필요하다면 사는것도 좋은방법이다.
3.ABBYY FindReader
좀 비쌉니다... 30만원 정도 하는것으로 알고있습니다.
https://namu.wiki/w/OCR
저는 그냥 만들어 보기로 했습니다.
순서
선택영역 이미지 캡쳐 -> 이미지에서 텍스트 찾기(OCR)
선택영역 이미지 캡쳐
-필요한 모듈 설치하기(pycharm 기준)
terminal창에서 필요한 모듈 설치
1
2
|
pip install pillow
pip install opencv-contrib-python
|
cs |
스크린샷을 찍고 필요한 영역추출
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
import cv2 as cv
from PIL import ImageGrab
isDragging = False
x1,y1,x2,y2 = -1,-1,-1,-1
blue,red = (255,0,0),(0,0,255)
#마우스 좌표받아서 처리하는 함수
def onMouse(event, x,y,flags, param):
global isDragging,x1,y1,img
if event ==cv.EVENT_LBUTTONDOWN:#왼쪽마우스버튼 눌렀을때
isDragging=True
x1=x
y1=y
elif event==cv.EVENT_MOUSEMOVE:#움직일때
if isDragging:
img_draw=img.copy()
# 영역표시
cv.rectangle(img_draw,(x1,y1),(x,y),blue,2)
cv.imshow('img',img_draw)
elif event== cv.EVENT_LBUTTONUP:#왼쪽 마우스버튼 땟을때
if isDragging:
isDragging=False
x2=x
y2=y
print('x:%d, y%d,w:%d,h:%d'%(x1,y1,x2,y2))
img_draw= img.copy()
# 영역표시
cv.rectangle(img_draw,(x1,y1),(x2,y2),red,2)
cv.imshow('img',img_draw)
#우->좌 ,하 ->상으로 드래그시 수정
if x1>x2:
x1,x2=x2,x1
if y1>y2:
y1,y2=y2,y1
roi = img[y1:y2,x1:x2]
#영역보여주기
cv.imshow('capture',roi)
# cv.moveWindow('cropped',0,0)
#파일저장
cv.imwrite('./save.jpg',roi)
print('capture')
#스크린샷 찍고저장
img=ImageGrab.grab()
img.save('./screenshot.jpg')
#찍은 스크린샷 불러오기
img=cv.imread('./screenshot.jpg',cv.IMREAD_COLOR)
cv.imshow('img',img)
cv.setMouseCallback('img',onMouse)
cv.waitKey()
cv.destroyAllWindows()
|
cs |
tesseract를 이용한 이미지에서 텍스트 찾기
https://github.com/UB-Mannheim/tesseract/wiki
w64 다운
-테서렉트 설치
설치중 additional language data -> korean 체크
설치후 환경변수 설정
내pc 마우스 우클릭->속성->고급시스템 설정->환경변수 -> 시스템 변수창에 Path 더블클릭
->새로만들기 ->설치했던 Tesseract 경로 추가(ex ) C:\Program Files\Tesseract-OCR)
시스템변수의 새로만들기 클릭 ->변수이름 TESSDATA_PREFIX 변수값 C:\Program Files\Tesseract-OCR\tessdata 입력 후 확인
-이미지경로 테스트해보기
cmd창에서 이미지가 들어있는 폴더로 이동
영어 추출시
tesseract 원하는이미지파일 stdout
한글 추출시
tesseract 원하는이미지파일 stdout -l kor
파이썬에서 tesseract 사용하기
성능이 생각만큼 나오지는 않지만 OCR자체가 어렵다고 한다...
표준형식의 문자들은 잘 읽는편이며 한글과 영어가 같이 있을경우 정확도가 떨어진다.
해상도와 글자의 색,크기도 중요한거 같다.
lang='eng+kor'로 바꾸면 한글 영어 모두 인식할수 있지만 정확도가 더욱 떨어집니다.
어떤조건에서는 잘되고 어떤조건에서는 잘되지않습니다.
1
2
3
4
|
import cv2 as cv
import pytesseract
print(pytesseract.image_to_string(cv.imread('./save.jpg'), lang='kor'))
|
cs |
스크린샷을 찍고 특정영역의 텍스트를 찾아내보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
import cv2 as cv
from PIL import ImageGrab
import pytesseract
isDragging = False
x1,y1,x2,y2 = -1,-1,-1,-1
blue,red = (255,0,0),(0,0,255)
#마우스 좌표받아서 처리하는 함수
def onMouse(event, x,y,flags, param):
global isDragging,x1,y1,img
if event ==cv.EVENT_LBUTTONDOWN:#왼쪽마우스버튼 눌렀을때
isDragging=True
x1=x
y1=y
elif event==cv.EVENT_MOUSEMOVE:#움직일때
if isDragging:
img_draw=img.copy()
# 영역표시
cv.rectangle(img_draw,(x1,y1),(x,y),blue,2)
cv.imshow('img',img_draw)
elif event== cv.EVENT_LBUTTONUP:#왼쪽 마우스버튼 땟을때
if isDragging:
isDragging=False
x2=x
y2=y
print('x:%d, y%d,w:%d,h:%d'%(x1,y1,x2,y2))
img_draw= img.copy()
# 영역표시
cv.rectangle(img_draw,(x1,y1),(x2,y2),red,2)
cv.imshow('img',img_draw)
#우->좌 ,하 ->상으로 드래그시 수정
if x1>x2:
x1,x2=x2,x1
if y1>y2:
y1,y2=y2,y1
roi = img[y1:y2,x1:x2]
#영역보여주기
cv.imshow('capture',roi)
# cv.moveWindow('cropped',0,0)
#파일저장
cv.imwrite('./save.jpg',roi)
print('capture')
#글자추출
print(pytesseract.image_to_string(cv.imread('./save.jpg'), lang='kor'))
#스크린샷 찍고저장
img=ImageGrab.grab()
img.save('./screenshot.jpg')
#찍은 스크린샷 불러오기
img=cv.imread('./screenshot.jpg',cv.IMREAD_COLOR)
cv.imshow('img',img)
cv.setMouseCallback('img',onMouse)
cv.waitKey()
cv.destroyAllWindows()
|
cs |
성능이 만족스럽지 못합니다.
인식이 잘될때는 잘되지만 안될때는 형편없어집니다.
tesseract의 성능을 조금더 높일수 있는 방법을 찾아보아야 할 것 같습니다.
영어인식은 비교적 괜찮은 편입니다.
참고
https://bkshin.tistory.com/entry/OpenCV-6-dd
https://www.youtube.com/watch?v=STf1R-3rbco&t=190s
GUI로 만든 버전
https://github.com/shjune93/pythonOCR
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
» | 이미지 텍스트추출(OCR) 만들어보기 | 황제낙엽 | 2022.09.23 | 91 |
7 |
google cloud vision API 를 활용한 글자인식
![]() | 황제낙엽 | 2022.09.23 | 36 |
6 | 왕초보를 위한 Python 2.7 | 황제낙엽 | 2018.07.23 | 122 |
5 | Python 2.X 한글 인코딩 관련 문제 정리 및 해결 | 황제낙엽 | 2018.07.23 | 707 |
4 |
파이썬 소개
![]() | 황제낙엽 | 2018.07.17 | 105 |
3 | Python Imaging Library (PIL) | 황제낙엽 | 2018.07.07 | 145 |
2 | 리눅스 Python 2.7 컴파일 설치 | 황제낙엽 | 2018.07.07 | 200 |
1 | Pillow - Python Imaging Library, PIL의 후계자 | 황제낙엽 | 2018.06.25 | 201 |