23.12.13.(WED).TIL.
Tesseract OCR / Google Calendar
Tesseract OCR / Google Calendar
import os
import cv2
import pytesseract
import googleapiclient.discovery
# 이미지 파일의 경로를 입력합니다.
image_path = "/path/to/image.jpg"
# 이미지 파일을 읽고 텍스트를 추출합니다.
text = pytesseract.image_to_string(cv2.imread(image_path))
# 텍스트에서 일정 또는 일시를 추출합니다.
events = []
for line in text.splitlines():
# 일정을 추출합니다.
if "일정" in line:
events.append(line.split("일정")[1])
# 일시를 추출합니다.
elif "일시" in line:
events.append(line.split("일시")[1])
# 일정 또는 일시가 없는 경우 예외를 발생시킵니다.
if not events:
raise ValueError("이미지에서 일정 또는 일시를 찾을 수 없습니다.")
# 구글 캘린더 API를 초기화합니다.
service = googleapiclient.discovery.build("calendar", "v3")
# 각 일정 또는 일시를 구글 캘린더에 업로드합니다.
for event in events:
# 일정을 업로드합니다.
if "일정" in event:
event_data = {
"summary": event,
"start": {"dateTime": "2023-12-14T00:00:00Z"},
"end": {"dateTime": "2023-12-14T23:59:59Z"},
}
service.events().insert(calendarId="primary", body=event_data).execute()
# 일시를 업로드합니다.
elif "일시" in event:
event_data = {
"summary": "",
"start": {"dateTime": event},
}
service.events().insert(calendarId="primary", body=event_data).execute()
# 성공 메시지를 출력합니다.
print("일정 또는 일시를 구글 캘린더에 성공적으로 업로드했습니다.")
import cv2
import pytesseract
import datetime
import pytz
from google.oauth2 import service_account
from google.cloud import calendar
def extract_text(image_path):
# 이미지를 읽어 들입니다.
image = cv2.imread(image_path)
# OCR을 사용하여 텍스트를 추출합니다.
text = pytesseract.image_to_string(image)
# 텍스트를 정규 표현식으로 분리합니다.
matches = re.findall(r"(?P<date>.+) (?P<time>.+)", text)
# 날짜와 시간 정보를 추출합니다.
if matches:
date = datetime.datetime.strptime(matches[0][0], "%Y-%m-%d")
time = datetime.datetime.strptime(matches[0][1], "%H:%M")
else:
return None
# 현재 시간대를 고려하여 일시를 생성합니다.
now = datetime.datetime.now(pytz.timezone("Asia/Seoul"))
if time < now:
date = date + datetime.timedelta(days=1)
# 일시를 구글 캘린더에 추가합니다.
credentials, project_id = service_account.Credentials.from_service_account_file("credentials.json")
client = calendar.Client(credentials=credentials, project_id=project_id)
event = {
"summary": "일정",
"start": {
"dateTime": f"{date}T{time}:00+09:00"
},
"end": {
"dateTime": f"{date}T{time + datetime.timedelta(hours=1)}:00+09:00"
},
}
client.events().insert(calendarId="primary", body=event).execute()
def main():
# 이미지 파일 경로를 입력받습니다.
image_path = input("이미지 파일 경로를 입력하세요: ")
# 텍스트를 추출하고 구글 캘린더에 추가합니다.
extract_text(image_path)
if __name__ == "__main__":
main()
import cv2
import pytesseract
import datetime
import calendar
def extract_text_from_image(image_path):
# 이미지를 읽어온다.
image = cv2.imread(image_path)
# OpenCV의 tesseract 라이브러리를 사용하여 이미지에서 텍스트를 추출한다.
text = pytesseract.image_to_string(image)
return text
def extract_schedule(text):
# 텍스트에서 일정을 추출한다.
matches = re.findall(r"(.*) (.*)", text)
if matches:
return matches[0]
else:
return None
def extract_date(text):
# 텍스트에서 일시를 추출한다.
matches = re.findall(r"\d{4}-\d{2}-\d{2} (.*)", text)
if matches:
return matches[0]
else:
return None
def create_event(schedule, date):
# 구글 캘린더에 이벤트를 생성한다.
event = {
"summary": schedule,
"start": {
"dateTime": date + "T00:00:00Z"
},
"end": {
"dateTime": date + "T23:59:59Z"
}
}
# 이벤트를 생성한다.
calendar.events().insert(calendarId="primary", body=event).execute()
def main():
# 이미지 파일 경로를 입력받는다.
image_path = input("이미지 파일 경로를 입력하세요: ")
# 이미지에서 텍스트를 추출한다.
text = extract_text_from_image(image_path)
# 텍스트에서 일정 또는 일시를 추출한다.
schedule = extract_schedule(text)
date = extract_date(text)
# 일정 또는 일시가 추출되지 않은 경우 예외를 발생시킨다.
if schedule is None or date is None:
raise Exception("일정 또는 일시를 추출할 수 없습니다.")
# 이벤트를 생성한다.
create_event(schedule, date)
if __name__ == "__main__":
main()