Обнаружение множественных объектов с использованием пользовательской модели на Python и imageai
Я обучил свою собственную модель с собственным набором данных изображений для распознавания объектов на изображении, но, похоже, она не распознает все объекты. У меня есть только 2 объекта (изображения разных способов, которыми человек набирает определенную букву алфавита). Например, буква "а" и буква "о", как показано ниже.
Когда я запускаю тестовый код на образце рукописного текста, в определенной степени он говорит, какой процент точности он имеет, но не ограничивает рамки. Это изображение рукописного текста:
Вот результат, который я получаю:
Я использую imageai для обучения кастомной модели. Мне интересно, можно ли использовать эту обученную модель для запуска обнаружения нескольких объектов на рукописном изображении и, возможно, для отображения ограничивающих рамок?
Вот как выглядит мой рабочий каталог, если в нем есть дополнительная помощь:
А вот мой код для обучения модели (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 ответ
# run prediction
predictions, probabilities = prediction.predictImage(os.path.join(execution_path, "HandTextTest.jpg"), result_count=2)
Функция predImage отвечает за предсказание ограничивающих рамок для соответствующего изображения. Но эта функция не рисует ограничивающие рамки на изображении, она просто отображает вероятности для различных классов. См. Код predImage.
В то время как функция detectCustomObjectsFromVideo рисует ограничивающую рамку на кадрах результата видео и сохраняет результат в файл. См. Код detectCustomObjectsFromVideo.
Так что вопрос не в том, что модель может делать, потому что функция прогнозирования не поддерживает рисование ограничивающих рамок над изображением. Вы можете либо изменить код, чтобы нарисовать ограничивающую рамку поверх изображения, либо использовать какой-либо другой пакет или фреймворк, который предоставит вам изображение с ограничивающей рамкой.
Не стесняйтесь комментировать, если у вас есть вопросы.