FastAPI 실시간 영상 스트리밍 OpenCV
FastAPI와 OpenCV를 활용한 실시간 영상 스트리밍
실시간 영상을 스트리밍 하는 방법을 찾던 중 파이썬 FastAPI를 활용한 방법을 시도 해보았다.
필수 라이브러리
필요한 것은
Python3.9버전 (애플 M1칩셋 맥북에어에서 3.8 버전으로 시도 해보니 OpenCV라이브러리 설치에서 문제가 발생했었다)
FastAPI
uvicorn
OpenCV
정도면 될 것 같다. 라이브러리들은 모두 설치 되었다고 가정 하고,
예제 코드
# main.py
# 라이브러리 import
# StreamingResponse를 가져와야함
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
# cv2 모듈 import
from cv2 import get_stream_video
# FastAPI객체 생성
app = FastAPI()
# openCV에서 이미지 불러오는 함수
def video_streaming():
return get_stream_video()
# 스트리밍 경로를 /video 경로로 설정.
@app.get("/video")
def main():
# StringResponse함수를 return하고,
# 인자로 OpenCV에서 가져온 "바이트"이미지와 type을 명시
return StreamingResponse(video_streaming(), media_type="multipart/x-mixed-replace; boundary=frame")
# cv2.py
import cv2
def get_stream_video():
# camera 정의
cam = cv2.VideoCapture(0)
while True:
# 카메라 값 불러오기
success, frame = cam.read()
if not success:
break
else:
ret, buffer = cv2.imencode('.jpg', frame)
# frame을 byte로 변경 후 특정 식??으로 변환 후에
# yield로 하나씩 넘겨준다.
frame = buffer.tobytes()
yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' +
bytearray(frame) + b'\r\n')
실행
FastAPI를 사용해 웹 서버를 여는 main.py파일과, openCV로 영상 데이터를 얻는 cv2.py모듈을 만들었다.
터미널
uvicorn main:app –reload
로 FastAPI서버를 실행 해보고 http://localhost:8000에 접속 해보면 OpenCV에서 불러온 영상들이 실시간으로 브라우저에서 잘 나오는것을 확인 할 수 있었다.