Knowhow/Vision

Opencv camera index 찾기, device index 찾기

침닦는수건 2024. 10. 29. 14:10
반응형

2022.06.13 - [Knowhow/Vision] - Opencv multi webcam 사용 시 인식 확인

 

Opencv multi webcam 사용 시 인식 확인

opencv에서 라이브 웹캠을 2개 이상 사용하고자 할 때, 보통 아래와 같이 접근한다. import cv2 cam0 = cv2.VideoCapture(0) cam1 = cv2.VideoCapture(1) ... camN = cv2.VideoCapture(N) #N is a camera index 이 때, 분명 카메라 N대

jseobyun.tistory.com

 

이전 글에서 cv2.VideoCapture()를 사용할 때 필요한 camera index를 어떻게 찾는지 정리한 바 있는데, 글 말미에서는 USB 포트를 바꿀 때마다 혹은 USB 포트가 고장났을 때마다 index가 바뀌는 상황이 빈번해서 device id를 읽어서 camera index를 찾아내는 것이 안전하다고 언급했었다.

 

pyudev를 써서 구현했었으나 더 직관적으로 간단한 기능이 있어서 추가 정리한다. 바로 아래 패키지인데 아주 좋다.

 

https://pypi.org/project/cv2-enumerate-cameras/

 

cv2-enumerate-cameras

Enumerate / List / Find / Detect / Search index for opencv VideoCapture.

pypi.org

 

pip install cv2_enumerate_cameras

 

from cv2_enumerate_cameras import enumerate_cameras

for camera_info in enumerate_cameras():
    print(f'{camera_info.index}: {camera_info.name}')
    
    
# 0 : Front Camera
# 1 : Back Camera
# 2 : ...

 

이렇게 출력해보고 원하는 카메라 이름을 string으로 저장해두었다가, 나중에 camera_info.name과 비교하면서 항상 같은 카메라의 index를 찾아낼 수 있다.

 

위 예시처럼 같은 카메라임에도 index가 1800번, 200번 이렇게 나올 수도 있는데 이건 백엔드 타입이 default로 CAP_ANY가 들어가서 그렇다.

 

webcam은 웬만해서는 CAP_DSHOW를 쓰므로 다음과 같이 쓰면 원래 알던 0,1,2,3 ... 이 나올 것이다.

import cv2
from cv2_enumerate_cameras import enumerate_cameras

for camera_info in enumerate_cameras(cv2.CAP_DSHOW):
    print(f'{camera_info.index}: {camera_info.name}')
반응형