Download classifier, database

This commit is contained in:
christophhagen
2020-05-16 11:21:55 +02:00
parent dceb3ca07d
commit 7287607a60
50 changed files with 3555 additions and 2919 deletions

View File

@@ -0,0 +1,30 @@
//
// Array+Extensions.swift
// CapCollector
//
// Created by Christoph on 12.05.20.
// Copyright © 2020 CH. All rights reserved.
//
import Foundation
extension Array {
func split(intoPartsOf maxElements: Int) -> [ArraySlice<Element>] {
guard !isEmpty, maxElements > 0 else {
return []
}
var result = [ArraySlice<Element>]()
var currentIndex = 0
while true {
let nextIndex = currentIndex + maxElements
if nextIndex >= count {
result.append(self[currentIndex..<count])
return result
}
result.append(self[currentIndex..<nextIndex])
currentIndex += maxElements
}
return result
}
}

View File

@@ -0,0 +1,33 @@
//
// CGImagePropertyOrientation+Extensions.swift
// CapCollector
//
// Created by Christoph on 13.05.20.
// Copyright © 2020 CH. All rights reserved.
//
import UIKit
extension CGImagePropertyOrientation {
/**
Converts a `UIImageOrientation` to a corresponding
`CGImagePropertyOrientation`. The cases for each
orientation are represented by different raw values.
- Tag: ConvertOrientation
*/
init(_ orientation: UIImage.Orientation) {
switch orientation {
case .up: self = .up
case .upMirrored: self = .upMirrored
case .down: self = .down
case .downMirrored: self = .downMirrored
case .left: self = .left
case .leftMirrored: self = .leftMirrored
case .right: self = .right
case .rightMirrored: self = .rightMirrored
@unknown default:
fatalError()
}
}
}

View File

@@ -0,0 +1,22 @@
//
// UIColor+Extensions.swift
// CapCollector
//
// Created by Christoph on 14.04.20.
// Copyright © 2020 CH. All rights reserved.
//
import UIKit
extension UIColor {
var rgb: (red: Int, green: Int, blue: Int) {
var fRed: CGFloat = 0
var fGreen: CGFloat = 0
var fBlue: CGFloat = 0
var fAlpha: CGFloat = 0
getRed(&fRed, green: &fGreen, blue: &fBlue, alpha: &fAlpha)
return (Int(fRed * 255.0), Int(fGreen * 255.0), Int(fBlue * 255.0))
}
}

View File

@@ -80,4 +80,48 @@ extension UIImage {
UIImage(cgImage: cgImage, scale: 1, orientation: imageOrientation).draw(in: breadthRect)
return UIGraphicsGetImageFromCurrentImageContext()
}
var averageColor: UIColor? {
let image = ciImage ?? CIImage(cgImage: cgImage!)
return image.averageColor
}
}
extension CIImage {
var averageColor: UIColor? {
let extentVector = CIVector(
x: extent.origin.x,
y: extent.origin.y,
z: extent.size.width,
w: extent.size.height)
guard let filter = CIFilter(name: "CIAreaAverage", parameters: [kCIInputImageKey: self, kCIInputExtentKey: extentVector]) else {
log("Failed to create filter")
return nil
}
guard let outputImage = filter.outputImage else {
log("Failed get filter output")
return nil
}
var bitmap = [UInt8](repeating: 0, count: 4)
let context = CIContext(options: [.workingColorSpace: kCFNull!])
context.render(outputImage, toBitmap: &bitmap, rowBytes: 4, bounds: CGRect(x: 0, y: 0, width: 1, height: 1), format: .RGBA8, colorSpace: nil)
let color = UIColor(
red: saturate(bitmap[0]),
green: saturate(bitmap[1]),
blue: saturate(bitmap[2]),
alpha: CGFloat(bitmap[3]) / 255)
return color
}
}
/// Map expected range 75-200 to 0-255
private func saturate(_ component: UInt8) -> CGFloat {
return max(min(CGFloat(component) * 2 - 150, 255), 0) / 255
}
extension CIImage: Logger { }

View File

@@ -0,0 +1,31 @@
//
// UINavigationItem+Extensions.swift
// CapCollector
//
// Created by Christoph on 12.05.20.
// Copyright © 2020 CH. All rights reserved.
//
import UIKit
extension UINavigationItem {
func setTitle(_ title: String, subtitle: String) {
let titleLabel = UILabel()
titleLabel.text = title
titleLabel.font = .systemFont(ofSize: 17.0)
titleLabel.textColor = .black
let subtitleLabel = UILabel()
subtitleLabel.text = subtitle
subtitleLabel.font = .systemFont(ofSize: 12.0)
subtitleLabel.textColor = .gray
let stackView = UIStackView(arrangedSubviews: [titleLabel, subtitleLabel])
stackView.distribution = .equalCentering
stackView.alignment = .center
stackView.axis = .vertical
self.titleView = stackView
}
}

View File

@@ -16,4 +16,8 @@ extension UIView {
subviews.forEach { subviews.append(contentsOf: $0.recursiveSubviews) }
return subviews
}
func fromNib<T : UIView>() -> T { // 2
return Bundle(for: type(of: self)).loadNibNamed(String(describing: type(of: self)), owner: self, options: nil)!.first! as! T
}
}

View File

@@ -18,8 +18,8 @@ extension UIViewController {
let alertController = UIAlertController(
title: title,
message: message,
preferredStyle: .alert,
blurStyle: .dark)
preferredStyle: .alert)//,
//blurStyle: .dark)
alertController.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))