2017年6月7日

CoreML试水--图片识别

今年的WWDC上,关于人工智能方面Apple开放了CoreML工具包。

今天就趁着时间还早果断的尝试了一下到底有多容易。

 

import UIKit
import CoreML
import Vision

首先头文件里CoreML和Vision两个新的包都需要引入。

如果只是模仿Apple官方给出的模型可以不使用Vision包,但是如果要做图片识别那么最好使用Vision的方法。(原因之后会提到)

    @IBAction func openLibrary(_ sender: Any) {
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) {
            let imagePicker = UIImagePickerController()
            imagePicker.delegate = self
            imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary;
            imagePicker.allowsEditing = true
            self.present(imagePicker, animated: true, completion: nil)
        }
    }
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
            imagePicked.contentMode = .scaleToFill
            imagePicked.image = pickedImage
        }
        picker.dismiss(animated: true, completion: nil)
    }

简单的导入图片过程,在此不做解释。

    @IBAction func saveImage(_ sender: Any) {
        let imageData = imagePicked.image?.cgImage
        let model = try! VNCoreMLModel(for: Resnet50().model)
        let request = VNCoreMLRequest(model: model, completionHandler: myResultsMethod)
        let handler = VNImageRequestHandler(cgImage: imageData!)
        try! handler.perform([request])
        
    }
1
let model = try! VNCoreMLModel(for: Resnet50().model)//1

 这是一个选择模型个的方法,模型我直接选用的Apple推荐的Resnet50()。(其实有了第三方模型转换之后自己编译也很简单)

1
let handler = VNImageRequestHandler(cgImage: imageData!)//2

 将文件转换成模型识别可支持的数据类型(CVPixelBuffer)当然也有别的可转换方法,但是直接使用Vision的方法更容易实现。

1
let request = VNCoreMLRequest(model: model, completionHandler: myResultsMethod)//3

 读取模型并返回结果至myResultsMethod方法中。

1
guard let results = request.results as? [VNClassificationObservation]//4<br>

 返回结果存储在results中(数组型数据)

for classification in results {    
    print(classification.identifier, // the scene label
            classification.confidence)
}

至此一个带有人工智能的App就开发完了。

准确来说不到十行代码。

完整代码

 

posted @ 2017-06-07 21:54 dinghing 阅读(4100) 评论(2) 推荐(2) 编辑

2016年12月4日

机器学习--多层感知机(2)

摘要: 简单的感知机的使用界限上一节介绍了一个简单的感知机的运作过程,如下图: 由于输出的是0和1,所以激活函数f(u)的结果也是0或者1。 虽然简单的感知机可以解决一些问题,但是当涉及到比较复杂的问题的时候简单的感知机明显无法做到我们想要的。比如XOR运算。 对于简单的感知机的权重计算方法,在上一节已经介 阅读全文

posted @ 2016-12-04 14:45 dinghing 阅读(3214) 评论(0) 推荐(0) 编辑

2016年12月3日

机器学习-感知机实现(1)

摘要: 前提 这系列文章不是为了去研究那些数学公式怎么推导,而是为了能将机器学习的思想快速用代码实现。最主要是梳理一下自己的想法。 感知机 感知机,就是接受每个感知元(神经元)传输过来的数据,当数据到达某个阀值的时候就会产生对应的行为如下图,对应每个感知元有一个对应的权重,当数据到达阀值u的时候就会执行对应 阅读全文

posted @ 2016-12-03 18:29 dinghing 阅读(2803) 评论(0) 推荐(1) 编辑

2016年9月24日

特殊的反转单链表算法(C++)

摘要: 普通的单链表反转算法 大学的时候也做过好几次单链表的反转,记得当时都是用三个变量不断修改next的值然后实现反转。 1 ListNode* reverseList(ListNode* head) { 2 ListNode *pre = NULL,*tmp,*cur = head; 3 while(c 阅读全文

posted @ 2016-09-24 17:28 dinghing 阅读(335) 评论(0) 推荐(0) 编辑

2016年6月21日

openCV 2.4.13 iOS background_segm.hpp 'list' file not found

摘要: 最近下载了最新版的OpenCV的Framework。 导入到项目里边,编译。然后就出现了问题 #include 中的list没有。。。。。 google了一圈也没有找到好的解决办法。 然后好好的回忆了一下list好像是C++的一个标准库。 然后就简单的尝试了一下#ifdef __cplusplus 阅读全文

posted @ 2016-06-21 22:52 dinghing 阅读(2027) 评论(0) 推荐(0) 编辑

2016年6月19日

UAF漏洞--iOS是越狱原理

摘要: Use After Free UAF 就是 Use After Free的缩写,是一种比较常见的内存错误式利用。很多iOS的越狱都是利用的这种方法。在此简单的举个例子说明UAF出现的情况 代码说明一切 这个程序有三个类,其中Fuel_car和Electric_car都是继承自Car。并且分别实现了C 阅读全文

posted @ 2016-06-19 20:33 dinghing 阅读(1666) 评论(0) 推荐(1) 编辑

2016年6月7日

机器学习--线性回归的实践

摘要: 1.鉴于之前提到的房价的问题,使用线性回归该如何解决呢? 首先我们假设有如下的数据方便计算机进行学习 根据之前的演算过程(使房价与面积和卧室数目线性相关): θ为计算时的权重,x1为房间面积,x2为我是数目。为了降低计算的模糊程度,将hθ(x)变成h(x)来进行计算,这时计算公式为: n为学习次数。 阅读全文

posted @ 2016-06-07 10:59 dinghing 阅读(978) 评论(0) 推荐(0) 编辑

2016年6月5日

机器学习--梯度下降

摘要: 梯度下降 在梯度下降这一节中我们主要介绍了两个概念(参数):学习速率和终止条件 学习速率 一般来讲,学习速率不能太大,也不能太小 太大可能导致下降过程中来回震荡,无法准确找到几值点(最大值或最小值) 如果太小可能会导致: 梯度下降在某一个值的区段中无法跳出 迭代的次数过多而导致学习时间变长 梯度下降 阅读全文

posted @ 2016-06-05 18:24 dinghing 阅读(757) 评论(0) 推荐(0) 编辑

2016年6月2日

机器学习--基础知识复习(模式识别,成本函数)

摘要: 由于时间原因,今天主要复习下machine learning课程的前三节,简单记录自己的理解。 1.模式表达(Model representation) 其实就是指通过一定的范例数据学习追踪生成一个函数的表达形式。然后通过矩阵得到整个运算过程。 模型表达就是给出输入和输出之间的函数关系式,当然这个函 阅读全文

posted @ 2016-06-02 22:44 dinghing 阅读(2468) 评论(0) 推荐(1) 编辑

2016年6月1日

机器学习:从入门到沉迷之机器的思考方式

摘要: 一般情况下我们人类大脑可以在没有明确指示的情况下处理绝大部分问题。例如,你做房产经纪时间很长,你对于房产的合适定价、它的最佳营销方式以及哪些客户会感兴趣等等都会有一种本能般的“感觉”。强人工智能(Strong AI)研究的目标就是要让计算机能这样思考。 但是目前的机器学习算法还没有那么好——它们只能 阅读全文

posted @ 2016-06-01 22:18 dinghing 阅读(2007) 评论(0) 推荐(3) 编辑

< 2025年4月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 1 2 3
4 5 6 7 8 9 10

导航

统计

点击右上角即可分享
微信分享提示