brunch

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

pytesseract, watchdog, kakaoi

by Moai

우선 카카오 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()


keyword
매거진의 이전글 클래스 상속, 은닉화