TypeError: ожидается str, bytes или объект os.PathLike, а не JpegImageFile (или PngImageFile)

Когда я загружаю изображение для проверки картинки в соответствии с моделью tensorflow h5, я загружаю изображение, используя load_model из tensorflow.keras.models, но оно не принимается. Для JPG он показывает TypeError: expected str, bytes or os.PathLike object, not JpegImageFile, а для PNG - TypeError: expected str, bytes or os.PathLike object, not PngImageFile. Что теперь делать?

Я попробовал код с сырым python, но он отлично работает.

Код:

#views.py

import numpy as np
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing import image

pic = request.FILES['image']
img = Image.open(pic)
detection=load_model(os.path.join(settings.BASE_DIR,'static/auto_chloro_model.h5'))
test_img=image.load_img(img,target_size=(48,48))
test_img=image.img_to_array(test_img)
test_img=np.expand_dims(test_img,axis=0) 
result=detection.predict(test_img)
a=result.argmax()
print(a)

#models.py

class image(models.Model):
   img = models.ImageField(upload_to="images_api", default="") 

   def __str__(self):
        return self.product_name

#forms.py

class imageForm(forms.ModelForm):
    image = forms.ImageField()
  
    class Meta:
        model = image
        fields = ['image']

Функция load_img ожидает путь к изображению, а не формат изображения PIL.

Так что вместо

img = Image.open(pic)
test_img=image.load_img(img,target_size=(48,48))

Просто сделайте это, используя :

from tensorflow.keras.preprocessing import image
test_img = image.load_img('/path/to/image.jpg', target_size = (48, 48))

Это решило мою проблему.

pic = request.FILES['image']
img_new = images(img_main= pic)
img_new.save()
detection=load_model(os.path.join(settings.BASE_DIR,'staticfiles/auto_chloro_model.h5'))
test_img=image.load_img(img_new.img_main.path,target_size=(48,48))
test_img=image.img_to_array(test_img)
test_img=np.expand_dims(test_img,axis=0) 
result=detection.predict(test_img)
a=result.argmax()
Вернуться на верх