#ios #swift #coreml #vision
#iOS #swift #coreml #apple-видение
Вопрос:
Я пытаюсь использовать Vision с пользовательской моделью, которую я обучил, но я не вижу способа получить ограничивающую рамку, в которой Vision обнаружил ее в кадре.
Модель: я обучил модель с использованием CreateML, и она может обнаруживать 2 конкретных элемента. Я протестировал модель в CreateML с различными изображениями, и она правильно определяет 2 элемента и помещает вокруг них рамку. Итак, не должен ли Vision также предоставлять мне ограничивающую рамку?
func prepare() {
do {
let vnModel = try VNCoreMLModel(for: modelFile.model)
let coreMlRequest = VNCoreMLRequest(model: vnModel,
completionHandler: { (request, error) in
guard
let results = request.results
as? [VNClassificationObservation] // is this the right cast?
else { return }
// how do I get the bounding box from the results?
})
vnRequests = [coreMlRequest]
}
catch {
print(error)
}
}
func run(arFrame: ARFrame) {
do {
let requestHandler = VNImageRequestHandler(cvPixelBuffer: arFrame.capturedImage,
options: [:])
try requestHandler.perform(self.vnRequests)
}
catch {
print(error)
}
}
Ответ №1:
Вы действительно обучали модель обнаружения объекта? Или модель классификации?
Вы получаете ограничивающие рамки только для модели обнаружения объекта, а не для классификатора.
Предполагая, что вы обучили детектор объектов, правильным классом является VNRecognizedObjectObservation
, а не VNClassificationObservation
.
Комментарии:
1. Я очень новичок в CoreML, это моя первая модель. Возможно, я сделал это неправильно. Я пометил 50 изображений, поместив прямоугольник вокруг элементов, которые я хотел бы обучить. Когда я пробую модель внутри CreateML, она находит элементы и размещает вокруг них точную прямоугольную форму, поэтому я предполагаю, что она была обучена обнаружению объектов.
2. Это звучит правильно. 🙂 Тогда вы должны получать
VNRecognizedObjectObservation
результаты.3. ‘VNRecognizedObjectObservation’ сделал свое дело. Спасибо.