'opencv' 태그의 글 목록 :: Horizontal Grays S2

Basler 카메라는 흑백은 둘째치고 비네팅이 생긴다... FOV도 현재 사용하고자 하는 영역과 맞지 않는다.

Application에 맞는 카메라와 렌즈는 딜리버리가 6개월... 이놈의 공급망 문제 ㅠㅜ

 

일단 알고리즘은 계속 진행해야 해서 로지텍 웹캠으로 알고리즘은 진행하기로 하고 적당한 카메라는 계속 고민 중이다.

 

여튼 로지텍 웹캠을 opencv에서 장치를 열때 발생하는 문제에 대해 적어본다.

( 단지 C930C 만의 문제일지 해당하는 모델이 더 있는지는 모르겠다.)

 

기본적으로 opencv에서 장치를 열때

 

cap = cv2.VideoCapture(0)

 

이와 같이 VedeoCapture 함수로 장치를 열고 괄호 안의 장치번호를 이용하는데 현재 노트북을 사용하고 있어서

노트북 기본 카메라가 0번

로지텍 웹캠이 1번이었다.

 

그런데 문제는 cap = cv2.VideoCapture(1) 로 열면 640 * 480 화질로 열리긴 하는데 원래의 해상도인 FULL HD로 설정이 안된다.

 

cap = cv2.VideoCapture(1)

cap.set(cv2.CAP_PROP_FRAME_WIDTH,1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)

여기서 VedeoCapture를 열때 방법이 있다.

아래의 opencv document에 자세히 나와있다.

OpenCV: Flags for video I/O

 

OpenCV: Flags for video I/O

enum  cv::VideoCaptureAPIs {   cv::CAP_ANY = 0,   cv::CAP_VFW = 200,   cv::CAP_V4L = 200,   cv::CAP_V4L2 = CAP_V4L,   cv::CAP_FIREWIRE = 300,   cv::CAP_FIREWARE = CAP_FIREWIRE,   cv::CAP_IEEE1394 = CAP_FIREWIRE,   cv::CAP_DC1394 = CAP_FIRE

docs.opencv.org

 

그래서 아래처럼 해보았더니 바로 열리긴 한다.

cap = cv2.VideoCapture(1,cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FRAME_WIDTH,1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)

해상도도 FULL HD로 설정이 되었다. 문제는 보여지는 화면이 뭔가 끊기는 기분이라 Frame을 계산해서 출력해보았더니...

5FPS... 30FPS이 5FPS로 Frame Drop이 일어났다.

 

뭐 Buffer 셋팅에서부터 별걸 다해보았지만 아무것도 안됨

 

결국 로지텍 웹캠이 지원하는 open 방법이 무엇인지를 찾아보니

cap = cv2.VideoCapture(1,cv2.CAP_DSHOW)

cap = cv2.VideoCapture(1,cv2.CAP_MSMF)

이 두가지 방법이었다.

Direct Show는 Frame Drop 이 있으니 안되고 MSMF로 시도해보았더니 아.. 이 MSMF가 별도의 설정없이 VideoCapture(1) 이것이었다. 이게 아예 안되는 것은 아니었고

열리고 FULL HD로 셋팅은 되는데 시간이 5분가량 걸린다...

이래선 진행을 할 수 가없다. ㅠㅜ

 

열심히 검색한 결과 해결방법을 찾았는데 python 코드 앞머리에서 아래와 같은 설정을 해주어야 한다.

os.environ["OPENCV_VIDEOIO_MSMF_ENABLE_HW_TRANSFORMS"] = "0"
 
 

이것도 주의해야 하는데

 

import os
import cv2
import timeit
import numpy as np
os.environ["OPENCV_VIDEOIO_MSMF_ENABLE_HW_TRANSFORMS"] = "0"
 
이렇게 import의 뒤에 갖다 놓으면 동작 안됨 --;;;
 

 

import os
os.environ["OPENCV_VIDEOIO_MSMF_ENABLE_HW_TRANSFORMS"] = "0"
import cv2
import timeit
import numpy as np
 
이렇게 해야 정상적으로 동작
 
여튼 이 방법으로 로지텍 C930C는 정상적으로 바로 열리고 Frame Drop 없이 FULL-HD 해상도로 설정도 가능하게 되었다.
 
관련 자료가 없어 애먹어서 여기에 남긴다.

정말 오랫동안 건드리지도 않았던 비전 일을 해야할일이 갑자기 생겨버렸다.

 

카메라도 렌즈도 내가 선택안했는데 남이 선택해놓은걸....

 

여튼 Basler 카메라, 리코 12mm c마운트 렌즈, GiGE 인터페이스 이거 달랑 인계 받고 시작하게 되었다.

 

GiGE 인터페이스라고 별다른 것은 없더라 이더넷 케이블로 연결하고 Basler 홈페이지에서 프로그램 다운받은 후

 

pylon viewer 실행 시켜서 보면 보인다.

 

어라.. 근데 흑백이다. 사람에게 보여줄게 아니므로 흑백도 상관없겠다만 프로젝트를 생각하면 컬러가 유리할듯한데...

 

일단 회사에 있는 로지텍 웹캠 C930c를 연결해서 이걸로 진행해보기로 한다.

 

지금까지는 C++ 에 opencv를 사용했는데

 

이번엔 파이썬에 opencv를 사용해보기로 결정

 

1. python 홈페이지에서 파이썬을 다운로드/ 설치  그냥 최신 3.10.4 다운로드 했다.

당연히 환경변수 path에 들어가야 한다.  (설치할때 체크하면 ok)

Download Python | Python.org

 

2. vscode 다운로드/설치

Download Visual Studio Code - Mac, Linux, Windows

 

Download Visual Studio Code - Mac, Linux, Windows

Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. Download Visual Studio Code to experience a redefined code editor, optimized for building and debugging modern web and cloud applications.

code.visualstudio.com

 

3. 폴더 하나 만들고 그 안에서 작업

 

일단 vscode 실행시키고 터미널에서 

pip install opencv-python 

하면 opencv가 깔린다. 세상 편하다.. 

이게 뭐 문제점은 없는지 걱정이다 ㅋㅋㅋ

 

여튼 비전이 내 전공도 아니고 까먹을까봐 여기에 기록해가면서 또 진행해보려고 한다.

 

주식자동화 그것도 해야하는데... 귀찮네 ㅠㅜ

+ Recent posts