일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Windows
- golang
- go.mod
- pip
- Finance
- apt-get
- 주식
- 스트리밍
- 가상화 중첩화
- QT_QPA_PLATFORM_PLUGIN_PATH
- Replication
- go
- mariadb
- BATCH
- python3.9
- 영상스트리밍
- docker
- 레파지토리
- psutil
- FastAPI
- 자식프로세스
- repo
- Hyper-V
- dockercontainer
- Thread
- APT
- 파이썬
- 자원측정
- asyncio
- Python
- Today
- Total
검색하기귀찮아서만든블로그
[python] fastAPI 카메라 MJEPG 스트리밍 본문
fastAPI 로 웹서버를 구성한 후에
간단하게 카메라 영상을 웹 브라우저에서 스트리밍할 수 있는 API를 작성해 보았다.
영상 스트리밍은 MJPEG 방식으로 송신하였다. (JPEG 이미지 frame 을 연속적으로 보내는 방식)
[환경]
- windows 11 x64
- VisualStudioCode
- python 3.9.7
- venv
- fastAPI, uvicorn, opencv-python package
1. 카메라 디바이스에서 이미지를 수신하기 위하여 opencv 패키지를 설치한다.
> pip install opencv-python
2. 카메라를 오픈하고 영상을 JPEG frame 형태로 변환하는 함수를 작성하였다.
1) opencv 를 사용하여 카메라를 오픈한다.
2) mat 포맷의 이미지를 받는다.
3) 이미지는 JPEG 포맷으로 변환한다.
4) MJPEG 프로토콜에 맞게 boundary (PNPframe) 를 앞에 붙여주고 JPEG 이미지 데이터를 뒤에 붙여준다.
5) 이미지 frame 을 한 장씩 실시간으로 송출하기 위해서 yield 를 사용하여 데이터를 반환한다. (비동기 처리)
3. 영상 스트리밍을 위해 video 라는 API를 추가한다.
- MJEPG 규격에 맞는 헤더 정보를 입력해주고 프레임 구분 용도로 사용할 boundary (PNPframe)값을 지정한다.
- fastAPI 는 StreamingResponse 함수를 제공해서 비동기 데이터 송출에 유용하게 사용할 수 있다.
- 2에서 작성한 getCameraStream 함수를 통해서 이미지를 실시간(비동기)으로 받아서 송출한다.
4. 시연
- Edge 브라우저
'개발' 카테고리의 다른 글
[python] multiprocessing 사용법 (0) | 2022.04.02 |
---|---|
[python] fast api 영상 relay server (0) | 2021.12.04 |
[python] fastAPI 입문 (0) | 2021.10.08 |
[python] PyQt5 UI 프로그램 개발 환경 구성하기 (0) | 2021.06.08 |
AfxBeginThread 이벤트 클래스 (0) | 2019.06.30 |