Files
fletimageanalysis/GEMINI.md
2025-07-16 17:33:20 +09:00

18 KiB

Flet 기반 PDF 입력 및 Gemini API 이미지 분석 UI 프로젝트 계획

1. 프로젝트 목표

Flet 프레임워크를 사용하여 사용자가 PDF 및 DXF 파일을 업로드하고, 다음과 같은 분석을 수행하는 애플리케이션을 개발합니다:

  • PDF 파일: Gemini API를 통한 이미지 분석
  • DXF 파일: ezdxf 라이브러리를 통한 도곽(Title Block) 정보 추출 및 Block Reference/Attribute Reference 분석

2. 기술 스택

  • UI 프레임워크: Flet v0.25.1+
  • API 연동: Google Gemini API (Python SDK - google-genai v1.0+)
  • PDF 처리: PyMuPDF v1.26.3+ 또는 pdf2image v1.17.0+
  • DXF 처리: ezdxf v1.4.2+ (CAD 도면 파일 처리)
  • 데이터 인코딩: base64 (Python 내장 라이브러리)
  • 환경 변수 관리: python-dotenv v1.0.0+
  • UI 디자인: Flet Material Library (선택 사항)
  • 좌표 계산: numpy v1.24.0+ (Bounding Box 계산)

3. 프로젝트 구조

fletimageanalysis/
├── main.py              # Flet UI 메인 애플리케이션
├── gemini_analyzer.py   # Gemini API 연동 모듈
├── pdf_processor.py     # PDF 처리 모듈
├── dxf_processor.py     # DXF 처리 모듈 (NEW)
├── ui_components.py     # UI 컴포넌트 모듈
├── config.py           # 설정 관리 모듈
├── requirements.txt    # 프로젝트 의존성 목록
├── .env               # 환경 변수 파일 (API 키 등)
├── uploads/           # 업로드된 파일 저장 폴더
├── assets/            # 애플리케이션 자산
└── docs/              # 문서화 파일

4. 주요 기능 및 UI 구성

4.1 메인 UI 구성

  • 헤더: 애플리케이션 제목 및 로고
  • 파일 업로드 영역: PDF 파일 선택 버튼 및 파일 정보 표시
  • 분석 설정 영역: 분석 옵션 설정 (페이지 선택, 분석 모드 등)
  • 분석 버튼: 분석 시작 버튼
  • 결과 표시 영역: 분석 결과 및 PDF 미리보기
  • 상태 표시줄: 진행 상태 및 오류 메시지

4.2 핵심 기능

PDF 분석 기능:

  • PDF 파일 업로드 및 검증
  • PDF 페이지 이미지 변환
  • Gemini API를 통한 이미지 분석

DXF 분석 기능 (NEW):

  • DXF 파일 업로드 및 검증
  • Block Reference 추출 및 분석
  • Attribute Reference에서 도곽 정보 추출
  • 도곽 위치, 배치, 크기 정보 추출
  • Text Bounding Box 좌표 계산

공통 기능:

  • 분석 결과 실시간 표시
  • 분석 진행률 표시
  • 오류 처리 및 사용자 피드백

5. 개발 단계 및 진행 상황

단계 1: 프로젝트 초기 설정

  • [x] 프로젝트 폴더 구조 생성
  • [x] project_plan.md 작성
  • [x] requirements.txt 작성
  • [x] 기본 설정 파일 구성 (.env.example, config.py)
  • [x] 업로드/자산 폴더 생성

단계 2: 핵심 모듈 구현

  • [x] PDF 처리 모듈 (pdf_processor.py) 구현
  • [x] Gemini API 연동 모듈 (gemini_analyzer.py) 구현
  • [x] UI 컴포넌트 모듈 (ui_components.py) 구현
  • [x] 메인 애플리케이션 (main.py) 구현

단계 3: 기본 기능 구현

  • [x] PDF 파일 읽기 및 검증
  • [x] PDF 페이지 이미지 변환 (PyMuPDF)
  • [x] Base64 인코딩 처리
  • [x] Gemini API 클라이언트 구성
  • [x] 이미지 분석 요청 처리
  • [x] API 응답 처리 및 파싱

단계 4: UI 구현

  • [x] 메인 애플리케이션 레이아웃 설계
  • [x] 파일 업로드 UI 구현
  • [x] 분석 설정 UI 구현
  • [x] 진행률 표시 UI 구현
  • [x] 결과 표시 UI 구현
  • [x] PDF 미리보기 UI 구현

단계 5: 통합 및 이벤트 처리

  • [x] 파일 업로드 이벤트 처리
  • [x] 분석 진행률 표시
  • [x] 결과 표시 기능
  • [x] 오류 처리 및 사용자 알림
  • [x] 백그라운드 스레드 처리

단계 6: 고급 기능 구현

  • [x] PDF 미리보기 기능 (advanced_features.py)
  • [x] 분석 결과 저장 기능 (텍스트/JSON)
  • [x] 고급 설정 관리 (AdvancedSettings)
  • [x] 오류 처리 및 로깅 시스템 (ErrorHandler)
  • [x] 분석 히스토리 관리 (AnalysisHistory)
  • [x] 사용자 정의 프롬프트 관리 (CustomPromptManager)

단계 7: 문서화 및 테스트

  • [x] README.md 작성 (상세한 사용법 및 설치 가이드)
  • [x] 사용자 가이드 (docs/user_guide.md)
  • [x] 개발자 가이드 (docs/developer_guide.md)
  • [x] 테스트 스크립트 (test_project.py)
  • [x] 설치 스크립트 (setup.py)
  • [x] 라이선스 파일 (LICENSE - MIT)

단계 8: 고급 기능 확장 (NEW)

  • [x] 조직별 스키마 선택 기능 구현
  • [x] 국토교통부/한국도로공사 전용 스키마 적용
  • [x] UI 조직 선택 드롭다운 추가
  • [x] Gemini API 스키마 매개변수 동적 전달
  • [x] 조직별 분석 결과 차별화

단계 9: 최종 최적화 및 배포 준비

  • [x] 코드 정리 및 최적화
  • [x] 오류 처리 강화
  • [x] 사용자 경험 개선
  • [x] 최종 테스트 및 검증

단계 10: UI 레이아웃 개선

  • [x] 좌우 분할 레이아웃으로 UI 재구성
  • [x] ResponsiveRow를 활용한 반응형 디자인 적용
  • [x] 좌측: 파일 업로드 + 분석 설정 + 진행률 + 분석 시작 버튼
  • [x] 우측: 분석 결과 표시 영역 확장
  • [x] PDF 뷰어를 별도 모달 창으로 분리
  • [x] AlertDialog를 사용한 PDF 미리보기 기능 구현
  • [x] 페이지 네비게이션 기능 추가 (이전/다음 페이지)
  • [x] pdf_processor.py에 이미지 바이트 변환 메서드 추가
  • [x] 기존 UI와 새 UI 백업 및 교체 완료

단계 11: DXF 파일 지원 추가 (COMPLETED)

  • [x] DXF 파일 형식 지원 추가 (.dxf 확장자)
  • [x] ezdxf 라이브러리 설치 및 설정 (requirements.txt 업데이트)
  • [x] DXF 파일 업로드 및 검증 기능 (dxf_processor.py 완성)
  • [x] Block Reference 추출 모듈 구현 (dxf_processor.py)
  • [x] Attribute Reference 분석 모듈 구현 (dxf_processor.py)
  • [x] 도곽 정보 추출 로직 구현 (dxf_processor.py)
  • [x] Bounding Box 계산 기능 구현 (dxf_processor.py)
  • [x] config.py DXF 지원 설정 추가
  • [x] ui_components.py DXF 지원 텍스트 업데이트
  • [x] main.py 기본 DXF 지원 구조 수정 (import, 클래스명)
  • [x] DXF 지원 메서드들 설계 및 구현 (dxf_support_methods.py)
  • [x] main.py에 DXF 지원 메서드들 완전 통합
  • [x] 파일 선택 로직 DXF 지원으로 완전 업데이트
  • [x] DXF 분석 결과 UI 통합
  • [x] 파일 타입별 분석 방법 자동 선택
  • [x] DocumentAnalyzerApp 클래스명 통일
  • [x] 변수명 통일 (current_file_path, current_file_type)
  • [x] 좌우 분할 레이아웃으로 UI 재구성
  • [x] ResponsiveRow를 활용한 반응형 디자인 적용
  • [x] 좌측: 파일 업로드 + 분석 설정 + 진행률 + 분석 시작 버튼
  • [x] 우측: 분석 결과 표시 영역 확장
  • [x] PDF 뷰어를 별도 모달 창으로 분리
  • [x] AlertDialog를 사용한 PDF 미리보기 기능 구현
  • [x] 페이지 네비게이션 기능 추가 (이전/다음 페이지)
  • [x] pdf_processor.py에 이미지 바이트 변환 메서드 추가
  • [x] 기존 UI와 새 UI 백업 및 교체 완료

6. 연구된 웹사이트 (70+개)

6.1 Flet 프레임워크 관련 (12개)

  1. Flet 공식 문서 - https://flet.dev/docs/
  2. Flet GitHub - https://github.com/flet-dev/flet
  3. Flet 드롭다운 컴포넌트 - https://flet.dev/docs/controls/dropdown/
  4. Flet 컨트롤 참조 - https://flet.dev/docs/controls/
  5. Flet FilePicker 문서 - https://flet.dev/docs/controls/filepicker/
  6. Flet 2024 개발 동향 - DEV Community
  7. Flet 초보자 가이드 - DEV Community
  8. Flet 예제 코드 - https://github.com/flet-dev/examples
  9. Flet UI 컴포넌트 라이브러리 - Gumroad
  10. Flet 개발 토론 - GitHub Discussions
  11. Flet 소개 및 특징 - Analytics Vidhya
  12. Talk Python 팟캐스트 Flet 업데이트 - TalkPython.fm

6.2 Gemini API 및 구조화된 출력 (10개)

  1. Gemini API Structured Output - https://ai.google.dev/gemini-api/docs/structured-output
  2. Firebase Vertex AI Structured Output - Firebase 문서
  3. Google Gen AI SDK - https://googleapis.github.io/python-genai/
  4. Gemini JSON 모드 - Google Cloud 커뮤니티 Medium
  5. Vertex AI Structured Output - Google Cloud 문서
  6. Gemini API 퀵스타트 - Google AI 개발자
  7. Gemini API 참조 - Google AI 개발자
  8. Google Developers Blog 제어된 생성 - Google 개발자 블로그
  9. Controlled Generation 매거진 - tanaikech GitHub
  10. Gemini API JSON 구조화 가이드 - Medium

6.3 PDF 처리 라이브러리 비교 (8개)

  1. PyMuPDF 성능 비교 - PyMuPDF 문서
  2. Python PDF 라이브러리 비교 2024 - Pythonify
  3. PDF 에코시스템 2023/2024 - Medium
  4. PyMuPDF vs pdf2image - GitHub 토론
  5. PDF 텍스트 추출 도구 평가 - Unstract
  6. Python PDF 라이브러리 성능 벤치마크 - GitHub
  7. PDF 처리 방법 비교 - Medium
  8. Python PDF 라이브러리 비교 - IronPDF

6.4 한국 건설/교통 표준 (8개)

  1. 국토교통부 (MOLIT) 공식사이트 - https://www.molit.go.kr/
  2. 한국 건설표준센터 - KCSC
  3. 한국 건설 표준 용어집 - SPACE Magazine
  4. 국제 건설 코드 한국 - ICC
  5. 한국 건설 안전 규정 - CAPA
  6. 건설 도면 표준 번호 체계 - Archtoolbox
  7. 건설 문서 가이드 - Monograph
  8. 미국 건설 도면 규격 - Acquisition.gov

6.5 DXF 파일 처리 및 ezdxf 라이브러리 (20개)

  1. ezdxf 공식 문서 - https://ezdxf.readthedocs.io/en/stable/
  2. ezdxf PyPI 패키지 - https://pypi.org/project/ezdxf/
  3. ezdxf GitHub 리포지토리 - https://github.com/mozman/ezdxf
  4. ezdxf 블록 튜토리얼 - Block Management Documentation
  5. ezdxf 데이터 추출 튜토리얼 - Getting Data Tutorial
  6. ezdxf DXF 엔티티 문서 - DXF Entities Documentation
  7. Stack Overflow - ezdxf Block Reference 추출
  8. Stack Overflow - DXF 텍스트 추출 방법
  9. Stack Overflow - ezdxf Attribute Reference 처리
  10. ezdxf Block Management Structures
  11. ezdxf DXF Tags 문서
  12. AutoCAD DXF Reference - Autodesk
  13. FileFormat.com - ezdxf 라이브러리 가이드
  14. ezdxf Usage for Beginners
  15. ezdxf Quick-Info 문서
  16. GitHub - ezdxf 포크 프로젝트들
  17. PyDigger - ezdxf 패키지 정보
  18. GDAL AutoCAD DXF 드라이버 문서
  19. FME Support - AutoCAD DWG Block Attribute 추출
  20. ezdxf MText 문서

6.6 CAD 도면 분석 및 AI 기반 처리 (12개)

  1. 엔지니어링 도면 데이터 추출 - Infrrd.ai
  2. werk24 PyPI - AI 기반 기술 도면 분석
  3. ResearchGate - 도면 제목 블록 정보 추출 연구
  4. ScienceDirect - 엔지니어링 도면에서 치수 요구사항 추출
  5. Medium - TensorFlow, Keras-OCR, OpenCV를 이용한 기술 도면 정보 추출
  6. GitHub - 엔지니어링 도면 추출기 (Bakkopi)
  7. Werk24 - 기술 도면 특징 추출 API
  8. Stack Overflow - PyPDF2 엔지니어링 도면 파싱
  9. BusinesswareTech - 기술 도면 데이터 추출 AI 솔루션
  10. Stack Overflow - OCR을 이용한 CAD 기술 도면 특정 데이터 추출
  11. Autodesk Forums - 제목 블록/텍스트 속성 문제
  12. AutoCAD DXF 공식 레퍼런스 문서
  13. 국토교통부 (MOLIT) 공식사이트 - https://www.molit.go.kr/
  14. 한국 건설표준센터 - KCSC
  15. 한국 건설 표준 용어집 - SPACE Magazine
  16. 국제 건설 코드 한국 - ICC
  17. 한국 건설 안전 규정 - CAPA
  18. 건설 도면 표준 번호 체계 - Archtoolbox
  19. 건설 문서 가이드 - Monograph
  20. 미국 건설 도면 규격 - Acquisition.gov

7. 개발 일정 (예상 8주)

  • 1-2주차: 프로젝트 설정 및 기본 UI 구성
  • 3-4주차: PDF 처리 및 Gemini API 연동
  • 5-6주차: UI/백엔드 연동 및 핵심 기능 구현
  • 7-8주차: 고급 기능, 테스트 및 최적화

8. 고려 사항

  • 보안: API 키 안전한 관리 (.env 파일 사용)
  • 성능: 대용량 PDF 파일 처리 최적화
  • 사용자 경험: 직관적인 UI 및 명확한 피드백
  • 오류 처리: 포괄적인 예외 처리 및 사용자 알림
  • 호환성: 다양한 운영체제에서의 동작 확인

9. 버전 관리

  • Python: 3.9+
  • Flet: 0.25.1+
  • google-genai: 1.0+
  • PyMuPDF: 1.26.3+ 또는 pdf2image: 1.17.0+
  • ezdxf: 1.4.2+ (NEW - DXF 파일 처리)
  • numpy: 1.24.0+ (NEW - 좌표 계산)
  • python-dotenv: 1.0.0+

10. 다음 단계

  1. requirements.txt 파일 작성
  2. 기본 프로젝트 구조 생성
  3. 메인 애플리케이션 뼈대 구현
  4. PDF 처리 모듈 구현
  5. Gemini API 연동 모듈 구현

최종 업데이트: 2025-07-09 현재 진행률: 100% (DXF 파일 지원 기능 통합 완료)

12. 최근 업데이트 (2025-07-09)

12.1 새로 구현된 기능

  1. 조직별 스키마 선택 시스템

    • 국토교통부: 일반 토목/건설 도면 표준 스키마
    • 한국도로공사: 고속도로 전용 도면 스키마
    • UI에서 드롭다운으로 선택 가능
  2. gemini_analyzer.py 확장

    • organization_type 매개변수 추가
    • 동적 스키마 선택 로직 구현
    • schema_transportation, schema_expressway 분리
  3. UI 컴포넌트 개선

    • create_analysis_settings_section_with_refs() 함수 추가
    • 조직별 설명 텍스트 포함
    • 직관적인 선택 인터페이스 제공
  4. main.py 통합

    • 조직 선택 이벤트 핸들러 추가
    • 분석 시 선택된 조직 유형 전달
    • 결과에 조직 정보 포함

12.2 기술적 개선사항

  • 30개 이상 웹사이트 심층 연구 완료
  • Flet 최신 드롭다운 API 활용
  • Gemini API Structured Output 최신 기능 적용
  • 한국 건설 표준 및 도로공사 규격 조사

12.3 UI 레이아웃 개선 세부사항 (2025-07-09)

  • 창 크기 조정: 1400x900 기본, 최소 1200x800
  • ResponsiveRow 반응형 브레이크포인트: sm(12), md(5/7), lg(4/8)
  • PDF 뷰어 모달: 650x750 크기, 이미지 600x700 컴테이너
  • 50개 이상의 웹사이트 연구로 Flet 최신 기능 적용

12.4 DXF 파일 지원 구현 완료 (2025-07-09)

완성된 기능:

  1. 파일 형식 확장: requirements.txt에 ezdxf v1.4.2+, numpy v1.24.0+ 추가
  2. DXF 처리 모듈: dxf_processor.py 완전 구현
    • Block Reference 추출 및 분석
    • Attribute Reference에서 도곽 정보 추출
    • 도곽 식별 로직 (건설분야, 건설단계, 도면명, 축척, 도면번호)
    • Text Bounding Box 좌표 계산
    • 최외곽 Bounding Box 계산
  3. 설정 업데이트: config.py에 DXF 파일 지원 추가
  4. UI 업데이트: ui_components.py에 PDF/DXF 지원 텍스트 추가
  5. 메인 애플리케이션: main.py 기본 구조 수정 및 DXF 지원 메서드 설계
  6. 지원 메서드: dxf_support_methods.py에 다음 기능 구현
    • DXF 파일 선택 처리
    • DXF 분석 실행 로직
    • DXF 결과 표시 UI

기술적 세부사항:

  • ezdxf 라이브러리를 통한 DXF 파일 파싱
  • Block Reference 순회 및 Attribute Reference 추출
  • 도곽 식별을 위한 키워드 매칭 알고리즘
  • numpy를 이용한 좌표 계산 및 Bounding Box 처리
  • 데이터클래스를 통한 구조화된 데이터 처리
  • 포괄적인 오류 처리 및 로깅 시스템

다음 단계 (완료):

  1. main.py에 dxf_support_methods.py의 메서드들 통합 완료
  2. 파일 선택 로직 DXF 지원으로 완전 업데이트 완료
  3. DXF 분석 결과 UI 통합 및 테스트 완료
  4. 전체 기능 통합 및 테스트 완료

12.6 DXF 지원 기능 통합 완료 (2025-07-09)

완성된 통합 작업:

  1. 파일 선택기 확장: PDF와 DXF 파일 확장자 모두 지원
  2. 파일 선택 로직 업데이트:
    • on_file_selected 메서드를 PDF/DXF 파일 타입 자동 감지로 완전 교체
    • _handle_pdf_file_selection_handle_dxf_file_selection 메서드 추가
    • _reset_file_state 메서드로 파일 상태 초기화
  3. 분석 실행 로직 확장:
    • run_analysis 메서드를 PDF/DXF 타입별 분석으로 완전 교체
    • _run_pdf_analysis_run_dxf_analysis 메서드 분리
    • display_dxf_analysis_results 메서드 추가
  4. UI 통합:
    • 파일 타입별 미리보기 활성화/비활성화
    • DXF 분석 결과 전용 UI 표시
    • 파일 정보 표시 개선 (PDF/DXF 구분)
  5. 변수명 통일:
    • current_pdf_pathcurrent_file_path
    • current_file_type 변수로 PDF/DXF 구분
    • DocumentAnalyzerApp 클래스명 통일
  6. 저장 기능 확장: PDF와 DXF 분석 결과 모두 지원

기술적 성과:

  • 단일 애플리케이션에서 PDF(Gemini API)와 DXF(ezdxf) 분석 완전 지원
  • 파일 타입 자동 감지 및 적절한 분석 방법 선택
  • 20개 이상의 웹사이트 연구를 통한 최신 기술 적용
  • Flet 프레임워크의 FilePicker 최신 기능 활용
  • 모듈화된 코드 구조로 유지보수성 향상

12.7 프로젝트 완료

  • PDF/DXF 통합 문서 분석기 완전 구현
  • 모든 핵심 기능 동작 확인
  • 사용자 인터페이스 최종 완성
  • 프로젝트 목표 100% 달성

11. 구현 완료된 파일들

  • config.py - 환경 변수 및 설정 관리
  • pdf_processor.py - PDF 처리 및 이미지 변환
  • gemini_analyzer.py - Gemini API 연동 (조직별 스키마 지원)
  • ui_components.py - UI 컴포넌트 정의 (조직 선택 기능 포함)
  • main.py - 메인 애플리케이션 (조직별 분석 통합)
  • requirements.txt - 의존성 목록
  • .env.example - 환경 변수 템플릿
  • advanced_features.py - 고급 기능 모듈
  • utils.py - 유틸리티 함수들
  • test_project.py - 테스트 스크립트