메뉴
brunch
매거진
프로그래밍
실행
신고
라이킷
8
댓글
공유
닫기
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 모듈을 이용해보곘다
다음은 이미지에서 텍스트를 추출하는 코드이다.
윈도우라면 우선 이 프로그램을 다운받고 설치하자
tesseract-ocr-setup-4.00.00dev (1).exe
이후 환경변수 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
Python
크롤링
번역
Moai
소속
라인플러스
직업
엔지니어
개발자, 분석가
구독자
36
구독
매거진의 이전글
클래스 상속, 은닉화
Sqlite와 Crontab
매거진의 다음글
브런치는 최신 브라우저에 최적화 되어있습니다.
IE
chrome
safari