반응형


Tesseract의 파이썬 래퍼인 pytesseract를 설치하여 이미지 상의 글자를 인식시키는 코드를 작성해보았습니다.

Ubuntu 18.04에서 테스트를 진행했습니다.  



ps. Raspberry Pi에서는 다음처럼 진행하세요.


설치

sudo apt install tesseract-ocr tesseract-ocr-kor


테스트

tesseract hangul.png stdout -l kor




마지막 업데이트 - 2018. 9. 9




tesseract-ocr과 한글 데이터 패키지를 설치해줍니다. 추가로 파이썬에서 사용하기  위해 필요한 pytesseract를 설치합니다.


$ sudo apt install tesseract-ocr tesseract-ocr-script-hang tesseract-ocr-script-hang-vert


$ sudo pip3 install pytesseract




우선 터미널에서 문자 인식을 해보겠습니다.  한글과 영문 텍스트가 포함된 이미지를 각각 테스트 해보았습니다.




한글 문서의 경우 -l Hangul 옵션을 끝에 추가해줘야 합니다. 제목이 소년 대신에 초년으로 인식된 것을 제외하고는 거의 대부분의 문자들이 인식되었습니다. 하지만 띄어쓰기가 문제 있습니다.

 






영어의 경우에는 거의 그대로 문자인식이 된 듯합니다. 줄바꿈만 차이가 있습니다.





파이썬 코드로 문자 인식을 진행해보겠습니다.

다음처럼 한 줄의 코드로 이미지에 대한 문자 인식이 이루어집니다. 앞에서  테스트시 사용한 이미지를 그대로 사용하였습니다.


try:
   import Image
except ImportError:
   from PIL import Image
import pytesseract


# 영어 인식
print(pytesseract.image_to_string(Image.open('english.png')))

# 한글
print(pytesseract.image_to_string(Image.open('hangul.png'), lang='Hangul'))




인식 결과는 터미널에서 할 때와 동일합니다.


A Dream Within A Dream


by Edgar Allan Poe


Take this kiss upon the brow!

And, in parting from you now,

‘Thus much let me avow--

‘You are not wrong, who deem

That my days have been a dream;

‘Yet if hope has flown away

Ina night, or in a day,


Ina vision, or in none,


Is it therefore the less gone?

Alll that we see or seem


Is but a dream within a dream.

초년


여기저기서 단풍잎 같은 슬픈 가 을 이 뚝뚝 떨어진다. 단풍잎

떨어져 나온 자 리 마다 봄 을 마련해 놓고 나 릇 가지 위에 하 늘 이

(펼쳐 있다. 가만히 하 늘 을 들 여 다 보려면 눈 썸 에 파란 물 감 이

든다. 두 손 으로 따뜻한 볼 을 쓸어 보면 손 바 닥 에도 파란 물감

이 묻 어 난다. 다시 손 바 닥 을 들 여 다 본다. 손 금 에는 맑은 강물

이 흐르고, 맑은 강 물 이 흐르고, 강물 속에는 사 랑 처 럼 슬픈 얼

굴 -- 아름다운 순 이 의 얼 굴 이 어 린 다. 소 년 은 황 홀 히 눈 을

감아 본다. 그래도 맑은 강 물 은 흘러 사 람 처럼 슬픈 얼 굴 -

아름다운 순 이 의 얼 굴 은 어 린 다.




파이썬용 라이브러리 사용법에 대한 더 자세한 정보는 다음 링크에서 얻을 수 있습니다.

https://github.com/madmaze/pytesseract






관련 영상


문자 인식을 해볼 수 있는 테서랙트 tesseract를 윈도우에서 실행시키는 방법을 소개하는 영상입니다. 







반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요.

  1. gabliw 2017.12.22 02:00

    좋은 참고가 되었습니다.
    감사합니다

  2. Jay 2019.01.14 13:36

    "C:\Users\Lee Won Jae\AppData\Local\Programs\Python\Python36\python.exe" "C:/Users/Lee Won Jae/Desktop/deep-learning-face-detection/text_recognition.py"
    Traceback (most recent call last):
    File "C:\Users\Lee Won Jae\AppData\Local\Programs\Python\Python36\lib\site-packages\pytesseract\pytesseract.py", line 184, in run_tesseract
    proc = subprocess.Popen(cmd_args, **subprocess_args())
    File "C:\Users\Lee Won Jae\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
    File "C:\Users\Lee Won Jae\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 997, in _execute_child
    startupinfo)
    FileNotFoundError: [WinError 2] 지정된 파일을 찾을 수 없습니다

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "C:/Users/Lee Won Jae/Desktop/deep-learning-face-detection/text_recognition.py", line 7, in <module>
    print(pytesseract.image_to_string(Image.open('./number.jpg')))
    File "C:\Users\Lee Won Jae\AppData\Local\Programs\Python\Python36\lib\site-packages\pytesseract\pytesseract.py", line 309, in image_to_string
    }[output_type]()
    File "C:\Users\Lee Won Jae\AppData\Local\Programs\Python\Python36\lib\site-packages\pytesseract\pytesseract.py", line 308, in <lambda>
    Output.STRING: lambda: run_and_get_output(*args),
    File "C:\Users\Lee Won Jae\AppData\Local\Programs\Python\Python36\lib\site-packages\pytesseract\pytesseract.py", line 218, in run_and_get_output
    run_tesseract(**kwargs)
    File "C:\Users\Lee Won Jae\AppData\Local\Programs\Python\Python36\lib\site-packages\pytesseract\pytesseract.py", line 186, in run_tesseract
    raise TesseractNotFoundError()

    위와 같은 에러가 발생하는데 혹시 원인을 알수 있을까요?
    분명 같은 디렉터리에 이미지파일도 같이 넣었는데 ...

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.01.14 16:11 신고

      마지막 줄에 있는 에러가 원인인듯합니다.
      tesseract를 못찾는다는 에러 같습니다.
      path 환경변수에 tesseract 실행경로를 추가해보세요.

      File "C:\Users\Lee Won Jae\AppData\Local\Programs\Python\Python36\lib\site-packages\pytesseract\pytesseract.py", line 186, in run_tesseract
      raise TesseractNotFoundError()



    • ㅇㅇ 2020.06.02 18:14

      C:\Users\Lee Won Jae\AppData\Local\Programs\Python\Python36\lib\site-packages\pytesseract\pytesseract.py

      파일을 수정하셔야 합니다.
      tesseract_cmd = '~~~'
      이 부분을 찾으셔서 tesseract의 실제 위치를 입력하면 됩니다. 저의 경우엔
      tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
      를 입력했습니다. 잘 되네요.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.06.02 18:30 신고

      팁 감사합니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.06.02 18:30 신고

      팁 감사합니다

  3. lol 2019.02.27 21:27

    우분투 16.04 사용하는 중입니다. 다른곳에서 tesseract 를 다운받아도 임포트 되지않습니다ㅠㅠ
    $ sudo apt install tesseract-ocr tesseract-ocr-script-hang tesseract-ocr-script-hang-vert
    이게 아예 되지 않습니다
    E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
    E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
    이런 에러가 뜹니다 ㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.02.27 21:33 신고

      업데이트 프로그램이 실행중이라 패키지 설치가 안되는 듯합니다.

      다음 링크처럼 하고 설치를 진행해보세요.
      https://askubuntu.com/a/1109989


      Ubuntu 18.04에서 진행한 내용이지만 패키지 이름만 다를 수 있을뿐 유사하게 진행될듯합니다.

  4. lol 2019.02.27 22:03

    앗 위의 에러는 해결했습니다 정말 감사합니다.
    근데 다른에러가 생겨 부렀네요ㅠㅠㅠ tessdata에 hangle.traineddata 가 없다고 하네용 또르륵....ㅜ
    제가 이글 들어오기전에
    tesseract: https://github.com/tesseract-ocr/tesseract
    kore.traindata: https://github.com/tesseract-ocr/tessdata/blob/master/kor.traineddata
    요 두개 사이트 참고해서 했거든용 밑에 kor.traindata 를 tessdata안에 넣었는데 이것도 그렇게 해야하나요?
    작성자 분께서 쓰신 data는 어디에 있나요ㅠㅠ 맨밑에 파이썬 라이브러리

    • lol 2019.02.27 22:04

      라이브러리 다운도 해서 압축해제했습니당

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.02.28 05:49 신고

      apt-get으로 설치해주었습니다

  5. eunhee98 2019.06.02 15:44

    $ sudo apt install tesseract-ocr tesseract-ocr-script-hang tesseract-ocr-script-hang-vert
    를 했을 때
    E: Unable to locate package tesseract-ocr-script-hang
    E: Unable to locate package tesseract-ocr-script-hang-vert
    라는 에러가 뜹니다..

  6. 배움의학생 2019.06.12 00:34

    pi@raspberrypi:~ $ sudo apt install tesseract-ocr tesseract-ocr-script-hang tesseract-ocr-script-hang-vert
    패키지 목록을 읽는 중입니다... 완료
    의존성 트리를 만드는 중입니다
    상태 정보를 읽는 중입니다... 완료
    E: tesseract-ocr-script-hang 패키지를 찾을 수 없습니다
    E: tesseract-ocr-script-hang-vert 패키지를 찾을 수 없습니다

    이렇게 떠서 댓글 보구 sudo apt update 이것도해봣는데 안되더라구용..

    그리고 마지막에 깃허브 저기서 다운받아서 뭘 참고해야하나요 ?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.06.12 08:13 신고

      Raspberry Pi에서는 다음처럼 진행하세요.


      설치

      sudo apt install tesseract-ocr tesseract-ocr-kor



      테스트

      tesseract hangul.png stdout -l kor

    • 배움의학생 2019.06.13 19:48

      라즈베리파이 바탕화면에 Hangul.png 넣어두고 pi@raspberrypi:~ $ tesseract hangul.png stdout -l Hangul

      이렇게 입력했습니다.

      Error opening data file /usr/share/tesseract-ocr/tessdata/Hangul.traineddata
      Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.
      Failed loading language 'Hangul'
      Tesseract couldn't load any languages!
      Could not initialize tesseract.

      뭐가 문제인가용?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.06.13 19:49 신고

      아래처럼 Hangul을 사용하는 대신
      tesseract hangul.png stdout -l Hangul

      kor을 사용하세요
      tesseract hangul.png stdout -l kor

  7. 첫시작. 2019.06.14 22:28

    터미널에 바로 했을때는 잘 작동됬는데

    파이썬으로 해볼려고 하는데 pytesseract가 없다는 듯한 에러가 ??

    sudo python test01.py
    Traceback (most recent call last):
    File "test01.py", line 6, in <module>
    import pytesseract
    ImportError: No module named pytesseract

    어떤 부분이 잘못됬을까요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.06.14 23:08 신고

      다음 처럼 모듈을 설치했나요?

      sudo pip3 install pytesseract

      혹 python2를 사용한다면 다음처럼 설치하세요

      sudo pip install pytesseract

    • 첫시작. 2019.06.15 15:19

      해결 되었습니다 감사합니다!

  8. paulo 2019.07.29 13:53

    안녕하세요, 저는 파이썬은 아니고.. c++로 real time ocr을 구현하려는 학생입니다. 현재는 text location과 같이 실시간으로 텍스트의 위치를 파악하는데까지 공부했는데요(이진화,모폴로지연산,라벨링) 실시간 웹캠으로 받은 사진을 변환하여 text파일로 출력되게 하려면 무엇을 더 공부해야될까요?
    이 글의 tesseract는 사진파일을 검출하는데 real time 데이터를 어떻게 출력해야할지.. 고민입니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.07.29 14:13 신고

      OpenCV를 이용한 경우 웹캠 영상으로부터 이미지를 한장씩 받아오게 됩니다..

      이 이미지에 대해 글자 인식을 적용하면 됩니다.

      버튼클릭하면 그 시점의 이미지를 가지고 글자인식을 해도 될 듯합니다.

    • paulo 2019.07.29 15:15

      그러면 Videocapture cap; 에서 cap 에 대해 이미지로 처리하면 된다는 건가요?? 여기에 CNN RNN 등의 처리를 하면 될까요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.07.29 16:24 신고

      다음 코드에서 img_color에 컬러 이미지 한장이 저장되게 됩니다.


      import cv2


      cap = cv2.VideoCapture(0)

      while True:
      ret,img_color = cap.read()

      if ret == False:
      continue

      img_gray = cv2.cvtColor(img_color, cv2.COLOR_BGR2GRAY)

      cv2.imshow("Color", img_color)
      cv2.imshow("Gray", img_gray)

      if cv2.waitKey(1)&0xFF == 27:
      break

      cap.release()
      cv2.destroyAllWindows()

  9. schakal 2019.10.10 17:39

    글 감사히 읽었습니다.

    설치 완료해서 올려주신 이미지 그대로 진행하였는데

    english.png 파일에 대해 말씀드리면

    Traceback (most recent call last):
    File "tesseract_test.py", line 11, in <module>
    print(pytesseract.image_to_string(Image.open('/pytesseract/english.png'), lang = 'eng'))
    UnicodeEncodeError: 'ascii' codec can't encode character '\ufb02' in position 191: ordinal not in range(128)

    이 에러가 뜨고,

    print(pytesseract.image_to_string(Image.open('/pytesseract/english.png'), lang = 'eng').encode('utf-8'))

    이렇게 해서 돌려보면

    b'A Dream Vlilllin A Dream\n\nby Edgav AHan Pue\n\nTake ans kiss upon me hmw!\nAnd, in naning hum yml mm,\nThus much In me Mr\nYm am um wrung, who deem\nThai my days have been a dream;\nYet if hops has \xef\xac\x82uwn zway\n\nIn 2 niyn, ur in a day,\n\nIn 2 vision, ur in nuIIE,\n\nIs is mime me less gone?\nAll am we soeo. seem\n\nIs but a dream wimin z (Imam.'

    결과가 이렇게 나옵니다. 한글 파일에 대해 실행해도 위와 같은 문제가 뜨네요.

    혹시 이럴 경우에 어떻게 대처해야할지 여쭙고 싶습니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.10.10 18:26 신고

      확인해보니 문제 없이 동작합니다.

      혹시 터미널에 설정되어 있는 로케일이 어떻게 되나요?

      참고로 테스트에 사용한 우분투 18.04에는 ko_KR.UTF-8 으로 설정되어 있습니다.

      아마도 유니코드 사용가능하도록 해야 문제 없이 동작할 듯합니다.

    • schakal 2019.10.11 10:28

      답변 감사합니다.
      말씀주신대로 제가 docker에서 쓰다보니 로케일을 확인을 못했습니다. 로케일 변경 후 돌렸더니 동작은 합니다만 결과는 올려주신 것과는 좀 다르게 나오네요.

      A Dream Vlilllin A Dream

      by Edgav AHan Pue

      Take ans kiss upon me hmw!
      And, in naning hum yml mm,
      Thus much In me Mr
      Ym am um wrung, who deem
      Thai my days have been a dream;
      Yet if hops has fluwn zway

      In 2 niyn, ur in a day,

      In 2 vision, ur in nuIIE,

      Is is mime me less gone?
      All am we soeo. seem

      Is but a dream wimin z (Imam.

      소년

      여기저기서 단풍잎 같은 슬픈 7|믈미 푹툭펠이진다′ 단풍잎
      펠어뼈 나온 쟤리햅떠 몹들 미련괘 놀고 니뭇갸지 황해 륭쁠이
      펼쳐 있다 가만히 Elia 들며디브걱민 눈멈께 마린 들김미
      둔다 두 슨으쿤 따듯한 돌들 쓸어 보민 슨멕땀헤도 마린 물감
      이 묻이닌디> 다시 슨멕|닥들 눌며디믄다슨굼헤는 밈믄 감물
      이 효 고, 맑은 깊믈이 낮르고′감들 속하는 시킬페럼 읊멸
      Si 훼|름디문 순이익 힐굴이 이린패소년믄 훼즐히뚤
      감어본디^그레드 밈믄 감들믄 플러 사림쳐럼 읊멸굴낮
      이름다운순미의 멸굴믄 미란다

      이건 버전의 문제일까요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.10.11 16:56 신고

      로케일을 ko_KR.UTF-8로 바꾸었나요?

      로케일 문제 같습니다.

  10. psywow 2019.11.07 11:17

    라즈베리파이와 opencv로 공부하고있는 학생입니다
    영어와 한글을 함께쓰는방법은없습니까?
    lang='kor'해버리니 영어는 이상하게 나와서 영어와 한글이 동시에 가능하게하고 싶은데 방법없을까요

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.07 20:16 신고

      언어를 지정해서 하는 방식이라서 동시에는 안될겁니다.

  11. sohard 2020.06.18 05:36

    어떻게 실행해도
    A Dream Vlilllin A Dream

    by Edgav AHan Pue

    Take ans kiss upon me hmw!
    And, in naning hum yml mm,
    Thus much In me Mr
    Ym am um wrung, who deem
    Thai my days have been a dream;
    Yet if hops has fluwn zway

    In 2 niyn, ur in a day,

    In 2 vision, ur in nuIIE,

    Is is mime me less gone?
    All am we soeo. seem

    Is but a dream wimin z (Imam.

    이렇게 나오네요 로케일도 kr , utf-8 로 설정했습니다...

  12. Favicon of https://moondol-ai.tistory.com BlogIcon 애뚱 2020.10.13 23:54 신고

    안녕하세요 글 잘 봤습니다.
    저는 AWS 우분투 18.04 서버에서tesseract를 설치했는데요..
    tesseract sample.jpg stdout -l eng 처럼 터미널에서 실행시 "warning~~ invalid resolution 0dpi~~" 라고 하면서 터미널이 리셋되더라구요..
    그런데 txt 파일로 저장하는 옵션을 주면 저장이 되긴 하는데 또 터미널에서 cat sample.txt 를 입력하면 또 리셋이 됩니다.
    결국 로컬에 txt 파일을 옮겨서 보면 볼 수 있는데요, 무엇 때문에 이런 현상이 일어날까요 ㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.10.14 21:19 신고

      AWS에서 해보지 않아서 원인을 알기 힘듭니다. 일반 우분투에선 문제 없지 않을까 싶습니다.

+ Recent posts