我正在尝试创建一个应用程序,该应用程序将以10 fps的速度从三个USB 3相机捕获图像。我还希望能够将这些图像保存到文件中。
我玩过gst-launch,并尝试使用multifilesink写入文件。
gst-launch-1.0 -v v4l2src device=/dev/video1 ! video/x-raw,framerate=30/1,width=1280,height=720 ! videoconvert ! jpegenc ! multifilesink location=image1_%06d.jpg v4l2src device=/dev/video2 ! video/x-raw,framerate=30/1,width=1280,height=720 ! videoconvert ! jpegenc ! multifilesink location=image2_%06d.jpg" v4l2src device=/dev/video3 ! video/x-raw,framerate=30/1,width=1280,height=720 ! videoconvert ! jpegenc ! multifilesink location=image3_%06d.jpg
然后我尝试迭代地从相机拍摄照片(我还尝试为每个相机使用单独的线程。)
def open_cam_usb(dev, width, height):
# We want to set width and height here, otherwise we could just do:
# return cv2.VideoCapture(dev)
gst_str = ('v4l2src device=/dev/video{} ! '
'video/x-raw, width=(int){}, height=(int){}, '
'format=(string)RGB ! '
'videoconvert ! appsink max-buffers=1').format(dev, width, height)
print("create video capture")
return cv2.VideoCapture(gst_str, cv2.CAP_GSTREAMER)
def take_picture(cap, device_number):
frameId = int(round(cap.get(1)))
success, image = cap.read()
cv2.imwrite("FolderSeconds/image%d_frame%d.jpg" % (device_number,frameId) , image)
print(device_number, frameId)
def main():
args = parse_args()
print('Called with args:')
print(args)
print('OpenCV version: {}'.format(cv2.__version__))
cameras = []
for i in range(3):
cap = open_cam_usb(i+1, args.image_width, args.image_height)
cameras.append(cap)
time.sleep(3)
while True:
for i in range(3):
take_picture(cameras[i], i+1)
if __name__ == '__main__':
main()
但是,每当我运行这样的脚本并查看正在运行的线程时,似乎有比我创建的线程更多的线程。 (即,当我创建多个线程时,四个正在运行的线程)。
过一会儿(从运行脚本到运行后的4分钟不等),某些线程似乎挂起/死掉,并且相机停止拍照。
有人知道我要去哪里吗?