FC2ブログ

頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


CreateMLで作成したmlmodelを使いCoreMLで予測する

Create MLで学習させmlmodelファイルを得る
↑ここでmlmodelファイルを出力することができたので、今回はこれを使って予測を行う。
なお、言語はObjective-C。macOSアプリ、予測に使う画像はNSImageオブジェクトとする。

出力したmlmodelファイルをXcodeのプロジェクトにドラッグ&ドロップしておく。
@import AppKit;
@import CoreML;
@import Vision;

{
    NSError *error = nil;
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"ImageClassifier" ofType:@"mlmodelc”];//—(1)
    NSURL *url = [NSURL fileURLWithPath:filePath];
    MLModel *mlmodel= [MLModel modelWithContentsOfURL:url error:&error];//—(2)
    VNCoreMLModel *vnmodel = [VNCoreMLModel modelForMLModel:mlmodel error:&error];

    NSImage *nsimage = [NSImage imageNamed:@“xxxx.png"];
    CGImageRef cgimage =  [nsimage CGImageForProposedRect:NULL context:NULL hints:nil];//—(3)

    NSDictionary *dic = [NSDictionary dictionary];
    VNImageRequestHandler *handler = [[VNImageRequestHandler alloc] initWithCGImage:cgimage options:dic] ;
    
    VNCoreMLRequest *mlrequest = [[VNCoreMLRequest alloc]
                               initWithModel:vnmodel
                                completionHandler:(VNRequestCompletionHandler) ^(VNRequest *request, NSError *error){
                                    if (!error) {
                                        for (VNClassificationObservation *obs in request.results) {
                                            NSLog(@"%@ %.3f",   obs.identifier , obs.confidence);
                                        }
                                    }
                                }
                                ];
    
    [handler performRequests:@[mlrequest] error:&error];
}
↑エラーメッセージの表示等は省いている最小限の実装。
(2)のようにMLModelオブジェクトが必要だが、Objective-Cの場合少し手間がかかる。(1)でファイル名を指定するが、拡張子は”mlmodelc”だ。ドラッグ&ドロップしたファイルは”mlmodel”なのに!最後のcは誤字ではない。
今回は予測する画像をNSImageオブジェクトとして読み込んで、(3)の方法でCGImageを得ている。


入力画像

↑この画像を与えて予測させてみる。

予測結果

↑その結果。かろうじて正解。
そもそも少ないデータ数から作成したモデルなので、精度は微妙で他の画像を与えると間違いもあるのだが、とりあえずデータセットからCreateMLで学習させ、その結果を使いCoreMLとVisionで予測させることはできた。


参考サイト
CoreML を使って画像認識、Objective-C で書くと・・・ - Satoshi777jp’s diary
xcode - How to use Machine Learning model in objective-C with CoreML - Stack Overflow
[iOS 11] Core MLで焼き鳥を機械学習させてみた | DevelopersIO


macOS Mojave 10.14

<< NSImageからCGImageを得る  TopPage  Create MLで学習させmlmodelファイルを得る >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1238-cb2506e5




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad