OpenCV Python을 사용하여 새 카메라 소스 만들기 (Python을 사용하는 카메라 드라이버)
누구든지 파이썬을 사용하여 카메라 소스를 만드는 방법을 알고 있습니까? 예를 들어 2 개의 카메라가 있습니다.
- 웹캠
- USB 캠
카메라가 필요한 웹 애플리케이션이나 인터페이스를 사용할 때마다 위에서 언급 한 두 가지 중에서 카메라 소스를 선택할 수있는 옵션이 있습니다.
내가 달성하고 싶은 것은 다음과 같이 내 자신의 카메라 포털을 사용하여 파이썬 프로그램에서 실시간 프레임을 처리하고 있다는 것입니다.
import numpy as np
import cv2
while True:
_,frame = self.cam.read()
k = cv2.waitKey(1)
if k & 0xFF == ord('q'):
self.cam.release()
cv2.destroyAllWindows()
break
else:
cv2.imshow("Frame",frame)
이제 이것을 frame카메라 소스로 사용하고 싶으 므로 다음에 카메라가 필요한 소프트웨어 또는 웹 앱을 열 때마다 다음과 같은 옵션이 표시됩니다.
- 웹캠
- USB 캠
- Python Cam (또는 이름이 무엇이든)
누구든지 그것에 대해 어떻게할지에 대한 조언이나 힌트가 있습니까? 자체 카메라 소스를 생성하는 프리미엄 소프트웨어를 보았지만 C ++로 작성되었습니다. 이것이 파이썬에서 일어날 수 있는지 궁금합니다.
다음은 동일한 예입니다.
보시다시피 여러 카메라 소스가 있습니다. 피드에 파이썬으로 처리 된 프레임을 표시하는 카메라 소스 하나를 추가하고 싶습니다.
답변
당신은 사용할 수 있습니다 v4l2loopback (https://github.com/umlaeute/v4l2loopback) 그에 대한. C로 작성되었지만 일부 파이썬 래퍼가 있습니다. 나는 가상 비디오 (https://github.com/Flashs/virtualvideo).
virtualvideo README는 매우 간단하지만 목표에 맞게 github 예제를 수정했습니다.
import virtualvideo
import cv2
class MyVideoSource(virtualvideo.VideoSource):
def __init__(self):
self.cam = cv2.VideoCapture(0)
_, img = self.cam.read()
size = img.shape
#opencv's shape is y,x,channels
self._size = (size[1],size[0])
def img_size(self):
return self._size
def fps(self):
return 30
def generator(self):
while True:
_, img = self.cam.read()
yield img
vidsrc = MyVideoSource()
fvd = virtualvideo.FakeVideoDevice()
fvd.init_input(vidsrc)
fvd.init_output(2, 640, 480, pix_fmt='yuyv422')
fvd.run()
에서 init_output 첫 번째 인수는 커널 모듈을 추가 할 때 내가 만든 타르 가상 카메라 자원이다 :
sudo modprobe v4l2loopback video_nr=2 exclusive_caps=1
마지막 인수는 내 웹캠 크기와 픽셀 형식입니다.
행 아웃에 다음 옵션이 표시됩니다.
먼저 사용 가능한 카메라 목록을 가져와야합니다. 코드는 여기 에서 찾을 수 있습니다.
그런 다음 카메라를 선택하면 camera = cv2.VideoCapture(chosen_port)