coreML에서 다운받아서 {프로젝트}에 추가해준다
project 추가시 셋팅

** 대부분 create groups 사용
func detectedObject() {
if let ciImage = self.selectedCIImage {
do {
let vnCoreMLModel = try VNCoreMLModel(for: Inceptionv3(configuration: .init()).model)
let request = VNCoreMLRequest(model: vnCoreMLModel, completionHandler: self.handleObjectDetection)
request.imageCropAndScaleOption = .centerCrop
let requestHandler = VNImageRequestHandler(ciImage: ciImage, options: [:])
try requestHandler.perform([request])
} catch {
print(error)
}
}
}
func handleObjectDetection(request: VNRequest, error: Error?) {
if let result = request.results?.first as? VNClassificationObservation {
self.categoryLabel.text = result.identifier
self.confidenceLabel.text = "\(String(format:"%.1f",result.confidence * 100))%" // confidence:Float , .1f = 소수점 한자리만 표현
}
}
DispatchQueue.global(qos: .userInitiated).async { // ML 코드를 백그라운드에서 실행
self.detectedObject()
}
...
func handleObjectDetection(request: VNRequest, error: Error?) {
if let result = request.results?.first as? VNClassificationObservation {
// 하단 코드는 UI 관련 코드이기 때문에 메인 스레드에서 실행해줘야함
// self.categoryLabel.text = result.identifier
// self.confidenceLabel.text = "\(String(format:"%.1f",result.confidence * 100))%" // confidence:Float , .1f = 소수점 한자리만 표현
DispatchQueue.main.async {
self.categoryLabel.text = result.identifier
self.confidenceLabel.text = "\(String(format:"%.1f",result.confidence * 100))%" // confidence:Float , .1f = 소수점 한자리만 표현
}
}
}

ddd
func displayUI(for faces:[VNFaceObservation]){
if let faceImage = self.selectedImage {
//imageRect : image size
let imageRect = AVMakeRect(aspectRatio: faceImage.size, insideRect: self.selectedImageView.bounds)
for face in faces {
let w = face.boundingBox.size.width * imageRect.width
let h = face.boundingBox.size.height * imageRect.height
let x = face.boundingBox.origin.x * imageRect.width
let y = imageRect.maxY - (face.boundingBox.origin.y * imageRect.height)
let layer = CAShapeLayer() // ImageView 안에 사각형 그리는 layer
layer.frame = CGRect(x: x, y: y, width: w, height: h)
layer.borderColor = UIColor.red.cgColor
layer.borderWidth = 1
self.selectedImageView.layer.addSublayer(layer)
}
}
}