Как исправить ошибку «TypeError: объект 'int' не подлежит подписке в rfind (os.sep.path) + 1:» - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь классифицировать свое входное изображение с помощью предварительно обученных меток и сопоставить это с меткой, вставленной в имя файла входного изображения, например: "my_name.png"; который также присутствует в label.pickle "my_name"

def onClassify(self):
   IMAGE_DIMS = (96, 96, 3)

    image = cv2.imread("C:/Users/Jimit Vaghela/PycharmProjects/Image Classification/gui /cap_images/fold_1/jimit_Image_202084T132225.png")
    output = image.copy()


    # pre-process the image for classification
    image = cv2.resize(image, (IMAGE_DIMS[1], IMAGE_DIMS[0]))
    image = image.astype("float") / 255.0

    image = img_to_array(image)
    image = np.expand_dims(image, axis=0)



    # load the trained convolutional neural network and the label
    # binarizer
    print("[INFO] loading network...")
    model = load_model("C:/Users/Jimit Vaghela/PycharmProjects/Image Classification/gui/classifier/")
    lb = pickle.loads(open("C:/Users/Jimit Vaghela/PycharmProjects/Image Classification/gui/labelbin.pickle", "rb").read())

    # classify the input image
    print("[INFO] classifying image...")
    proba = model.predict(image)[0]
    idx = np.argmax(proba)
    label = lb.classes_[idx]

    # we'll mark our prediction as "correct" of the input image filename
    # contains the predicted label text (obviously this makes the
    # assumption that you have named your testing image files this way)

    filename = "jimit_Image_202084T132225.png".rfind(os.path.sep)[+1:]
    correct = "correct" if filename.rfind(label) != -1 else "incorrect"
    # build the label and draw the label on the image
    label = "{}: {:.2f}% ({})".format(label, proba[idx] * 100, correct)
    output = imutils.resize(output, width=400)
    cv2.putText(output, label, (10, 25), cv2.FONT_HERSHEY_SIMPLEX,
                0.7, (0, 255, 0), 2)
    # show the output image
    print("[INFO] {}".format(label))
    self.label.setPixmap(QPixmap.fromImage(output)) ```

Ошибка находится в этой строке: filename = "jimit_Image_202084T132225.png" .rfind (os.path.sep) [+1:]

Что я здесь делаю не так? Что я должен добавить перед методом .rfind ().

Желаемый результат, заданный @MisterMiyagi: charmander_counter.png

Как видите, входное изображение было названо «charmander_counter.png» в каталоге «/examples/charmander_counter.png», и я использую свой «my_name.png» вместо исходный код. Чтобы уточнить, я уже обучал модель с различными моими изображениями в классе с именем "my_name"

1 Ответ

0 голосов
/ 07 августа 2020

, если вы пытаетесь получить имя файла без расширения, попробуйте это

filename = "jimit_Image_202084T132225.png".rsplit(".")[-2]

, которое даст вам

jimit_Image_202084T132225

предполагая, что у вас есть только имена файлов, если filenname может также включать путь, что-то вроде этого будет работать.

filepath = "path/to/file/jimit_Image_202084T132225.png"
filename_with_extension = filepath..rsplit(os.path.sep)[-1] # this will extract the filename, giving you jimit_Image_202084T132225.png
filename = filename_with_extension.rsplit(".")[-2] # this will remove the extension giving you jimit_Image_202084T132225.

или в одной строке

filename = "path/to/file/jimit_Image_202084T132225.png".rsplit(os.path.sep)[-1].rsplit(".")[-2]

обратите внимание, что это зависит от файл с расширением, поэтому, если исходный файл был jimit_Image_202084T132225 (без .png), он не будет работать. это также будет работать, если у вас есть несколько расширений файлов, таких как jimit_Image_202084T132225.new.png, вы получите jimit_Image_202084T132225.new, если это нежелательно, прокомментируйте, и я изменю его на желаемый

Изменить: как указано в @MisterMiyagi os.path содержит инструменты для этого, поэтому вы можете использовать это для достижения того же

os.path.splitext(os.path.basename("path/to/file/jimit_Image_202084T132225.new.png"))[0]
...