У меня есть CSV-файл, который содержит 3 столбца данных (имя, путь к изображению и индекс). У меня есть функция с именем Do_Training () , которая читает из файла CSV, а затем преобразует файл CSV в большой вложенный список (то есть: " [[name1, path1,1], [name2», path2,2], ....]").
Когда я попытался использовать класс Parallel () (из библиотеки Joblib) с методом Delayed () , я получил "Не удалосьвыберите задачу, чтобы отправить ее рабочим. " ошибка.
Когда я удаляю метод Delayed () , функция Process_Training_Image () работает должным образом, пока не будет достигнут конец вложенного списка, но, наконец, "не может распаковать не повторяемый объект NoneType" исключение.
Функция Process_Training_Image () не должна ничего возвращать, но во избежание исключения, когда я пытаюсь вернуть значения из этой функции, я получаю множество ошибок.
Функция Do_Training ()
#Train all images in a given CSV file of correct format
def Do_Training(csv_file_path):
print("Starting Training...")
start_time=time.time()
with open(csv_file_path,'r') as csvFile:
csvReader=csv.reader(csvFile,delimiter=',')
csvLines=list(csvReader)
process=Parallel(num_cores) ((Process_Training_Image)(row) for row in csvLines)
#threads=[]
#for name,path,idx in csvLines:
# #t= threading.Thread(target=Process_Training_Image,args=(name,path,idx))
# threads.append(t)
#for t in threads:
# t.result()
#for t in threads:
# t.join()
end_time=time.time()
print("Training Done!")
print("Time Elapsed: {}".format(end_time-start_time))
print("Number of Valid Training Images: {}".format(len(trFaceVectors)))
Функция Process_Training_Image ()
#Process Training Image
def Process_Training_Image(row):
print("\nTraining on image: {} @ {}".format(row[0],row[1]))
#Load Image From File
image=cv2.imread(row[1])
#Convert BGR to RGB
face_image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
#Detect Faces from 'face_image'. Upscaling =1
det_faces=face_detector(face_image,1)
#There should be atleast on Face.
#Traning images has one face per image.
if len(det_faces)==0:
print("Face Image invalid or not found!")
if len(det_faces)>0:
for i,d in enumerate(det_faces):
#Print Face Details
print("Face Found! Left: {} Right: {} Top: {} Bottom: {}".format(d.left(),d.right(),d.top(),d.bottom()))
#Detect Landmarks on Face
landmarks=shape_predictor(face_image,d)
#Compute Face_Descriptor Vector
face_descriptor=face_recognizer.compute_face_descriptor(face_image,landmarks)
#Append Lists
trFaceNames.append(row[0])
trFaceVectors.append(face_descriptor)
#return {'a':row[0],'b':row[1],'c':row[2]}
Все изображения должны быть обработаны, и все соответствующие списки должны быть заполнены без ошибок.