메뉴
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
매거진의 다음글
취소
완료
작품 선택
키워드 선택
0
/
3
0
검색
댓글여부
댓글 쓰기 허용
afliean
브런치는 최신 브라우저에 최적화 되어있습니다.
IE
chrome
safari