Как использовать модель машинного обучения в Objective-C с CoreML

У меня есть проект Machine Vision, сделанный на объекте C (пара тысяч строк). Для его завершения мне нужно импортировать мою машину My_model.mlmodel с последней библиотекой coreML. (в качестве отступления My_model.mlmodel был создан на Python с помощью coremltools) Я пытаюсь создать его экземпляр, но ничего не работает. Я не смог найти никаких руководств или справок по этой теме. Конечно, я импортировал свою модель в чистый проект Swift, и она работает. Поэтому я прикрепил класс Swift к своему проекту, надеясь заставить его работать таким образом, но здесь снова Xcode переводит модель в «интерфейс, сгенерированный Objective-C для модели», и модель не отображается в классе Swift.

На рисунке ниже показано, что Xcode автоматически импортирует .mlmodel как класс Objective-C.

Xcode импортирует mlmodel как класс Objective-C

Мне нужно поместить вектор в модель и получить ответ.

Помогите, пожалуйста; У меня сложилась пара строк после завершения этого проекта. Как использовать My_model.mlmodel внутри Objective-C Есть ли какая-то работа или, может быть, простой простой способ, как в Swift

Большое спасибо.


person Jad Gift    schedule 28.08.2017    source источник
comment
Если вы щелкните маленькую стрелку рядом с linear_model (где указано, что интерфейс, созданный Objective-C для модели), Xcode покажет вам, как выглядит этот код Obj-C.   -  person Matthijs Hollemans    schedule 29.08.2017
comment
Я сделал. Пытался вытащить этот вариант, но что-то не так делаю. Модель даже доходит до моего кода, но я не могу понять, как вводить или выводить данные. Если я вставлю его в свой код, компилятор выдаст предупреждение: результат выражения не используется   -  person Jad Gift    schedule 29.08.2017
comment
Может быть, у вас есть какой-нибудь пример в Objective-C? Я попытался создать экземпляр модели со всеми возможными комбинациями, найденными на веб-сайте документации Apple. Версия Swift намного проще, но проект слишком велик, чтобы переводить его на Swift. Я попытался сделать это с помощью кода Swift внутри своего проекта, но Xcode автоматически преобразует модель в Objective-C, поэтому я вернулся к исходной точке.   -  person Jad Gift    schedule 29.08.2017


Ответы (2)


Возможно, вам поможет этот проект на obj-c: https://github.com/freedomtan/SimpleInceptionV3-ObjC/tree/continuous-mobilenet/SimpleInceptionV3-ObjC

В моем проекте я использую этот метод для инициализации моей модели.

#import "my_model.h"

@property (nonatomic, strong) my_model *model;

- (void)configureModel {
    NSURL *modelUrl = [[NSBundle mainBundle] URLForResource:@"my_model" withExtension:@"mlmodelc"];
    NSError *error;
    self.model = [[my_model alloc] initWithContentsOfURL:modelUrl error:&error];
    if (error) {
        NSLog(@"cover search error: model not configure");
    }
}

Некоторые объяснения того, почему "mlmodelc": https://blog.zedge.net/developers-blog/hotswapping-machine-learning-models-in-coreml-for-iphone

person Alexandr Tchausoff    schedule 18.02.2018
comment
Привет, Алекс, пока я пытаюсь использовать с выбранным изображением его сбой 2019-08-09 23: 22: 24.460166 + 0600 SimpleInceptionV3-ObjC [8806: 452968] [MC] Контейнер системной группы для systemgroup.com.apple.configurationprofiles путь это /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles 2019-08-09 23: 22: 24.460404 + 0600 SimpleInceptionV3-ObjC [8806: 452968] [MC] Чтение из общедоступных эффективных пользовательских настроек. Вы можете сказать, почему он рушится? - person Sk Borhan Uddin; 09.08.2019

Вот как у меня сработало использование моей собственной модели распознавания изображений:

#import <CoreML/CoreML.h>
#import <Vision/Vision.h>
#import "Your_Model_Here.h"    

- (void)readModelMLObjc{

            MLModel *model;
            VNCoreMLModel *m;
            VNCoreMLRequest *request;
            model = [[[Your_Model_Here alloc] init] model];

            m = [VNCoreMLModel modelForMLModel: model error:nil];
            request = [[VNCoreMLRequest alloc] initWithModel: m completionHandler: (VNRequestCompletionHandler) ^(VNRequest *request, NSError *error){
                dispatch_async(dispatch_get_main_queue(), ^{

                    NSInteger numberOfResults = request.results.count;
                    NSArray *results = [request.results copy];
                    VNClassificationObservation *topResult = ((VNClassificationObservation *)(results[0]));
                    NSString *messageLabel = [NSString stringWithFormat: @"%f: %@", topResult.confidence, topResult.identifier];
                    NSLog(@"%@", messageLabel);

                });
            }];

            request.imageCropAndScaleOption = VNImageCropAndScaleOptionCenterCrop;


            CIImage *coreGraphicsImage = [[CIImage alloc] initWithImage:image];

            dispatch_async(dispatch_get_global_queue(QOS_CLASS_UTILITY, 0), ^{
                VNImageRequestHandler *handler = [[VNImageRequestHandler alloc] initWithCIImage:coreGraphicsImage  options:@{}];
                [handler performRequests:@[request] error:nil];
            });}

        }

Надеюсь, помог;)

person Matheus Domingos    schedule 17.03.2020
comment
да благословит тебя Бог, ха-ха - person Dylan; 19.03.2020
comment
Все мы!! хе-хе - person Matheus Domingos; 20.03.2020