美文网首页
swift-CoreML-猫狗识别

swift-CoreML-猫狗识别

作者: 寒丶酥 | 来源:发表于2019-07-29 13:49 被阅读0次

一:我们需要在Main.storyboard中拉出来label和button和imageView

如下图所示 :

1:在红框的位置选取button和label和imageView

image

2:之后将imageView拖拉进去,如下图所示

image

3:接下来,我们按照上面的方法来把button和label也放到imageView的上面,最终的效果图如下:

image

4:然后我们为了适配大多数的iphone机型,我们来给button添加限制条件

我们先给imageView添加限制条件吧!

在左下角的第二个按钮我们限制图片的width和height分别为374和816,距离手机上部距离为40,下部距离为6,左右距离为20

image

5:我们给label和button也加上这样的限制

image image

6:为了能够直观地看到button和label我们来改变这两个控件的颜色

在background中设置它的属性

image

7:完成之后,我们点击那个双圆圈按钮切换到双页面,按住control键拖拉storyboard中的控件到代码里面,并且设置按钮的名字。

image image

完成了storyboard之后,在代码端是下面这个样式

image

二:接下来我们的操作

(1):我们把训练好的模型导入到我们的project中(拖拉到页面右端)

image

(2):接下来我们给两个button添加点击事件

//当点击拍照时调用takephoto这个方法
camer_button.addTarget(self, action: #selector(takephoto), for: .touchUpInside)
//当点击从相册中选择的时候调用chooseImageFromLibrary这个方法
photos_button.addTarget(self, action: #selector(chooseImageFromLibrary), for: .touchUpInside)

(4):接着我们在chooseImageFromLibrary中实现从相册中获取图片的功能

@objc func chooseImageFromLibrary(_ sender: Any) {
   //判断是否可以打开相册
       if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary) {
           //调用打开相册权限的函数
           let imagePicker = UIImagePickerController()
           //设置代理
           imagePicker.delegate = self
           //设置控制器的类型---相册
           imagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary
           //图片不允许编辑
           imagePicker.allowsEditing = false
           //跳转到控制器---相册
           self.present(imagePicker,animated: true,completion: nil)
       }
   }

三:我们选取图片之后,开始通过我们导入的模型来分析选中的图片,我们在imagePickerController这个函数中实现

//获取图片后的操作
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        //获取图像
        if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            display_label.text = "分析中"
            //图片填充模式--等比例缩放图片
            image.contentMode = .scaleToFill
            image.layer.masksToBounds = true
            //在imageView上显示获取到的图片
            image.image = pickedImage
            //加载模型
            guard let model = try? VNCoreMLModel(for:ImageClassifier().model) else {
                fatalError("无法加载训练模型")
            }
            //创建一个模型请求
            let requset = VNCoreMLRequest(model: model) {
                [weak self] requesst,error in guard let results = requesst.results as? [VNClassificationObservation],
                    let topResult = results.first else {
                        fatalError("失败")
                }
                //主线程更新UI
                DispatchQueue.main.async {
                    print(topResult)
                    //显示识别的结果
                    self!.display_label.text = "识别的结果是:\(Int(topResult.confidence*100))%是\(topResult.identifier)"
                    //if topResult.confidence < 0.99{
                       // self!.display_label.text = "识别的结果是:\(Int(topResult.confidence*100))%是\(topResult.identifier)"
                    //}
                    //else {
                       // self!.display_label.text = "识别的结果是:非猫非狗"
                    }
                    
                }
            }
            //将获取到的图片转换为CIImage类型作为参数传递给模型
            guard let ciImage = CIImage(image: pickedImage) else {
                fatalError("不能获取选择到的图片")
            }
            //运行图片分类识别器
            let handler = VNImageRequestHandler(ciImage: ciImage)
            DispatchQueue.global().async {
                do {
                    try handler.perform([requset])
                }
                catch {
                    print(error)
                }
            }
            
        }
        picker.dismiss(animated: true, completion: nil)
}

最后,也是最重要的事情,需要在Info.plist中加入调用相机的权限

image

相关文章

  • swift-CoreML-猫狗识别

    一:我们需要在Main.storyboard中拉出来label和button和imageView 如下图所示 : ...

  • 识别

    猫狗大战识别keras + tensorflow 实现猫和狗图像分类

  • 猫狗识别

    这是lintCode上面的一个挑战题 原题链接 1、题目介绍 本题是一个图像识别中的二分类问题 建议先把不同尺寸...

  • 13. 错误分析:查看开发集样例评估想法(machine lea

    当你使用猫app的时候,你发现有将狗识别为猫的错误。一些狗长得像猫! 一个成员建议引入第三方软件,从而让系统在狗上...

  • tensorflow2识别猫与狗

    问题 现在有很多的图片,里面分别有猫与狗,识别这些图片,区分猫与狗 设计解决这个问题的思路 [1]图片地址 htt...

  • tensorflow猫狗识别例程

    具体工程代码git地址 https://github.com/hongrui16/myTensorFlowTuto...

  • 14. 在错误分析的过程中并行评估多个想法(machine le

    你的团队对于提升猫检测有好几个想法: 修复狗被识别为猫的问题; 修复“大猫(great cats)”(狮子,美洲豹...

  • CV 1st Opening && NN structure

    计算机视觉 物理:光学 生物学: 生物是如何分析图像的 数学 计算机 算法和程序 图像识别最近很火 (识别猫狗等)...

  • fast.ai-深度学习笔记-Part1-lesson2

    数据集文件结构 以「猫狗识别」为例 训练结果 epoch(训练次数)training loss(训练集损失值)va...

  • 猫其实也可以训练

    研究表明,猫可以识别并响应我们微妙的社交暗示,并接受训练以执行与狗类似的任务。比如,猫仅需要很少的练习就能学会如厕...

网友评论

      本文标题:swift-CoreML-猫狗识别

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