2016-06-20 138 views
0

我開始學習python並獲得一些樂趣的新項目。不幸的是,我在不同的流程之間分享資源有一些問題。使用Python 3.X進行多處理(圖像處理和numpy)

這裏是項目的快速演示:我使用圖像庫進行圖像處理(PIL for python 3.X),OpenCV和Numpy(似乎在大多數python項目中使用)。

該項目的目標是通過Pillow獲取圖像,然後將它們發送給OpenCV進行一些處理。特殊性在於兩個過程在一定時間內同時運行。

我已經做了一些關於Numpy的研究,它讓我得出Numpy完全適合多處理的結論,並且它也與這兩個庫兼容。 我曾見過不同的方法在官方網站上實現這樣的任務,但我不知道哪一個是最好的選擇。 我從Pillow獲取圖像轉換成numpy的表格,我想將這些numpy表格發送到OpenCV,但表格的行爲與我在官方網站上看到的不一樣。

我想多處理是我想要做的最好的選擇,但也許我錯了,多線程更適合,儘管GIL。 我正在尋找一個高效和強大的解決方案:)。

任何幫助,建議,例子將高度讚賞:)。

+1

這個問題真的很難回答,因爲沒有具體的例子或代碼,也沒有以問號結尾的句子:-)。當你說「表格的行爲與我在官方網站上看到的行爲不相似」時,你的意思是什麼? –

回答

0

你是對的,這是不是很清楚。這是我寫的一些代碼作爲基礎。我試圖正確地運行它,但沒有成功:如果你有一些線索來解決它?

def processscreen(queuescreen): 
    # add while later 
    process = ScreenManager()       # my pillow class 
    listscreen = process.capture()      # numpy.array 900 * 600 
    queuescreen.put(540000, np.reshape(listscreen, -1)) # just a try 


def processinformations(queuescreen): 
    # add while later 
    process = InformationManager()      # my opencv class 
    # don't know if try catch is useful here just one thing i add during my try 
    try: 
     process.screen_array = queuescreen.get() 
    except Exception as err: 
     # just a print 
     settings.out(settings.ERROR, settings.ERROR, 'processinformations get listscreen : ' + str(err)) 
    # after here some work with InformationManager() 


if __name__ == '__main__': 
    queuescreen = Queue() 
    s = multiprocessing.Process(target=processscreen, args=(queuescreen,)) 
    i = multiprocessing.Process(target=processinformations, args=(queuescreen,)) 

    i.start() 
    s.start() 

    i.join() 
    s.join()