[스마트팜] 식물 성장 영상 기록 애플리케이션 아이디어

 

🎥 FastAPI와 웹캠으로 만드는 웹 기반 타임랩스 애플리케이션

타임랩스 촬영은 느리게 변화하는 장면을 짧은 영상으로 요약하는 강력한 도구입니다. 이번 글에서는 Python, OpenCV, FastAPI를 활용하여 웹 기반 타임랩스 촬영 시스템을 직접 만들어보겠습니다.

✅ 프로젝트 목표

  • 웹캠을 이용해 일정 간격으로 사진 촬영

  • FastAPI 서버에서 촬영 시작/중지 제어

  • 웹 UI를 통해 간편하게 조작

  • 촬영된 사진들을 영상(mp4)으로 자동 변환

  • 최종 영상을 다운로드


🧱 사용 기술 스택

구성 요소설명
Python 3.x전체 애플리케이션 언어
FastAPI백엔드 API 서버
OpenCV (cv2)웹캠에서 이미지 캡처
imageio or ffmpeg이미지들을 mp4 영상으로 변환
HTML + JavaScript사용자 인터페이스
uvicornFastAPI 실행 서버

📁 프로젝트 구조

timelapse_app/ │ ├── main.py # FastAPI 서버 ├── index.html # 사용자 UI ├── images/ # 캡처된 이미지 저장 폴더 └── timelapse.mp4 # 완성된 타임랩스 영상

💡 핵심 기능 설명

1. 웹캠 캡처 백그라운드 실행

def capture_images(): cap = cv2.VideoCapture(0) while capture_flag: ret, frame = cap.read() if ret: filename = f"{output_dir}/{int(time.time())}.jpg" cv2.imwrite(filename, frame) time.sleep(60) # 60초 간격 cap.release()

2. FastAPI 엔드포인트 정의

@app.post("/start") def start_capture(background_tasks: BackgroundTasks): global capture_flag capture_flag = True background_tasks.add_task(capture_images) return {"status": "started"} @app.post("/stop") def stop_capture(): global capture_flag capture_flag = False return {"status": "stopped"}

3. HTML 프론트엔드 UI (index.html)

<h1>📷 Time-lapse Controller</h1> <button onclick="fetch('/start', {method: 'POST'})">Start</button> <button onclick="fetch('/stop', {method: 'POST'})">Stop</button> <a href="/video" download>Download Video</a>

🧪 실행 방법

1. 패키지 설치

pip install fastapi uvicorn opencv-python imageio

2. FastAPI 서버 실행

uvicorn main:app --reload

3. 웹 브라우저 접속

http://localhost:8000

🎬 영상 변환 기능 추가

촬영이 끝나면 아래 코드로 이미지들을 영상으로 만들 수 있습니다.

import imageio def create_timelapse(image_folder, output_file, fps=10): images = sorted(os.listdir(image_folder)) frames = [imageio.imread(os.path.join(image_folder, img)) for img in images if img.endswith('.jpg')] imageio.mimsave(output_file, frames, fps=fps)

🔧 확장 아이디어

  • WebSocket을 통한 실시간 웹캠 프리뷰

  • 타임랩스 설정값(간격, 해상도) 커스터마이징

  • 영상 자동 생성 및 다운로드 링크 제공

  • 사용 인증 및 업로드 기능 추가


✨ 마무리

이번 프로젝트는 하드웨어 제어 + 웹 UI + 비동기 백엔드 처리를 종합적으로 연습할 수 있는 좋은 예제입니다. 단순한 실험을 넘어, 실내 식물 재배 기록, 건설 현장 모니터링, DIY 프로젝트 기록 등에 응용할 수 있습니다.

직접 구현해보며 FastAPI의 간결함과 OpenCV의 실용성을 느껴보세요!

댓글

이 블로그의 인기 게시물

공압 속도 제어: 미터인 vs 미터아웃

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

[주식] 한국거래소(KRX) 데이터 API 입문 가이드

제너 다이오드에 저항을 연결하는 이유

[PLC] PLC 아날로그 입출력 기본

[자동화] 안쓰는 안드로이드폰을 활용한 식물 성장 타임랩스 촬영

[아두이노] 피에조 스피커 사용하기

NPN, PNP 트랜지스터 차이점

[주식] 코스피 지수 ETF 투자시 연간 수익률 산출

[PLC] 절연 변압기 (Isolation Transformer)