Вопрос или проблема
Я пытаюсь создать поисковую систему изображений с помощью глубокого обучения.
Вот ошибка, которую я получаю:
ошибка: OpenCV(4.10.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\resize.cpp:4152: ошибка: (-215:Assertion failed) !ssize.empty() в функции 'cv::resize'
Уже проверял на поврежденные файлы и пути к файлам.
Мой код в Jupyter:
img = cv2.imread("C:/Users/Neslihan Seker/Desktop/fashion_recom/DATASET/1636.jpg")
img=cv2.resize(img,(224,224))
img.shape
expand_img= np.expand_dims(img,axis=0)
pre_img=preprocess_input(expand_img)
result=model.predict(pre_img).flatten()
normalized=result/norm(result)
img_path = ("C:/Users/Neslihan Seker/Desktop/fashion_recom/DATASET/")
def extract_feature(img_path,model):
img = cv2.imread(img_path)
img=cv2.resize(img,(224,224))
img= np.array(img)
expand_img=np.expand_dims(img,axis=0)
pre_img=preprocess_input(expand_img)
result=model.predict(pre_img).flatten()
normalized=result/norm(result)
return normalized
extract_feature("C:/Users/Neslihan Seker/Desktop/fashion_recom/DATASET/1636.jpg",model)
filename=[]
feature_list=[]
for file in os.listdir('Dataset'):
filename.append(os.path.join('Dataset',file))
images = [img for img in os.listdir(image_path) if img.endswith(".jpg")]
Часть, где я получаю ошибку:
# Извлечение признаков для всех изображений
for file in tqdm(filename):
feature = extract_feature(file, model)
if feature is not None:
feature_list.append(feature)
Ответ или решение
Ошибка OpenCV: Неудачное изменение размера изображения из-за пустого ввода в извлечении признаков
При разработке поискового движка по изображениям с использованием глубокого обучения вы столкнулись с ошибкой OpenCV, указывающей на проблему с пустым входным изображением. Сообщение об ошибке выглядит следующим образом:
error: OpenCV(4.10.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\resize.cpp:4152: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
Причины возникновения ошибки
Ошибка возникает в функции cv::resize
, когда передаваемое в неё изображение является пустым (т.е. img
равно None
). Это может произойти по нескольким причинам:
-
Неверный путь к изображению: Если указанный путь к изображению неправильный или файла не существует, функция
cv2.imread()
вернётNone
. -
Некорректный формат файла: Файл может быть повреждён или его формат может не поддерживаться OpenCV, что также приведёт к тому, что изображение не будет загружено.
-
Проблемы с доступом: Убедитесь, что ваша программа имеет достаточно прав для доступа к файлам в указанной директории.
Рекомендации по исправлению
1. Проверка существования файла:
Перед попыткой изменить размер изображения добавьте проверку, чтобы убедиться, что изображение было успешно загружено.
img = cv2.imread(img_path)
if img is None:
raise FileNotFoundError(f"Изображение по пути {img_path} не найдено или не может быть загружено.")
2. Убедитесь в правильности пути:
Проверьте, что путь к файлу (например, "C:/Users/Neslihan Seker/Desktop/fashion_recom/DATASET/1636.jpg"
) правильно прописан и соответствует на самом деле существующему файлу.
3. Список файлов и их пути:
Когда вы собираете список файлов для обработки, убедитесь, что вы используете полный путь к каждому файлу. Рассмотрите пример, как это можно сделать:
import os
image_path = "C:/Users/Neslihan Seker/Desktop/fashion_recom/DATASET/"
filenames = [os.path.join(image_path, file) for file in os.listdir(image_path) if file.endswith(".jpg")]
for file in tqdm(filenames):
feature = extract_feature(file, model)
if feature is not None:
feature_list.append(feature)
Пример исправленной функции извлечения признаков
def extract_feature(img_path, model):
img = cv2.imread(img_path)
if img is None:
raise FileNotFoundError(f"Изображение по пути {img_path} не найдено или не может быть загружено.")
img = cv2.resize(img, (224, 224))
expand_img = np.expand_dims(img, axis=0)
pre_img = preprocess_input(expand_img)
result = model.predict(pre_img).flatten()
normalized = result / np.linalg.norm(result)
return normalized
Улучшение читаемости и SEO
Использование ясных заголовков и структурирования текста способствует улучшению его читаемости. Использование ключевых фраз, таких как "OpenCV ошибка", "изменение размера изображений", "извлечение признаков", также может быть полезно для SEO, улучшая видимость вашего контента.
Заключение
Учтя вышеперечислённые рекомендации, вы сможете устранить ошибку, избегая передачи пустых изображений в функции обработки. Это не только улучшит функциональность вашего поискового движка, но и обеспечит более надежный и качественный процесс обработки изображений.