본문 바로가기
  • You find inspiration to create your own path !
업무 자동화/FreeCAD

AI를 학습 시킬수 있을까? - 컨셉

by ToolBOX01 2026. 6. 5.
반응형

■ 제미나이(Gemini)에 도면 이미지를 첨부, 자동으로 FreeCAD 3D 모델을 만들려면?

AI가 도면 이미지를 보고,  도면 분석, 치수 추출, FreeCAD 작업 절차(스케치 및 피처 생성 순서)를 완벽하게 설계해 줄 수 있어야 합니다. 훈련이 가능 할까요? 여러개의 매크로를 짜서 제미나이에게 이미지와 매크로로 훈련을 시킬수 있을까요? 유튜브 동영상을 이해하는 것을 확인 하였습니다.

제미나이(Gemini) 모델 자체를 사용자가 직접 가지고 있는 이미지와 매크로 코드로 '파인 튜닝(Fine-tuning, 미세조정)' 등 내부 가중치를 직접 변경하는 형태의 훈련은 현재 API 수준에서 제한적이거나 리소스가 많이 듭니다. 이러한 부분은 메이저 CAD 개발업체에서 해야 합니다.

 

아키텍처 다이어그램 (컨셉)

※ AI의 '가이드'

학습을 시킬때, 설계의 기준을 제공 해야 합니다. 아래는 예시 입니다. 테스트를 하면서 필요한 가이드 내용을 추가하여 제공 해야 합니다.

무엇을 만드는지 구체적인 분류 유형을 정의 합니다. 
평면(XY)를 기준으로 "기본 스케치(Base Sketch)"를 만들어야 합니다.

 


여러 개의 매크로 코드와 도면 이미지를 제미나이에게 '학습(Context 훈련)'시켜 나만의 FreeCAD 전문 AI API 서포터로 만드는 매우 확실하고 강력한 3가지 방법

1. Google AI Studio의 'System Instructions' 및 'Few-Shot' 활용 (추천)

개발자 환경인 Google AI Studio를 사용하면 제미나이에게 직접 대량의 예시를 주고 훈련(In-context Learning)시킬 수 있습니다.

 

1) System Instructions (역할 정의): 제미나이에게 "너는 FreeCAD 파이썬 API 전문가야. PartDesign 워크벤치를 주로 사용하며, 스크립트 작성 시 완전 구속조건(Constraints)을 반드시 포함해야 해"라는 규칙을 뼈대로 심어줍니다.

2) Few-Shot 예시 추가 (핵심 훈련): AI Studio에서는 'Input'과 'Output'의 쌍을 여러 개 등록할 수 있습니다.

  • Input 1: [정면/평면 도면 이미지 A]
  • Output 1: [내가 직접 검증한 FreeCAD 매크로 코드 A]
  • Input 2: [원형 부품 도면 이미지 B]
  • Output 2: [내가 직접 검증한 FreeCAD 매크로 코드 B]

3) 효과: 이렇게 5~10개 세트만 등록해 두면, 제미나이는 "아, 이 사용자는 이런 스타일의 도면을 보면 내가 준 예시 코드처럼 FreeCAD API를 짜야 하는구나"라고 완벽하게 패턴을 학습합니다. 그 후 새로운 도면을 던지면 학습된 스타일로 코드를 출력합니다.

 

2. Gemini 1.5 Pro의 초대형 콘텍스트 창(Context Window) 활용

제미나이 1.5 프로 모델은 약 200만 토큰의 거대한 기억 공간을 가지고 있습니다. 이를 활용해 대화창 하나를 나만의 'FreeCAD 매크로 훈련소'로 만드는 방법입니다.

1) 새 대화를 시작하고 가지고 계신 성공적인 FreeCAD 매크로 코드 파일(.py)들과 매칭되는 도면 이미지들을 한 번에 전부 업로드합니다.

2) 그리고 다음과 같이 명령합니다.
"지금부터 내가 업로드한 이미지들과 파이썬 매크로 코드들을 철저히 분석해. FreeCAD에서 객체를 생성하고, 스케치를 바인딩하고, 패드/포켓을 생성할 때 어떤 문법 구조를 썼는지 학습해 두고, 준비가 되면 '학습 완료'라고 답변해줘."

3) 제미나이가 학습을 마치면, 그 대화방 안에서 새로운 도면을 주며 "이 도면도 방금 학습한 스타일의 파이썬 코드로 짜줘"라고 요청합니다. 대화방이 유지되는 한 제미나이는 그 지식을 완벽히 기억합니다.

 

3. RAG(검색 증강 생성) 기반의 나만의 GPTs/Vertex AI 챗봇 만들기

매크로 코드의 양이 수십, 수백 개가 넘어가거나, FreeCAD API 공식 문서 전체를 학습시키고 싶다면 RAG(Retrieval-Augmented Generation) 방식을 사용해야 합니다.

1) 구현 방법: Google Cloud의 Vertex AI나 Agent Builder를 활용하여, 내가 수집한 FreeCAD 매크로 코드 스니펫(코드 저장소)과 도면 해석 가이드를 PDF나 텍스트 파일로 업로드하여 데이터베이스화(Vector DB)합니다.

2) 원리: 사용자가 도면 이미지를 주면, AI가 내 데이터베이스에서 가장 유사한 기존 매크로 코드를 먼저 검색(Retrieval)해 온 뒤, 이를 참고하여 새 코드를 합성(Generation)해 줍니다.


파이썬 코드를 통해 FreeCAD를 GUI 창 없이 백그라운드(콘솔 모드 또는 headless 모드)로 실행하는 방법은 크게 두 가지가 있습니다

방법 1: subprocess 모듈로 FreeCADCmd 실행하기 (가장 간단함)

FreeCAD를 설치하면 GUI 버전(FreeCAD.exe) 외에 커맨드라인 전용 버전인 FreeCADCmd가 함께 제공됩니다. 파이썬의 subprocess를 이용해 이를 백그라운드에서 호출하고, 원하는 파이썬 스크립트를 인자로 넘겨주는 방식입니다.

import subprocess
import os

# FreeCADCmd 실행 파일 경로 (본인의 설치 경로에 맞게 수정)
# Windows 예시:
freecad_path = r"C:\Program Files\FreeCAD 0.21\bin\FreeCADCmd.exe"
# Linux 예시: freecad_path = "FreeCADCmd" 또는 "/usr/bin/freecadcmd"

# FreeCAD 내부에서 실행할 파이썬 스크립트 파일 경로
script_path = os.path.abspath("my_script.py")

# 백그라운드 실행 (스크립트 실행 후 자동 종료)
try:
    # Windows에서 콘솔 창까지 완전히 숨기고 싶을 때 사용하는 옵션 (선택사항)
    startupinfo = None
    if os.name == 'nt':
        startupinfo = subprocess.STARTUPINFO()
        startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW

    result = subprocess.run(
        [freecad_path, script_path], 
        capture_output=True, 
        text=True, 
        startupinfo=startupinfo
    )
    
    # 결과 출력
    print("--- 표준 출력 ---")
    print(result.stdout)
    
    if result.stderr:
        print("--- 에러 출력 ---")
        print(result.stderr)

except FileNotFoundError:
    print(f"FreeCAD 경로를 찾을 수 없습니다: {freecad_path}")

주의:
my_script.py 내부에는 FreeCAD 전용 라이브러리(예: import Part, import App)를 다루는 코드가 들어가 있어야 합니다.

 

방법 2: 일반 파이썬 환경에서 FreeCAD 모듈 임포트하기 (강력 추천)

현재 실행 중인 파이썬 스크립트 내부에서 FreeCAD 기능을 마치 일반 라이브러리(numpy나 pandas처럼)처럼 쓰고 싶을 때 사용하는 방법입니다. GUI를 띄우지 않고 백그라운드에서 FreeCAD 엔진만 가져옵니다.

이를 위해서는 파이썬이 FreeCAD 라이브러리 경로(bin 및 lib)를 인식할 수 있도록 sys.path에 추가해 주어야 합니다

import sys
import os

# 1. FreeCAD 라이브러리 경로 설정 (본인의 설치 경로에 맞게 수정)
FREECAD_PATH = r"C:\Program Files\FreeCAD 0.21\bin"

if FREECAD_PATH not in sys.path:
    sys.path.append(FREECAD_PATH)

# Windows 환경에서 DLL 링크를 위해 DLL 경로도 추가 (파이썬 3.8 이상 필수)
if os.name == 'nt':
    os.add_dll_directory(FREECAD_PATH)

# 2. FreeCAD 모듈 임포트 (GUI 없이 백그라운드로 로드됨)
try:
    import FreeCAD as App
    import Part
    print("FreeCAD 모듈이 백그라운드에서 성공적으로 로드되었습니다.")
except ImportError as e:
    print(f"FreeCAD 모듈을 불러오지 못했습니다. 경로를 확인하세요: {e}")
    sys.exit(1)

# 3. 백그라운드에서 작업 수행 예시 (상자 만들기 및 STP 파일 저장)
doc = App.newDocument("BackgroundDoc")
box = doc.addObject("Part::Box", "MyBox")
box.Length = 10.0
box.Width = 20.0
box.Height = 30.0
doc.recompute()

# STEP 파일로 내보내기
output_path = os.path.abspath("output_box.stp")
Part.export([box], output_path)
print(f"파일이 성공적으로 저장되었습니다: {output_path}")



by korealionkk@gmail.com

반응형