VisionFramework 및 CoreML을 사용한 이미지 분석
개시하다
CoreML을 사용한 이미지 해석에 관해서는 좀 늦었지만 시도해 보았습니다.
환경 확인
다음 환경을 사용합니다.
이번에 하고 싶은 거.
코어ML을 사용하여 묶음에 포함된 이미지의 해석 결과를 탭에 토로합니다.간단한 동작만 확인하기 위해 터미널 내부에서 이미지를 얻지 않고 이미지의 통신을 하지 않고 프로젝트에 저장합니다.
모델 가져오기
다음 단계에 따라 프로젝트에 학습된 모델을 포함합니다.
이번에는 애플이 제공한 ResNet50을 사용하겠습니다.
※ 모형은 아래 사이트에서 구입할 수 있습니다.
https://developer.apple.com/machine-learning/
클래스 내에는 초기화 방법, 해석용 이미지의 속성, 해석 방법 등이 있다.여기서 눈길을 끄는 것은 이미지가 UIImage가 아니라
CVPixelBuffer
에 의해 정의된 것이다.Resnet50.swift
/// 画像解析対象のイメージ(224 * 224 のピクセルバッファで定義する必要がある)
/// Input image of scene to be classified as color (kCVPixelFormatType_32BGRA) image buffer, 224 pixels wide by 224 pixels high
var image: CVPixelBuffer
/// 解析用のメソッド
func prediction(image: CVPixelBuffer) throws -> Resnet50Output
이루어지다
다음 단계에 따라 실시한다.
import UIKit
import CoreML
import Vision
class ViewController: UIViewController {
// 結果出力用のラベル
@IBOutlet weak var resultLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// 画像ファイルのURL取得
let path = Bundle.main.path(forResource: "sample", ofType: "jpg")
let imageURL = NSURL.fileURL(withPath: path!)
// 学習済みModelのインスタンス生成
let modelFile = Resnet50()
// Vision FrameworkのVNCoreMLRequest用のクラス生成
let model = try! VNCoreMLModel(for: modelFile.model)
// VNRequestのhandler作成
let handler = VNImageRequestHandler(url: imageURL)
// リクエストの生成
let request = VNCoreMLRequest(model: model) { (request, error) in
// 結果取得
guard let results = request.results as? [VNClassificationObservation] else {
fatalError("ML Vision Requestの結果取得失敗")
}
// 予測結果と信頼度の定義
var bestPrediction = ""
var bestConfidence: VNConfidence = 0.0
// 最高信頼度の予測結果と信頼度数値を取得
for classification in results {
if(classification.confidence > bestConfidence) {
bestConfidence = classification.confidence
bestPrediction = classification.identifier
}
}
// 予測結果と信頼度の出力
print("予測: \(bestPrediction) 信頼度:\(bestConfidence)" )
self.resultLabel.text = bestPrediction
}
// requestの実行
try! handler.perform([request])
}
}
감상
CoreML 단일체는 반드시 CVPixel Buffer를 사용해야 한다. 모델에 따라 이미지 사이즈를 조정해야 하고 예측 방법의 매개 변수와 출력 형식은 모델에 따라 미묘한 차이가 있기 때문에 배운 모델의 전환도 시간이 걸리고 약간 어렵다.
그런 점에서 VisionFramework를 사용하면 그 부분은 신선도가 유지되고 문턱이 낮아진다.사용한 모델의 변경도 VNCoreMLModel의 매개 변수의 모델 종류를 변경한 모델일 뿐, 매우 간단하게 느껴진다.
참고 문헌
Apple 공식 문서 - Mine Learning
Reference
이 문제에 관하여(VisionFramework 및 CoreML을 사용한 이미지 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/iganin/items/102b059bd1be4402dfaa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)