今天简单使用了下CoreML , 我的这个模型功能主要是 打开摄像头,然后对准物体,会自动帮我们识别摄像头中的物体,并且给我们大概的百分比值

代码如下:

    @IBAction func startClick(_ sender: Any) {
startFlag = !startFlag
if startFlag {
startCaptureVideo()
startButton.setTitle("stop", for: .normal)
}else {
startButton.setTitle("start", for: .normal)
stop()
} } //1、初始化CaptureSeason
lazy var captureSession:AVCaptureSession? = {
    //1.1 实例化
let captureSession = AVCaptureSession()
captureSession.sessionPreset = .photo
   //1.2 获取默认设备
guard let captureDevice = AVCaptureDevice.default(for: .video) else {
return nil
} guard let captureDeviceInput = try? AVCaptureDeviceInput(device: captureDevice) else {
return nil
} captureSession.addInput(captureDeviceInput) let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
view.layer.addSublayer(previewLayer)
previewLayer.frame = view.frame let dataOutput = AVCaptureVideoDataOutput()
dataOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "kingboVision"))
captureSession.addOutput(dataOutput)
return captureSession
}() func startCaptureVideo(){
captureSession?.startRunning()
} func stop() {
captureSession?.stopRunning()
} func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
print("Camera was safe ")
guard let pixelBuffer:CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else
{
print("nil object ")
return
} guard let model = try? VNCoreMLModel(for: SqueezeNet().model) else {return} let request = VNCoreMLRequest(model: model) { [unowned self](finishRequest, error) in
//
guard let results = finishRequest.results as? [VNClassificationObservation] else {
return
}
guard let first = results.first else {
return
}
DispatchQueue.main.async {
self.descriptionLabel.text = "\(first.identifier): \(first.confidence * 100)%,"
}
}
print("start to VN") try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:]).perform([request])
}

分为以下几步操作

1、我们工程inf.plist 文件中添加摄像头权限说明

  Privacy - Camera Usage Description     相机权限设置

 Privacy - Microphone Usage Description  麦克风权限设置

2、头文件引用

import AVKit
import Vision

3、准备模型

模型准备我这里是使用App 官网上的SqueezeNet模型

4、将模型拖动到工程里面即可

5、代码编写部分

 5.1 初始化AVCaptureSession

       let captureSession =  AVCaptureSession()
captureSession.sessionPreset = .photo

5.2 获取当前iPhone 设备控制,当作输入数据来源

guard  let captureDevice = AVCaptureDevice.default(for: .video) else {
return nil
}

captureSession.addInput(captureDeviceInput)

5.3 设置输出数据

//设置输出数据处理对象
let dataOutput = AVCaptureVideoDataOutput()
dataOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "kingboVision"))
captureSession.addOutput(dataOutput)

AVCaptureVideoDataOutput 设置代理,处理数据流图片数据,因此当前ViewController需要实现AVCaptureVideoDataOutputSampleBufferDelegate 的代理,如下

class ViewController: UIViewController ,AVCaptureVideoDataOutputSampleBufferDelegate{
...... func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
//将视频数据转成CVPixBuffer
guard let pixelBuffer:CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else
{
print("nil object ")
return
}
// 这里SquzzedNet是我从苹果中直接获取的模型
guard let model = try? VNCoreMLModel(for: SqueezeNet().model) else {return} let request = VNCoreMLRequest(model: model) { [unowned self](finishRequest, error) in
//处理数据分析进行业务处理
guard let results = finishRequest.results as? [VNClassificationObservation] else {
return
}
guard let first = results.first else {
return
}
DispatchQueue.main.async {
self.descriptionLabel.text = "\(first.identifier): \(first.confidence * 100)%,"
}
}
print("start to VN") try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:]).perform([request])
}
.....
}

5.4 将当前的摄像头显示在指定的View 上,(我们这里使用当前VC 的view)

  let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
view.layer.addSublayer(previewLayer)
previewLayer.frame = view.frame

效果如下:

CoreML 简单使用的更多相关文章

  1. CoreML试水--图片识别

    今年的WWDC上,关于人工智能方面Apple开放了CoreML工具包. 今天就趁着时间还早果断的尝试了一下到底有多容易. import UIKit import CoreML import Visio ...

  2. Unity AR Foundation 和 CoreML: 实现手部的检测和追踪

    0x00 前言 Unity的AR Foundation通过上层抽象,对ARKit和ARCore这些底层接口进行了封装,从而实现了AR项目的跨平台开发能力. 而苹果的CoreML是一个可以用来将机器学习 ...

  3. iOS11 SDK 新特性 CoreML 及swift 小demo

    github代码 如果本博客对您有帮助,希望可以得到您的赞赏! swift 机器学习Core ML的简单调用小demo.完整代码附上: https://github.com/Liuyubao/LYBC ...

  4. coreml之通过URL加载模型

    在xcode中使用mlmodel模型,之前说的最简单的方法是将模型拖进工程中即可,xcode会自动生成有关模型的前向预测接口,这种方式非常简单,但是更新模型就很不方便. 今天说下另外一种通过URL加载 ...

  5. Mac mini M1使用简单体验(编程、游戏、深度学习)

    好久不见了各位! 前一阵子忍不住剁手买了M1芯片的mac mini,为了弥补自己的内疚感就卖了自己的旧的mbp2017款.数据也完全迁移到了新机器上,之前的工作也就由mbp2017彻底换成mac mi ...

  6. 【造轮子】打造一个简单的万能Excel读写工具

    大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...

  7. Fabio 安装和简单使用

    Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...

  8. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  9. 哪种缓存效果高?开源一个简单的缓存组件j2cache

    背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...

随机推荐

  1. ionic-CSS:ionic 按钮

    ylbtech-ionic-CSS:ionic 按钮 1.返回顶部 1. onic 按钮 按钮是移动app不可或缺的一部分,不同风格的app,需要的不同按钮的样式. 默认情况下,按钮显示样式为:dis ...

  2. LeetCode 1041. Robot Bounded In Circle (困于环中的机器人)

    题目标签:Math 题目让我们判断机器人是否是一直在走一个圈. 当我们把 instructions 走完一遍时候: 1. 如果机器人回到了原点,那么它是在走一个圈. 2. 如果机器人的方向没有改变,那 ...

  3. 干货:Java正确获取客户端真实IP方法整理

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  4. Spring源码分析(一):从哪里开始看spring源码(系列文章基于Spring5.0)

    概述 对于大多数第一次看spring源码的人来说,都会感觉不知从哪开始看起,因为spring项目源码由多个子项目组成,如spring-beans,spring-context,spring-core, ...

  5. codeforces round#524 C. Masha and two friends /// 矩形切割

    题目大意: 给定n行m列的黑白棋盘如下 给定矩形的左下点x1 y1和右上点x2 y2将这个区域都涂成白色 再给定矩形的左下点x3 y3和右上点x4 y4将这个区域都涂成黑色 求最后棋盘内有分别多少个白 ...

  6. java_MySQL未整理

    package cn.aikang.MySql; public class MySqlTest {/*数据库的基本概念: 1.数据库的英文单词:DataBase简称:DB 2.什么是数据库:用于存储和 ...

  7. 《创新者》读书笔记 PB16110698 第五周(~4.5)

    本周我阅读了某同学推荐的<创新者>,这本书实际上是两个世纪以来信息技术的编年史,从巴贝奇的差分机到如今互联网时代的超级计算机,作者通过各个时代里一位位杰出的创新者,将计算机诞生.发展.崛起 ...

  8. Django ORM 之F、Q查询与事务

    返回ORM目录 Django ORM 内容目录 一.F.Q查询 二.事务 三.only与defer 一.F.Q查询 """ Product表中的数据: 1 橡皮 2 20 ...

  9. Virtualenv开发文档

    virtualenv是创建孤立的Python环境的工具.正在解决的基本问题是依赖和版本之一以及间接权限.想象一下,您有一个需要LibFoo版本1的应用程序,但另一个应用程序需要版本2.如何使用这两个应 ...

  10. BCZM : 1.4

    书店促销活动,某套书一共有五卷.假设每一卷单独销售均需8欧元,多买则有折扣,具体折扣如下:    2 5%    3 10%    4 20%    5 25%    设计算法,计算出读者购买一批书的 ...