https://github.com/opencv/opencv
https://docs.opencv.org/4.x/d6/d00/tutorial_py_root.html
- Homebrew 설치 (없다면):
- Homebrew는 맥용 패키지 관리자로, 다양한 소프트웨어를 쉽게 설치할 수 있게 도와줍니다. Homebrew가 설치되지 않았다면, 다음 명령어를 터미널에 입력해 설치합니다:
- /bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"
- 필요한 라이브러리 설치:
- OpenCV를 설치하기 전에 필요한 라이브러리를 Homebrew를 사용하여 설치합니다:
- brew install cmake; brew install pkg-config; brew install ffmpeg; brew install numpy;
- Python 가상환경 활성화:
- 이미 설정한 .venv 가상환경을 활성화합니다. 예를 들어, 프로젝트 디렉토리에서 다음 명령어를 입력합니다:
- source .venv/bin/activate
- OpenCV-Python 설치:
- pip를 사용하여 OpenCV-Python을 설치합니다:
- pip install opencv-python
- 설치 확인:
- Python 인터프리터를 열고 OpenCV가 정상적으로 설치되었는지 확인합니다:
- import cv2 print(cv2.__version__)
https://www.kaggle.com/code/shakhrulsiam/bufferless-video-capture-opencv
cv2.VideoCapture()로 rtsp stream 에서 프레임을 가져와서 처리하다보면
수신 속도 > 처리 속도로 인해 "프레임이 실제로 처리되는 시간"과 "프레임이 도착한 시간" 이 버퍼가 찰수록 계속 늘어남
- timestamp를 부여하거나
- 가장 최근에 수신된 프레임으로 어떤 작업을 하려고 할 때 방해가 되겠죠
멀티쓰레드 + 버퍼 조합을 활용해 처리 시점에서 가장 latest 프레임만 handling하도록 코드를 짤 수 있음 (위 링크 참고)
def _reader(self) -> None:
while True:
ret, frame = self.cap.read()
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
# Clear the queue if it's not empty to maintain only the latest frame
while not self.q.empty():
try:
self.q.get_nowait()
except queue.Empty:
pass
self.q.put(frame)
def read(self) -> cv.Mat | None:
return self.q.get()
이 외에도 cv 엄청난게 많던데요 - 이모저모에서 이어서 작성
'AI > vision' 카테고리의 다른 글
[논문 리뷰] Reducing Hallucinations in Vision-Language Models via Latent Space Steering (0) | 2024.10.31 |
---|---|
Vision Encoder - SIGLIP (1) | 2024.10.30 |
camera calibration using OpenCV (0) | 2024.08.29 |
OpenCV 이모저모 (0) | 2024.08.29 |