본 프로젝트는 한성대학교 '우리가 걸어갈 길' 팀이 진행한 2025 Cisco Innovation Challenge 참가작의 일부입니다.
이 시스템은 고흥 군청 공식 웹사이트의 공지사항의 자동 크롤링, 이미지 내 텍스트 추출 (OCR),
그리고 임베딩 생성 및 벡터 데이터베이스 저장의 전 과정을 자동화하여,
관리자 시스템에서 '업데이트' 버튼만 누르면 최신 공지 데이터가 자동으로 갱신되도록 구성되어 있습니다.
관리자는 복잡한 수작업 없이도 최신 공지사항을 손쉽게 시스템에 반영할 수 있습니다.
- Language: Python 3.9
- Web Framework: FastAPI
- ASGI Server: Uvicorn
- Database: MySQL, Pinecone (Vector DB)
- ORM: SQLAlchemy
- OCR: Apple Vision API (via
pyobjc-framework-Vision)
crawl-embedding/
│
├── app/ # 주요 기능 디렉토리
│ ├── config.py # 환경 설정 파일
│ ├── crawl.py # 공지사항 크롤링 기능
│ ├── database.py # DB 연결 및 세션 관리
│ ├── embedding.py # 임베딩 및 벡터 DB 저장
│ ├── get_latest_notice_date.py # 최신 공지사항 날짜 확인
│ ├── main.py # FastAPI 엔트리포인트
│ ├── models.py # SQLAlchemy 모델 정의
│ └── parse_images.py # 이미지 OCR 및 텍스트 추출
│
├── .gitignore # Git 추적 제외 파일 목록
└── requirements.txt # 패키지 의존성 목록
get_latest_notice_date.py: DB에 저장된 가장 최신 공지사항의 날짜를 확인합니다.crawl.py: 고흥 군청 공식 웹사이트에서 새로운 공지사항(제목, 내용, 날짜, 이미지 URL 등)을 크롤링합니다.- 새로 수집된 공지사항 데이터를 MySQL 데이터베이스에 저장합니다.
- 이미지가 포함된 공지사항을 자동으로 식별합니다.
- 이미지 URL에서 이미지를 다운로드한 후, Apple Vision API을 사용해 텍스트를 추출합니다.
- 추출된 텍스트는 기존 공지사항 본문에 통합되어 저장됩니다.
- 텍스트 데이터(본문 + 이미지 텍스트)를 전처리한 후, OpenAI API를 사용하여 임베딩 벡터를 생성합니다.
- 생성된 벡터는 Pinecone 벡터 DB에 저장되며, 공지 ID, 날짜 등의 메타데이터와 함께 관리됩니다.
- 새로운 공지사항이 존재할 경우 아래 파이프라인이 자동으로 실행됩니다:
공지사항 수집 → 이미지 OCR → 임베딩 → 벡터 DB 저장 → DB 상태 업데이트
- 외부 관리자 시스템과의 연동을 위한 API 서버를 제공합니다.
- 관리자 페이지에서 '업데이트' 버튼 클릭 시 전체 파이프라인이 실행되도록 설계되어 있습니다.
Python 3.9 버전을 사용하여 가상 환경을 생성합니다:
/opt/homebrew/opt/[email protected]/bin/python3.9 -m venv venv
위 명령어는 Homebrew로 Python 3.9를 설치한 macOS 환경을 기준으로 작성되었습니다.
일반적인 환경에서는
python3.9 -m venv venv로 대체 가능합니다.
가상 환경을 활성화합니다:
source venv/bin/activate패키지 캐시 없이 설치하려면 다음 명령어를 사용합니다:
pip install --no-cache-dir -r requirements.txt프로젝트 루트 디렉토리에 .env 파일을 생성하고 아래 형식에 맞춰 정보를 입력하세요:
DB_HOST=your_database_host
DB_USER=your_database_user
DB_PASSWORD=your_database_password
DB_NAME=your_database_name
OPENAI_API_KEY=your_openai_api_key
PINECONE_API_KEY=your_pinecone_api_key주의: 이 파일은 민감한 정보를 포함하므로 .gitignore에 반드시 포함되어야 하며, 절대 커밋하지 않도록 주의하세요
MySQL을 실행한 후, 터미널에서 아래 명령어로 데이터베이스를 생성합니다:
CREATE DATABASE your_database_name;your_database_name은 .env의 DB_NAME과 일치해야 합니다.
FastAPI 서버를 실행합니다:
venv/bin/python -m uvicorn app.main:app --reload 기본적으로 http://127.0.0.1:8000 에서 실행됩니다.
본 프로젝트는 Apple의 Vision.framework를 활용하는 관계로 macOS에서만 정상적으로 동작합니다.
Linux 또는 Windows에서는 Apple Vision API가 지원되지 않기 때문에,
이미지 텍스트 추출 기능을 사용하려면 대체 OCR 솔루션(Tesseract 등)으로 커스터마이징이 필요합니다.
이 프로젝트는 MIT 라이선스를 따릅니다.
