今天简单使用了下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. iOS开发UIResponder简介API

    #import <Foundation/Foundation.h> #import <UIKit/UIKitDefines.h> #import <UIKit/UIEve ...

  2. python爬虫_从零开始破解js加密(一)

    除了一些类似字体反爬之类的奇淫技巧,js加密应该是反爬相当常见的一部分了,这也是一个分水岭,我能解决基本js加密的才能算入阶. 最近正好遇到一个比较简单的js,跟大家分享一下迅雷网盘搜索_838888 ...

  3. python 16 文件操作(二)

    转自 http://www.cnblogs.com/BeginMan/p/3169020.html 一.文件系统 从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进 ...

  4. 码云的使用以及pycharm

    码云的使用 下载Git一路next 在码云上新建仓库 建立码云仓库 ​ 右键 git bash hero 依次输入 git config --global user.name "用户名&qu ...

  5. 随笔-ansible-4

    触发器: 一个任务同时调用多个触发器: 为远程主机上的用户设置环境变量: 保存前一步命令的输出结果,并保存到foo中: 添加环境变量的另一种方式: 注意:lineinfile模块只适用于修改少量环境变 ...

  6. Activiti学习笔记1 — 下载与开发环境的配置

    一.下载 JDK下载URL: Tomcat下载URL:http://tomcat.apache.org/ Eclipse下载URL:http://www.oracle.com/technetwork/ ...

  7. activemq设置后台管理用户名密码,及生产者消息密码

    activemq设置后台管理用户名密码,及生产者消息密码 1.修改conf/activemq.xml 在<broker>标签下,找到</shutdownHooks>标签.在这个 ...

  8. VBA提取HTML文件信息

    Sub test()    Dim html As Object, D As Object, W As Object, arr()    Set html = CreateObject("m ...

  9. Windows Server 2003服务器清理C盘空间的资料多个解决方法

    一.关闭IIS HTTPRERR日志功能 默认情况下,2003服务器会把所有IIS访问错误的记录写入 C:WINDOWSsystem32LogFilesHTTPERR 下的 log 文件中,如果访问量 ...

  10. Idea中创建maven骨架的命令

    如下:通过命令化在Idea中创建骨架成功后,以后项目直接引用导入骨架直接在依赖框架上面进行相关模块开发: 1.mvn archetype:create-from-project 2.mvn clean ...