Я пытаюсь получить мои изображения из папки в массив и обрабатывать их одно за другим.Но я хочу сделать это параллельно.Я попытался реализовать каждое изображение в отдельном процессе и выполнить, но это, похоже, не работает
мой код:
import numpy as np
import os
import cv2
from multiprocessing import Process
import time
file_path=[]
path="C:/Users/User/Desktop/Dataset_Screens/picture_dataset_Small/"
for root,dir,files in os.walk(path):
for f in files:
file_path.append(os.path.join(root,f))
path1="C:/Users/User/Desktop/Dataset_Screens/picture_dataset_Big/"
for root1,dir1,files1 in os.walk(path1):
for f1 in files:
file_path.append(os.path.join(root1,f1))
print(len(file_path))
def get_image(inputfilepath):
img_original= cv2.imread(inputfilepath)
img_array=np.asarray(img_original)
blur= cv2.pyrMeanShiftFiltering(img_original,21,49)
gray_image= cv2.cvtColor(blur, cv2.COLOR_BGR2GRAY)
ret,thresh= cv2.threshold(gray_image,70,255,cv2.THRESH_BINARY)
_, contours,hierarchy =cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
countourimage=cv2.drawContours(img_original,contours,-1,0,3)
largest_area=0
print('I am inside the loop')
for i,c in enumerate(contours):
contour_areas=cv2.contourArea(c)
if(contour_areas>largest_area):
largest_area= contour_areas
x_rect,y_rect,w_rect,h_rect=cv2.boundingRect(c)
cropped=img_original[y_rect:y_rect+h_rect,x_rect:x_rect+w_rect]
cv2.imwrite('C:/Users/User/Anaconda3/contourimage.jpg',cropped)
t= time.time()
if __name__ == '__main__':
for i in range(4):
p = Process(target=get_image, args=(file_path[i],))
p.start()
print('Done in ', time.time()-t)
print('We are DONEEEEEEE!!!!!!')
Я использую Spyder, который, похоже, тоже не работает, поэтомуя запустил по приглашению conda, и результаты показаны ниже:
Вывод в spyder:
132
Done in 0.022994279861450195
DONEEE!!
Вывод в приглашении conda:
C:\Users\User\Anaconda3>python examples.py
132
Done in 0.05248904228210449
DONEEE!!
132
Done in 0.0
DONEEE!!
132
Done in 0.0
DONEEE!!
132
Done in 0.0
DONEEE!!
132
Done in 0.0
DONEEE!!
Corrupt JPEG data: premature end of data segment
Corrupt JPEG data: premature end of data segment
Corrupt JPEG data: premature end of data segment
Corrupt JPEG data: premature end of data segment
I am inside the loop
I am inside the loop
I am inside the loop
I am inside the loop
Я пытаюсьчтобы преобразовать мою программу на Python в параллельную, чтобы уменьшить время, затрачиваемое
Я добавил p.join () к функции
if __name__ == '__main__':
for i in range(4):
p = multiprocessing.Process(target=get_image, args=(file_path[i],))
p.start()
p.join()
и вывод в spyder:
132
Done in 30.90500521659851
DONEEE!!
и подсказка conda:
C:\Users\User\Anaconda3>python examples.py
132
132
Done in 0.0
DONEEE!!
Corrupt JPEG data: premature end of data segment
I am inside the loop
132
Done in 0.0
DONEEE!!
Corrupt JPEG data: premature end of data segment
I am inside the loop
132
Done in 0.0
DONEEE!!
Corrupt JPEG data: premature end of data segment
I am inside the loop
132
Done in 0.0
DONEEE!!
Corrupt JPEG data: premature end of data segment
I am inside the loop
Done in 30.726163625717163
DONEEE!!
Я абсолютный новичок с параллельной обработкой .. Пожалуйста, предложите .. Спасибо заранее !!