brunch

You can make anything
by writing

C.S.Lewis

by Moai Nov 07. 2020

Python 이미지 캡쳐 후 파일 탐지, 자동 번역

pytesseract, watchdog,  kakaoi

우선 카카오 i에 있는 번역기능 api를 사용해보자

우선 개발자도구를 이용해 어떤식으로 api로 call하는지 알아보자. 보통은 header에 host, referer, user-agent로 차단하는 경우가 대다수이다. 여기에 값을 넣어줘서 안 된다면 깔끔하게 포기하고 셀레니움으로 크롤링하자. 이제 아래와 같이 코드를 작성해주자




파일 생성 이벤트를 알아보자

watchdog 모듈을 이용해보곘다


다음은 이미지에서 텍스트를 추출하는 코드이다.

윈도우라면 우선 이 프로그램을 다운받고 설치하자

이후 환경변수 PATH에 C:\Program Files (x86)\Tesseract-OCR\를 추가하자

그리고 새로만들기를 한뒤 TESSDATA_PREFIX에 C:\Program Files (x86)\Tesseract-OCR\tessdata\를 넣어주자.


마지막으로 pip에서 python -m pip install pytesseract 다음명령어로 인스톨해주자



이제 코드를 합치면 다음과 같다.

이미지를 코드가 있는 폴더에 저장하면 파일이 생성된 것을 탐지한 뒤 자동 번역된다.


import pytesseract as tess

from PIL import Image

import time

from watchdog.events import FileSystemEventHandler

from watchdog.observers import Observer

import requests

import pandas

class MyHandler(FileSystemEventHandler):

    def __init__(self):

        self.openList = []

    def reqTranslate(self, text):

        data = {

            'queryLanguage': 'en',

            'resultLanguage': 'kr',

            'q': ''

        }

        headers = {

            'referer': 'https://translate.kakao.com/',

            'User-Agent': 'Chrome'

        }

        URL = 'https://translate.kakao.com/translator/translate.json'

        data['q'] = text

        res = requests.post(URL, headers=headers, data=data)

        try:

            if res.status_code == requests.codes.ok:

                df = pandas.DataFrame(res.json()['result']['output'])

                df.dropna(inplace=True)

                print (df)

            else:

                print ('API 연결 실패')

        except requests.exceptions.RequestException as e:

            print (e)

    def on_created(self, event):

        #print ('['+ event.event_type + '] : ' + event.src_path)

        while event.src_path not in self.openList:

            self.openList.append(event.src_path)

            time.sleep(3)

            img = Image.open(event.src_path)

            text = tess.image_to_string(img)

            print (text)

            self.reqTranslate(text)

def main():

    event_handler = MyHandler()

    path = '.'

    observer = Observer()

    observer.schedule(event_handler, path, recursive=False)

    observer.start()

    try:

        while True:

            time.sleep(1)

    except KeyboardInterrupt:

        observer.stop()

    observer.join()

if __name__ == '__main__':

    main()


매거진의 이전글 클래스 상속, 은닉화
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari