Я пытаюсь решить, будет ли интересно сохранять в локальных файлах или в базе данных вычисленные дескрипторы огромного количества изображений (каждое изображение .png имеет разрешение 500x500 и весит приблизительно 25 КБ).
При использовании ORB с дескрипторами Brief-32 один дескриптор весит около 3 мегабайт. Такой размер останется неизменным, так как все мои фотографии имеют одинаковые размеры.
Чтобы выяснить, что было самым быстрым, я провел два следующих теста:
## TEST : Import descriptor from file
listOfDec = list()
start = datetime.now()
for i in range(0, 100):
listOfDec.append(np.loadtxt("DESC_TEST".txt"))
end = datetime.now()
time_taken = end - start
print('Time: ',time_taken)
## TEST : Compute descriptor from source image
listOfDec = list()
start = datetime.now()
for i in range(0, 100):
img1 = cv2.imread(dirPath+picture,0)
a, desc = orb.detectAndCompute(img1, None)
listOfDec.append(desc)
end = datetime.now()
time_taken = end - start
print('Time: ',time_taken)
Я честно подумалбыло бы быстрее загрузить данные, чем пересчитать весь дескриптор.
Вот результат моего теста:
Так что теперь я в замешательстве. Я знаю, что ORB - это действительно быстрый алгоритм, но как быстрее «сгенерировать» дескриптор 3 МБ, чем читать его с диска ssd? Что-то не так с моим тестом?
Спасибо.