Обнаружение нескольких объектов с использованием пользовательской модели в Python и imageai - PullRequest
1 голос
/ 30 марта 2020

Я обучил свою собственную модель с моим собственным набором данных изображений для распознавания объектов на изображении, но, похоже, он не распознает все объекты. У меня есть только 2 объекта (изображения разных способов, которыми человек печатает определенную c букву алфавита). Например, буква «а» и буква «о», как показано ниже.

The letter 'a' The letter 'o'

Когда я запускаю тестовый код для образца рукописного текста, в определенной степени это делает скажите, какой процент точности он имеет, но без ограничительных рамок. Это изображение рукописного текста:

Hand written text

Это вывод, который я получаю:

Output I am getting

Я использую imageai для обучения пользовательской модели. Мне интересно, можно ли использовать эту обученную модель для запуска обнаружения нескольких объектов на рукописном изображении и, возможно, показать ограничивающие рамки?

Вот как выглядит мой рабочий каталог, если он предоставляет дополнительную помощь:

Working directory

А вот мой код для обучения модели (custom_detector.py):

from imageai.Prediction.Custom import ModelTraining

# Instanciating the model
model_trainer = ModelTraining()
model_trainer.setModelTypeAsResNet()
# Setting our dataset directyory
model_trainer.setDataDirectory("characters")
# training the model
model_trainer.trainModel(num_objects=2, num_experiments=100, enhance_data=True, batch_size=10)

Это мой код для тестирования обученной модели ( test.py ):

from imageai.Prediction.Custom import CustomImagePrediction
import os

# get the working directory
execution_path = os.getcwd()
print(execution_path)
# instanciate prediction
prediction = CustomImagePrediction()
prediction.setModelTypeAsResNet()

# Set model path
prediction.setModelPath(os.path.join(execution_path, "characters", "models", "myModel.h5"))

# Set JSON path
# This is how the JSON file looks like:
#{
#   "0" : "A",
#   "1" : "O"
#}
prediction.setJsonPath(os.path.join(execution_path, "characters", "json", "model_class.json"))

# Initialize the number of objects you have retrained
prediction.loadModel(num_objects=2)

# run prediction
predictions, probabilities = prediction.predictImage(os.path.join(execution_path, "HandTextTest.jpg"), result_count=2)

# Print each prediction
for eachPrediction, eachProbability in zip(predictions, probabilities):
    print(eachPrediction, " : ", eachProbability)

Любая помощь или совет будут высоко оценены.

1 Ответ

0 голосов
/ 31 марта 2020
# run prediction
predictions, probabilities = prediction.predictImage(os.path.join(execution_path, "HandTextTest.jpg"), result_count=2)

ФункцияgnastImage отвечает за прогнозирование ограничительных рамок для соответствующего изображения. Но эта функция не рисует ограничивающие рамки над изображением, она просто отображает вероятности для разных классов. См. код предсказания .

. Принимая во внимание, что при обнаружении функции обычного пользовательского объекта aws ограничивающий прямоугольник на кадрах видеоизображения результата и сохраняет результат в файл. См. Код detectCustomObjectsFromVideo .

Поэтому вопрос не в том, что может сделать модель, поскольку функция прогнозирования не будет поддерживать рисование ограничительных рамок над изображением. Вы можете либо изменить код, чтобы нарисовать ограничивающий прямоугольник над вашим изображением, либо использовать какой-либо другой пакет или структуру, которая даст вам изображение с ограничивающим прямоугольником.

Не стесняйтесь комментировать, если у вас есть какие-либо вопросы.

...