iOS11--ML机器学习VGG16图像分类模型的简单使用

最近有时间玩下苹果新出的CoreML框架,这个框架的作用是可以将训练好的模型用在app中,只要简单的几行代码就能集成,非常的简单和方便。
1、首先去官网下载xcode9beta版本记得系统版本需要10.12.5及以上不然安装不了xcode9。
2、然后就是去ML官网下载VGG16图像分类模型。
3、新建一个工程,将下载好的模型文件导入工程中。
4、简单应用
4.1、VGG16模型的初始化

VGG16 *model = [[VGG16 alloc] init];```

4.2、VGG16Input的初始化(用来输入需要分类的图片)

UIImage *scaledImage = [image scaleToSize:CGSizeMake(224, 224)];
CVPixelBufferRef buffer = [image pixelBufferFromCGImage:scaledImage];
VGG16Input *input = [[VGG16Input alloc] initWithImage:buffer];


4.3、使用VGG16模型来判断输入图片的类型

VGG16Output *output = [model predictionFromFeatures:input error:&error];

NSLog(@"----output ====%@",output.classLabelProbs);

我拿了几张图片进行测试,发现准确率还是蛮高的,不过用了识别人物貌似不太行,优先会被识别图片中物体。这样就能集成到应用了去了,是不是特别的简单。注意上面有两个方法是UIImage添加分类方法
  • (UIImage)scaleToSize:(CGSize)size {
    UIGraphicsBeginImageContext(size);
    [selfdrawInRect:CGRectMake(0,0, size.width, size.height)];
    UIImage
    scaledImage =UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    returnscaledImage;
    }

  • (CVPixelBufferRef)pixelBufferFromCGImage:(UIImage)originImage {
    CGImageRefimage = originImage.CGImage;
    NSDictionary
    options = [NSDictionarydictionaryWithObjectsAndKeys:
    [NSNumbernumberWithBool:YES],kCVPixelBufferCGImageCompatibilityKey,
    [NSNumbernumberWithBool:YES],kCVPixelBufferCGBitmapContextCompatibilityKey,
    nil];
    CVPixelBufferRefpxbuffer =NULL;
    CGFloatframeWidth =CGImageGetWidth(image);
    CGFloatframeHeight =CGImageGetHeight(image);
    CVReturnstatus =CVPixelBufferCreate(kCFAllocatorDefault,
    frameWidth,
    frameHeight,
    kCVPixelFormatType_32ARGB,
    (__bridgeCFDictionaryRef) options,
    &pxbuffer);
    NSParameterAssert(status ==kCVReturnSuccess&& pxbuffer !=NULL);
    CVPixelBufferLockBaseAddress(pxbuffer,0);
    void*pxdata =CVPixelBufferGetBaseAddress(pxbuffer);
    NSParameterAssert(pxdata !=NULL);
    CGColorSpaceRefrgbColorSpace =CGColorSpaceCreateDeviceRGB();
    CGContextRefcontext =CGBitmapContextCreate(pxdata,
    frameWidth,
    frameHeight,
    8,
    CVPixelBufferGetBytesPerRow(pxbuffer),
    rgbColorSpace,
    (CGBitmapInfo)kCGImageAlphaNoneSkipFirst);
    NSParameterAssert(context);
    CGContextConcatCTM(context,CGAffineTransformIdentity);
    CGContextDrawImage(context,CGRectMake(0,
    0,
    frameWidth,
    frameHeight),
    image);
    CGColorSpaceRelease(rgbColorSpace);
    CGContextRelease(context);
    CVPixelBufferUnlockBaseAddress(pxbuffer,0);
    returnpxbuffer;
    }

**5、另外还可以使用其他训练好的模型,可以通过苹果的的转化工具转为改框架支持的格式**
**6蛋筒的事情是如果模型文件太大了,打包的app也会很大,模型文件500多m,打包后也有500m.

你可能感兴趣的:(iOS11--ML机器学习VGG16图像分类模型的简单使用)