查找一个图片选择器
我用的是ImagePicker
项目有点老了,需要做一些改造,下面是新的仓库
platform :ios, '16.0'
use_frameworks!
target 'learnings' do
source 'https://github.com/CocoaPods/Specs.git'
pod 'ImagePicker', :git => 'https://github.com/KevinSnoopy/ImagePicker.git'
end
接下来就是使用图片选择器输出图片了
func wrapperDidPress(_ imagePicker: ImagePicker.ImagePickerController, images: [UIImage]) {
}
func doneButtonDidPress(_ imagePicker: ImagePicker.ImagePickerController, images: [UIImage]) {
if !images.isEmpty, let _ = images.first {
/**
在这里输出图片,可以调用模型进行解析
*/
}
}
func cancelButtonDidPress(_ imagePicker: ImagePicker.ImagePickerController) {
imagePicker.dismiss(animated: true)
}
当前我使用了几个公开的模型
FCRN:
/**
深度估计
根据一幅图像来预测深度。
*/
func fcrnDepthPrediction(image: UIImage?) {
let config = MLModelConfiguration()
config.computeUnits = .all
if let img = image?.cgImage, let fcrn = try? FCRN(contentsOf: FCRN.urlOfModelInThisBundle, configuration: config) {
if let input = try? FCRNInput(imageWith: img), let output = try? fcrn.prediction(input: input) {
print(output.depthmapShapedArray)
}
}
}
MNISTClassifier:
/**
涂鸦分类
对单个手写数字进行分类 (支持数字 0-9)。
*/
func mnistClassifier(image: UIImage?) {
if let img = image?.cgImage, let mnist = try? MNISTClassifier(contentsOf: MNISTClassifier.urlOfModelInThisBundle, configuration: MLModelConfiguration()) {
if let input = try? MNISTClassifierInput(imageWith: img), let output = try? mnist.prediction(input: input) {
print(output.classLabel)
print(output.labelProbabilities)
}
}
}
UpdatableDrawingClassifier:
/**
涂鸦分类
基于 K-最近邻算法(KNN)模型来学习识别新涂鸦的涂鸦分类器。
*/
func updatableDrawingClassifier(image: UIImage?) {
if let img = image?.cgImage, let updatable = try? UpdatableDrawingClassifier(contentsOf: UpdatableDrawingClassifier.urlOfModelInThisBundle, configuration: MLModelConfiguration()) {
if let input = try? UpdatableDrawingClassifierInput(drawingWith: img), let output = try? updatable.prediction(input: input) {
print(output.label)
print(output.labelProbs)
}
}
}
MobileNetV2:
/**
图像分类
MobileNetv2 架构经过训练,可对相机取景框内或图像中的主要对象进行分类。
*/
func mobileNetV2(image: UIImage?) {
if let img = image?.cgImage, let netv2 = try? MobileNetV2(contentsOf: MobileNetV2.urlOfModelInThisBundle, configuration: MLModelConfiguration()) {
if let input = try? MobileNetV2Input(imageWith: img), let output = try? netv2.prediction(input: input) {
print(output.classLabel)
print(output.classLabelProbs)
}
}
}
Resnet50:
/**
图像分类
一种残差神经网络,它能对相机取景框内或图像中的主要对象进行分类。
*/
func resnet50(image: UIImage?) {
if let img = image?.cgImage, let resnet = try? Resnet50(contentsOf: Resnet50.urlOfModelInThisBundle, configuration: MLModelConfiguration()) {
if let input = try? Resnet50Input(imageWith: img), let output = try? resnet.prediction(input: input) {
print(output.classLabel)
print(output.classLabelProbs)
}
}
}
SqueezeNet:
/**
图像分类
一种小型深度神经网络架构,它能对相机取景框内或图像中的主要对象进行分类。
*/
func squeezeNet(image: UIImage?) {
if let img = image?.cgImage, let net = try? SqueezeNet(contentsOf: SqueezeNet.urlOfModelInThisBundle, configuration: MLModelConfiguration()) {
if let input = try? SqueezeNetInput(imageWith: img), let output = try? net.prediction(input: input) {
print(output.classLabel)
print(output.classLabelProbs)
}
}
}