[파이썬] 웹 프레임워크를 이용한 실시간 영상 스트리밍

영상 스트리밍은 현대의 웹 애플리케이션에서 매우 중요한 부분입니다. 사용자들이 실시간으로 영상을 볼 수 있도록 해주는 것은 매우 강력한 기능입니다. 이번 블로그 포스트에서는 Python 웹 프레임워크를 사용하여 실시간 영상 스트리밍을 구현하는 방법에 대해 알아보겠습니다.

웹 프레임워크 선택

Python에서는 다양한 웹 프레임워크를 사용할 수 있지만, 이번 예제에서는 Flask를 사용할 것입니다. Flask는 Python으로 개발된 마이크로 웹 프레임워크로서 가볍고 간단하면서도 강력한 기능을 제공합니다.

OpenCV를 사용한 영상 처리

영상 스트리밍을 위해선 OpenCV 라이브러리를 사용하여 영상을 처리해야 합니다. OpenCV는 컴퓨터 비전 및 영상 처리를 위한 오픈 소스 라이브러리로, Python과의 통합이 잘 되어 있습니다. 다음은 OpenCV를 사용하여 영상을 읽고 처리하는 간단한 예제입니다:

import cv2

cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    
    if ret:
        # 영상 처리 작업 수행
        
        # 영상 프레임을 웹 브라우저에 전송
        
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

위 예제에서 cap 객체는 카메라로부터 영상을 가져오기 위해 사용되며, cap.read() 함수는 현재 프레임을 읽어옵니다. 이후에 필요한 영상 처리 작업을 수행한 뒤, 처리된 프레임을 웹 브라우저에 전송해야 합니다.

Flask를 사용한 웹 서버 구축

이제 OpenCV로 영상을 읽어와 처리하는 코드를 작성했으니, 이를 Flask를 사용하여 웹 서버에 탑재해 보겠습니다. Flask는 쉽게 설치하고 설정할 수 있으며, 다음 예제와 같이 간단하게 웹 서버를 구축할 수 있습니다:

from flask import Flask, render_template, Response
import cv2

app = Flask(__name__)

cap = cv2.VideoCapture(0)

def gen_frames():
    while True:
        ret, frame = cap.read()
        
        if not ret:
            break
            
        # 영상 처리 작업 수행
        
        ret, buffer = cv2.imencode('.jpg', frame)
        frame = buffer.tobytes()
        
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
        
@app.route('/')
def index():
    return render_template('index.html')

@app.route('/video_feed')
def video_feed():
    return Response(gen_frames(),
                    mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == '__main__':
    app.run(debug=True)

위 예제에서 gen_frames() 함수는 cap 객체로부터 프레임을 읽어와 영상 처리를 수행한 뒤, JPEG 형식으로 변환합니다. 이후 프레임을 서버로 전송하기 위해 multipart/x-mixed-replace라는 MIME 타입을 사용하여 응답을 생성합니다. 이를 통해 클라이언트는 실시간으로 업데이트되는 영상을 스트리밍으로 받아볼 수 있습니다.

결론

이번 블로그 포스트에서는 Python 웹 프레임워크를 사용하여 실시간 영상 스트리밍을 구현하는 방법에 대해 알아보았습니다. 웹 프레임워크로 Flask를 선택하고, OpenCV를 사용하여 영상 처리를 수행한 뒤, Flask 서버에 탑재하여 클라이언트에게 실시간으로 영상을 스트리밍하는 방식을 소개했습니다. 이를 통해 사용자들은 웹 브라우저를 통해 실시간 영상을 감상할 수 있게 됩니다.

감사합니다!