美文网首页iOS DevelopmentiOS Developer
iOS11--ML机器学习VGG16图像分类模型的简单使用

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

作者: 改变自己_now | 来源:发表于2017-06-15 11:24 被阅读152次

    最近有时间玩下苹果新出的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图像分类模型的简单使用

        本文链接:https://www.haomeiwen.com/subject/tomyqxtx.html