본문 바로가기

Coding/TIL

TIL | #15 | Tesseract OCR / Google Calendar | 23.12.13.(수)

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()