Я пытаюсь воспроизвести алгоритм распознавания наземных ориентиров, используя DELF: https://colab.research.google.com/github/Tony607/Landmark-Retrival/blob/master/Landmark-Recognition.ipynb#scrollTo = hkqYyDSoHpn C
В этот момент в скрипте я всегда получаю сообщение об ошибке, однако я запуск сценария в точности так, как он был изначально (определены только пути к изображениям и т. д. c.)
# Array to keep track of all candidates in database.
inliers_counts = []
# Read the resized query image for plotting.
img_1 = mpimg.imread(resized_image)
for index in unique_image_indexes:
locations_2_use_query, locations_2_use_db = get_locations_2_use(index, indices, accumulated_indexes_boundaries)
# Perform geometric verification using RANSAC.
_, inliers = ransac(
(locations_2_use_db, locations_2_use_query), # source and destination coordinates
AffineTransform,
min_samples=3,
residual_threshold=20,
max_trials=1000)
# If no inlier is found for a database candidate image, we continue on to the next one.
if inliers is None or len(inliers) == 0:
continue
# the number of inliers as the score for retrieved images.
inliers_counts.append({"index": index, "inliers": sum(inliers)})
print('Found inliers for image {} -> {}'.format(index, sum(inliers)))
# Visualize correspondences.
_, ax = plt.subplots()
img_2 = mpimg.imread(db_images[index])
inlier_idxs = np.nonzero(inliers)[0]
plot_matches(
ax,
img_1,
img_2,
locations_2_use_db,
locations_2_use_query,
np.column_stack((inlier_idxs, inlier_idxs)),
matches_color='b')
ax.axis('off')
ax.set_title('DELF correspondences')
plt.show()
ValueError Traceback (most recent call last)
<ipython-input-96-1c43ecb25596> in <module>()
10 min_samples=3,
11 residual_threshold=20,
---> 12 max_trials=1000)
13 # If no inlier is found for a database candidate image, we continue on to the next one.
14 if inliers is None or len(inliers) == 0:
/usr/local/lib/python3.6/dist-packages/skimage/measure/fit.py in ransac(data, model_class, min_samples, residual_threshold, is_data_valid, is_model_valid, max_trials, stop_sample_num, stop_residuals_sum, stop_probability, random_state, initial_inliers)
797
798 if not (0 < min_samples < num_samples):
--> 799 raise ValueError("`min_samples` must be in range (0, <number-of-samples>)")
800
801 if residual_threshold < 0:
ValueError: `min_samples` must be in range (0, <number-of-samples>)
Проблема заключается в том, что, как только изображение имеет менее 3 внутренних элементов (совпадающие функции ) с изображением запроса выдается ошибка. Однако это следует просто игнорировать, и сценарий должен go перейти к следующему изображению для сравнения, поскольку оно закодировано со строкой
if inliers is None or len(inliers) == 0:
continue
. Но это не так, скрипт перестает работать. Кстати, он также останавливается, когда я изменяю его на <= 3: </p>
Может кто-нибудь помочь мне?