не может распаковать не повторяемый объект numpy.float64 python3 opencv

Вам нужно передать правильное значение form_key. которые вы получите в ответ на предыдущие пробоотборники. используйте регулярное выражение Extractor для извлечения значения form_key.

"form_key" = "(. +?)"

1
задан Andrey Cronenwett 20 January 2019 в 03:25
поделиться

1 ответ

Проблема

В вашем коде есть случай, когда line_parameters может быть одним значением, np.nan, вместо пары значений (slope, intercept). Если наклон ваших подгонок всегда равен > 0, то left_fit в конечном итоге будет пустым списком []:

        if slope < 0:
            left_fit.append((slope, intercept))
        else:
            right_fit.append((slope, intercept))

Вывод прогона np.average для пустого списка - NaN:

np.average([])
# output: np.nan
# also raises two warnings: "RuntimeWarning: Mean of empty slice." and 
#                           "RuntimeWarning: invalid value encountered in double_scalars"

Таким образом, в некоторых случаях left_fit_average = np.average(left_fit) == np.average([]) == np.nan. np.nan имеет тип numpy.float64. Затем ваш код вызывает:

left_line = make_coordinates(image, line_parameters=left_fit_average)

Таким образом, когда вызов на make_coordinates попадает на линию:

slope, intercept = line_parameters

возможно, что line_parameters будет np.nan, в В этом случае вы получаете сообщение об ошибке:

TypeError: 'numpy.float64' object is not iterable

Исправление

Вы можете исправить ошибку, убедившись, что разумные значения присвоены slope и intercept, даже если [ 1122]. Это можно сделать, заключив строку назначения в предложение try... except:

try:
    slope, intercept = line_parameters
except TypeError:
    slope, intercept = 0,0

Вам нужно будет решить, подходит ли это поведение для ваших нужд.

В качестве альтернативы, вы можете запретить функции average_slope_intercept вызывать make_coordinates во-первых, когда одно из значений x_fit не имеет ничего интересного:

if left_fit:
    left_fit_average = np.average(left_fit, axis=0)
    print(left_fit_average, 'left')
    left_line = make_coordinates(image, left_fit_average)
if right_fit:
    right_fit_average = np.average(right_fit, axis=0)
    print(right_fit_average, 'right')
    right_line = make_coordinates(image, right_fit_average)
0
ответ дан tel 20 January 2019 в 03:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: