0

私は自分の学術プロジェクトに取り組んでいます。2 つの Web カメラからの出力を遅延なく同時に画面に表示する必要があります。そのために、私はpygameサーフェス(SDLであるため)とPythonでのマルチプロセッシングを使用しています。マルチプロセッシングを使用すると、2 つのプロセス間でのみ 1 つのオブジェクトをパイプすることができます。実行されると予想されるコードは次のとおりです。

#!/usr/bin/python
import os, sys
from multiprocessing import Process
import time
import pygame
import Tkinter as tk
import pygame.camera
from pygame.locals import *

# Initializations

pygame.init()
pygame.camera.init()
pygame.display.init()

w= 320
h = 240
fps = 45

clist = pygame.camera.list_cameras()
screen = pygame.display.set_mode((w*2,h))

def cam1_core():
   print 'left started'
   writer1 = imageio.get_writer('left_eye.avi', fps=fps)
   cam1 = pygame.camera.Camera(clist[0], (w, h))
   cam1.start()
   time.sleep(1)
   i=0
   while i < 500:
      imgb = cam1.get_image()
      img1 = pygame.surfarray.array3d(imgb)
      screen.blit(imgb, (0, 0))
      pygame.display.update()
      i = i + 1
      #sys.stdout.flush()
   cam1.stop()

   sys.stdout.flush()


def cam2_core():
   print 'right started'
   cam2 = pygame.camera.Camera(clist[1], (w, h))
   cam2.start()
   time.sleep(1)
   j=0
   while j < 500:
      imga = cam2.get_image()
      img2 = pygame.surfarray.array3d(imga)
      screen.blit(imga, (w, 0))
      pygame.display.update()
      j = j + 1
      #sys.stdout.flush()
   cam2.stop()

   print 'right closed'
   sys.stdout.flush()

if __name__ == '__main__':
    p1 = Process(target=cam1_core)
    p2 = Process(target=cam2_core)
    p1.start()
    p2.start()

このコードが機能しないことはわかっていますが、pygame-surface オブジェクトを cam1_core および cam2_core プロセスにパイプするようなもの (ただし、パイプには始点と終点が 1 つしかないため、プロセス間でオブジェクトをパイプ/キューに入れることはお勧めできません) または表示するカメラ画像をパイピング/キューに入れます。マルチプロセッシングを使用して画像を同時に取得しています。この種の問題に関連する情報は高く評価されます。

4

0 に答える 0