ThinkerFarm
ThinkerFarm V1.0.4
目录
1 - 简介
2 - 特性
3 - 安装
4 - 文档
5 - 许可
简介
iOS 计算机视觉框架。
ThinkerFarm 是一个包含 OpenCV DNN 模块和 Tensorflow Lite 套件封装的框架。目标检测模块支持 Tensorflow 模型文件和 Tensorflow Lite 模型文件,Caffe 模型,ONNX 模型,Torch 模型文件。ThinkerFarm 提供易于使用的 iOS 语音识别和语音合成。在文本识别中使用 SwiftyTesseract。
特性
[✓] - 目标检测模块支持 Caffe、ONNX、Torch、Tensorflow 模型文件
[✓] - 面部识别模块(OpenCV 面部识别模块)此模块已弃用,不再更新或修复,仅用于实验目的,但 这里 有一个完全功能的示例应用,您可以自由克隆和尝试
[✓] - 语音识别
[✓] - 语音合成器
[✓] - 用于实时检测的自定义相机视图
项目中使用的第三方框架
[✓] - OpenCV DNN
[✓] - OpenCV 面部识别
[✓] - TensorFlowLiteSwift
安装
ThinkerFarm 在 CocoaPods 上发布。如果您想下载和使用源代码,它是开源的,您可以自由地做任何您想做的事情。如果您想在项目中使用框架,请按照以下 pod 安装操作进行。
Podfile
use_frameworks!
target 'YOUR_TARGET_NAME' do
use_frameworks!
pod 'ThinkerFarm'
end
Replace YOUR_TARGET_NAME and then, in the Podfile directory, type:
$ pod install
lipo -create
simulator/ThinkerFarm.framework/ThinkerFarm
devices/ThinkerFarm.framework/ThinkerFarm
-output universal/ThinkerFarm.framework/ThinkerFarm
— 准备 ThinkerFarm 通用框架 —
1:首先为模拟器和通用设备(发布)进行构建。
2 : 转到项目根目录 / build/ Products 文件夹
3 : 输入
mkdir ThinkerFarm
lipo -create -output “ThinkerFarm” “Release-iphonesimulator/ThinkerFarm.framework/ThinkerFarm” “Release-iphoneos/ThinkerFarm.framework/ThinkerFarm”
4 : 输入
$ cp -R Release-iphoneos/ThinkerFarm.framework ./ThinkerFarm.framework
5 : 输入
$ mv ThinkerFarm ./ThinkerFarm.framework/ThinkerFarm
文档
使用Caffe模块
首先,您可以在这里找到完全功能的示例应用程序源代码,位于ThinkerFarmExample存储库中,并在Apple Store中可用的完全功能的ThinkerFarm应用程序
CaffeDetector
创建Caffe探测器
创建并初始化Caffe探测器CaffeDetectorDelegate
import ThinkerFarm.Swift
var caffeDetection : CaffeDetector?
caffeDetection = CaffeDetector()
caffeDetection!.delegate = self
func detectionResuslts(result: [DetectionResults]) {
}
检测器在帧上检测到某些内容后,将在detectionResults函数中返回结构化数据
public struct DetectionResults {
public let className: String
public let classId: String
public let borderRect: CGRect
public let confidence: Float
public let color: UIColor
public let croppedImage : UIImage?
public let detectionDate : Date
}
设置Caffe模型设置
假设您已经训练了一个或使用了预训练模型并将其添加到您的包中。请不要包含扩展名,框架会为您处理。
ModelSettings.caffeModelFile = "YOUR CAFFE MODEL FILE NAME"
您的Caffe模型protoText文件名
ModelSettings.protoText = "YOUR CAFFE PROTOTEXT FILE NAME"
包含您类名的文本文件
ModelSettings.caffeLabelMap = "YOUR CAFFE MODEL CLASSES FILE NAME"
设置缩放因子默认值 1.0
ModelSettings.imageBlobScalefactor = 1.0
设置均值标量默认 ["104.0", "177.0", "123.0"]
ModelSettings.imageBlobMeanScalar = ["104.0", "177.0", "123.0"]
设置SwapRB默认值为false
ModelSettings.imageBlobSwapRB = false
设置Blob Crop默认值为false
ModelSettings.imageBlobCrop = false
如果您希望在检测代理响应中获得裁剪图像,请将此设置为true,裁剪图像将以UIImage格式返回
ModelSettings.returnCroppedImages = true
设置输入大小宽度默认为300
ModelSettings.inputWidth = 300
设置输入大小高度默认为300
ModelSettings.inputHeight = 300
如果您想隐藏检测边框重叠,请将此设置为true,默认为false
ModelSettings.hideOverlay = false
开始检测
最后开始检测,调用检测函数 detectionWithResults,它接收 UIImage 并返回结构化数据 DetectionResults
caffeDetection!.detectionWithResults(withUIImage: image)
CaffeCamera
CaffeCamera 是一个可供使用于 Storyboard 上的 UIView 或仅通过程序创建的相机模块。它通过 detectionResuslts 函数返回结构化数据
@IBOutlet weak var previewView: CaffeCamera!
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
previewView.setup(frame:self.previewView.frame)
}
override func viewDidLoad() {
super.viewDidLoad()
resourceReport.delegate = self
}
TensorFlowDetection
创建 TensorFlow 检测器
创建并初始化 TensorFlow 检测器 TensorFlowDetectionDelegate
import ThinkerFarm.Swift
var detector : TensorFlowDetection?
detector = TensorFlowDetection()
detector!.delegate = self
func detectionResuslts(result: [DetectionResults]) {
}
检测器在帧上检测到某些内容后,将在detectionResults函数中返回结构化数据
public struct DetectionResults {
public let className: String
public let classId: String
public let borderRect: CGRect
public let confidence: Float
public let color: UIColor
public let croppedImage : UIImage?
public let detectionDate : Date
}
设置 TensorFlow 模型配置
支持 TensorFlow Lite 模型,如果您想要使用 ThinkerFarmTrainer (https://github.com/erkansirin/ThinkerFarmTrainer)进行训练和转换
设置您的 TFLite 模型文件
ModelSettings.modelFileInfo = (name: "YOUR MODEL FILE NAME", extension: "tflite")
设置您的标签文件
ModelSettings.labelsFileInfo = (name: "YOUR LABEL FILE NAME", extension: "txt")
设置检测输入大小,默认为 300
ModelSettings.inputWidth = 300
设置检测输入大小,默认为 300
ModelSettings.inputHeight = 300
如果您希望在检测代理响应中获得裁剪图像,请将此设置为true,裁剪图像将以UIImage格式返回
ModelSettings.returnCroppedImages = true
如果您想隐藏检测边框重叠,请将此设置为true,默认为false
ModelSettings.hideOverlay = false
开始检测
最后开始检测,调用检测函数 detectionWithResults,它接收 UIImage 并返回结构化数据 DetectionResults
self.detector!.detectionWithResults(withUIImage: image)
TensorFlowCamera
TensorFlowCamera 是一个用于与 Storyboard 上的 UIView 或程序性创建一起使用的相机模块。它可以在 detectionResults 函数中返回结构化数据。
@IBOutlet weak var previewView: TensorFlowCamera!
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
previewView.setup(frame:self.previewView.frame)
}
override func viewDidLoad() {
super.viewDidLoad()
previewView.delegate = self
}
TensorFlowCamera
TensorFlowCamera 是一个用于与 Storyboard 上的 UIView 或程序性创建一起使用的相机模块。它可以在 detectionResults 函数中返回结构化数据。
@IBOutlet weak var previewView: TensorFlowCamera!
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
previewView.setup(frame:self.previewView.frame)
}
override func viewDidLoad() {
super.viewDidLoad()
previewView.delegate = self
}
VideoAnalysis
创建并初始化 VideoAnalysis。它接受视频 URL,并以字典数组形式返回检测结果,剩余任务在队列中,视频帧以 UIImage 格式。模型设置与上述相同。在初始化时必须指定网络类型。从 VideoPickerDelegate 获取结果。
var videoAnalysis : VideoAnalysis?
videoAnalysis = VideoAnalysis(networkType: "TensorFlow") or videoAnalysis = VideoAnalysis(networkType: "Caffe")
videoAnalysis!.delegate = self
self.videoAnalysis!.processVideo(url:url)
func detectionResuslts(result: [Dictionary<String, Any>], frame: UIImage,remainingJobInQueue:Int,remainingJobCountInQueue:Int) {
}