2015-06-11 47 views
0

我想用多來在pygame的分開兩個任務:從網絡攝像頭拉的圖像,並顯示在屏幕上的圖像。我之所以想這樣做,是因爲多處理隊列:pygame的表面去世

  • 我想要華麗的圖像處理
  • 我想網民投票從屏幕和用戶輸入

分離,要分開兩者的時間延遲,理想情況下優化負載。使用線程我沒有問題從一個線程發送圖像到另一個。但是,我得到了一個滯後的形象。我想測試如果使用多處理可以減少圖像的延遲。

這裏的障礙:我從照相機處理髮送圖像到屏幕處理後得到一個錯誤。使用

imgmsg = img_q.get() 

從隊列中拉出所述圖像後我檢查尺寸的圖像與

imgmsg.img.get_width() 

如所述,具有螺紋此返回正確的圖像寬度。然而,多處理我得到以下錯誤

Process Process-1: Traceback (most recent call last): File "/usr/lib/python3.2/multiprocessing/process.py", line 267, in 
_bootstrap 
    self.run() File "/usr/lib/python3.2/multiprocessing/process.py", line 116, in run 
    self._target(*self._args, **self._kwargs) File "test_photoBoothMultiProc.py", line 21, in consumer 
    photoBoothScreen.screenThread(in_q, img_q) File "/home/pi/pyBooth/thread_photoBoothScreen.py", line 68, in screenThread 
    print(imgmsg.img.get_width()) pygame.error: display Surface quit 

所以看起來圖像丟失在隊列中?我試圖讀取到這一點,似乎有問題時,通過隊列跨 mitting較大的物體。它是否正確?我將如何繞過或解決這個問題?

+0

在發送到另一個進程之前,嘗試序列化圖像(使用'pygame.image.tostring' /'pygame.image.fromstring')。這應該工作。 – sloth

+0

該訣竅。任何想法爲什麼?如果你寫評論作爲答案,我會接受它。 – JoeyD

回答

1

序列化發送至另一處理之前的圖像的第一(與pygame.image.tostring/pygame.image.fromstring)。

這應該工作。這樣,你只發送圖像本身的數據,而不是Surface實例(所以它完全獨立於pygame)。

請注意,您還可以通過簡單地在該字符串上調用.encode("zlib")/.decode("zlib")來進一步壓縮字符串。