아이폰에서 기계 학습 모형으로 이미지 식별
( https://qiita.com/advent-calendar/2018/gmo-am ) 의 보도.
GMO 광고 마케팅이 Advent Calendar에 참가하는 것은 이번이 처음이다.
입문
'ML 만들기'를 사용하면 머신러닝 모델을 쉽게 만들 수 있기 때문에 한번 시도해 보았습니다.
이미지 인식을 통해 아이폰 카메라의 인물이 무엇인지 식별하는 앱을 만든다.
내가 너에게 식별시키고 싶은 것은 산타클로스다.다른 것은 하동, 좀비다.
실행 환경은 다음과 같습니다.
Mac OS X 10.14.2(mojave)
iOS12
Xcode10
기계 학습 모형 만들기
이미지 데이터 수집
구글 등 검색엔진을 이용해 산타클로스, 하동, 좀비의 사진을 각각 수집한다.
수집된 이미지는 이번에 사용된 Apple의 이미지 인식 메커니즘에 따라 분류되어 저장됩니다.
이미지의 약 80%는 교육 데이터 세트로 교육 데이터 세트 폴더 아래에 저장되고 나머지 이미지는 테스트 데이터 세트로 테스트 아래 폴더에 저장됩니다.
이번에는 산타클로스, 하동, 좀비의 종류별로 20장의 이미지를 준비해 훈련용 폴더에 16장, 테스트용 이미지 목록에 4장의 이미지를 저장했다.
다음은 설정 예입니다.
교육 데이터 세트
테스트 데이터 세트
기계 학습 모형 만들기
Xcode에서 Playground를 선택한 다음 macOS 템플릿을 선택합니다.
편집기에 다음을 입력합니다.
Recognition.swiftimport CreateMLUI
let builder = MLImageClassifierBuilder()
builder.showInLiveView()
코드를 입력하고 Playgound의 실행 아이콘을 선택합니다.
Assistant Editor 디스플레이 버튼을 선택하면 오른쪽에 이미지용 머신러닝용 GUI가 표시됩니다.
그럼 제가 기계 학습용 모형을 만들게요.트레이닝 이미지가 포함된 폴더를 Drop Images to Begin Traning 섹션으로 드래그합니다.그리고 기계 학습 모형을 만들기 위한 교육을 시작한다.
다음은 기계 학습 모형의 테스트를 진행한다.테스트 이미지가 포함된 폴더를 Drop Images to Begin Testing으로 드래그합니다.방금 만든 기계 학습 모델을 테스트하여 식별 정밀도를 표시합니다.
생성된 머신 러닝 모델의 이름을 지정하고 파일을 저장합니다.
이 설정의 예는 ImageClassifier입니다.파일은 mlmodel 이름으로 저장됩니다.
기계 학습 모형 내장
XCode에서 Project를 선택하고 iOS의 템플릿을 선택하여 iPhone용 응용 프로그램을 만듭니다.
머신 러닝 모델 추가
드래그하여 추가합니다.
Info.평면 편집
카메라를 사용할 설정을 추가합니다.
Info.plist <key>NSCameraUsageDescription</key>
<string>カメラでの撮影のため必要です。</string>
프로그램 주체의 설치
ViewController.swiftimport UIKit
import AVFoundation
import Vision
class ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {
let recognitionLabel: UILabel = {
let recognitionLabel = UILabel()
recognitionLabel.textColor = .white
recognitionLabel.translatesAutoresizingMaskIntoConstraints = false
recognitionLabel.text = ""
recognitionLabel.font = recognitionLabel.font.withSize(24)
return recognitionLabel
}()
override func viewDidLoad() {
super.viewDidLoad()
setupCaptureSession()
view.addSubview(recognitionLabel)
recognitionLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
recognitionLabel.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -50).isActive = true
}
func setupCaptureSession() {
let captureSession = AVCaptureSession()
let availableDevices = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices
do {
if let captureDevice = availableDevices.first {
captureSession.addInput(try AVCaptureDeviceInput(device: captureDevice))
}
} catch {
print(error.localizedDescription)
}
let captureOutput = AVCaptureVideoDataOutput()
captureSession.addOutput(captureOutput)
captureOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer.frame = view.frame
view.layer.addSublayer(previewLayer)
captureSession.startRunning()
}
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
// 機械学習モデルの取得
guard let model = try? VNCoreMLModel(for: ImageClassifier().model) else { return }
guard let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
// 機械学習モデルを利用して画像認識
let request = VNCoreMLRequest(model: model) { (finishedRequest, error) in
guard let results = finishedRequest.results as? [VNClassificationObservation] else { return }
guard let Observation = results.first else { return }
DispatchQueue.main.async(execute: {
self.recognitionLabel.text = "\(Observation.identifier)"
})
}
try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:]).perform([request])
}
}
실행 이미지
아래의 인상처럼 산타클로스가 인식되었다.
(응용 프로그램에서 화면을 포착할 수 없기 때문에 실행 인상으로 기재됨)
주제 밖의 말을 하다.이번에 제작된 모형은 산타클로스, 하동, 좀비 3가지 종류가 있기 때문에 그 중 하나처럼 이미지 인식을 해야 한다.모형을 만들 때 녹색 이미지가 많아서인지 오이는 하동으로 여겨진다.
참고 자료
Classifying Images with Vision/Apple
Create ML
How to build an image recognition iOS app with Apple's CoreML and Vision APIs
다음 Advent Calendar 2018
내일@mnaka1115 선생의 "Gephi로 보도된 회유 상황을 가시화"에 관한 이야기입니다.
기대해주세요.
크리스마스까지 이어지는 GMO 광고 컨설턴트 달력 2018
앞으로도 투고에 꼭 관심을 가져주세요!
■ 엔지니어의 Techblog 공개 중!
https://techblog.gmo-ap.jp/
■ Wantedly 페이지~ 블로그와 채용 공개중!~
https://www.wantedly.com/projects/199431
■ 엔지니어 모집 페이지~ 복지와 각종 제도에 대한 소개가 여기 있습니다~
https://www.gmo-ap.jp/engineer/
■ 엔지니어 모집 실습 중!~ 유상형 실습으로 개발 현장을 체험해보자~
https://hrmos.co/pages/gmo-ap/jobs/0000027
Reference
이 문제에 관하여(아이폰에서 기계 학습 모형으로 이미지 식별), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tfactory/items/f03c77a29ddfae805b87
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이미지 데이터 수집
구글 등 검색엔진을 이용해 산타클로스, 하동, 좀비의 사진을 각각 수집한다.
수집된 이미지는 이번에 사용된 Apple의 이미지 인식 메커니즘에 따라 분류되어 저장됩니다.
이미지의 약 80%는 교육 데이터 세트로 교육 데이터 세트 폴더 아래에 저장되고 나머지 이미지는 테스트 데이터 세트로 테스트 아래 폴더에 저장됩니다.
이번에는 산타클로스, 하동, 좀비의 종류별로 20장의 이미지를 준비해 훈련용 폴더에 16장, 테스트용 이미지 목록에 4장의 이미지를 저장했다.
다음은 설정 예입니다.
교육 데이터 세트
테스트 데이터 세트
기계 학습 모형 만들기
Xcode에서 Playground를 선택한 다음 macOS 템플릿을 선택합니다.
편집기에 다음을 입력합니다.
Recognition.swift
import CreateMLUI
let builder = MLImageClassifierBuilder()
builder.showInLiveView()
코드를 입력하고 Playgound의 실행 아이콘을 선택합니다.Assistant Editor 디스플레이 버튼을 선택하면 오른쪽에 이미지용 머신러닝용 GUI가 표시됩니다.
그럼 제가 기계 학습용 모형을 만들게요.트레이닝 이미지가 포함된 폴더를 Drop Images to Begin Traning 섹션으로 드래그합니다.그리고 기계 학습 모형을 만들기 위한 교육을 시작한다.
다음은 기계 학습 모형의 테스트를 진행한다.테스트 이미지가 포함된 폴더를 Drop Images to Begin Testing으로 드래그합니다.방금 만든 기계 학습 모델을 테스트하여 식별 정밀도를 표시합니다.
생성된 머신 러닝 모델의 이름을 지정하고 파일을 저장합니다.
이 설정의 예는 ImageClassifier입니다.파일은 mlmodel 이름으로 저장됩니다.
기계 학습 모형 내장
XCode에서 Project를 선택하고 iOS의 템플릿을 선택하여 iPhone용 응용 프로그램을 만듭니다.
머신 러닝 모델 추가
드래그하여 추가합니다.
Info.평면 편집
카메라를 사용할 설정을 추가합니다.
Info.plist <key>NSCameraUsageDescription</key>
<string>カメラでの撮影のため必要です。</string>
프로그램 주체의 설치
ViewController.swiftimport UIKit
import AVFoundation
import Vision
class ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {
let recognitionLabel: UILabel = {
let recognitionLabel = UILabel()
recognitionLabel.textColor = .white
recognitionLabel.translatesAutoresizingMaskIntoConstraints = false
recognitionLabel.text = ""
recognitionLabel.font = recognitionLabel.font.withSize(24)
return recognitionLabel
}()
override func viewDidLoad() {
super.viewDidLoad()
setupCaptureSession()
view.addSubview(recognitionLabel)
recognitionLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
recognitionLabel.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -50).isActive = true
}
func setupCaptureSession() {
let captureSession = AVCaptureSession()
let availableDevices = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices
do {
if let captureDevice = availableDevices.first {
captureSession.addInput(try AVCaptureDeviceInput(device: captureDevice))
}
} catch {
print(error.localizedDescription)
}
let captureOutput = AVCaptureVideoDataOutput()
captureSession.addOutput(captureOutput)
captureOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer.frame = view.frame
view.layer.addSublayer(previewLayer)
captureSession.startRunning()
}
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
// 機械学習モデルの取得
guard let model = try? VNCoreMLModel(for: ImageClassifier().model) else { return }
guard let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
// 機械学習モデルを利用して画像認識
let request = VNCoreMLRequest(model: model) { (finishedRequest, error) in
guard let results = finishedRequest.results as? [VNClassificationObservation] else { return }
guard let Observation = results.first else { return }
DispatchQueue.main.async(execute: {
self.recognitionLabel.text = "\(Observation.identifier)"
})
}
try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:]).perform([request])
}
}
실행 이미지
아래의 인상처럼 산타클로스가 인식되었다.
(응용 프로그램에서 화면을 포착할 수 없기 때문에 실행 인상으로 기재됨)
주제 밖의 말을 하다.이번에 제작된 모형은 산타클로스, 하동, 좀비 3가지 종류가 있기 때문에 그 중 하나처럼 이미지 인식을 해야 한다.모형을 만들 때 녹색 이미지가 많아서인지 오이는 하동으로 여겨진다.
참고 자료
Classifying Images with Vision/Apple
Create ML
How to build an image recognition iOS app with Apple's CoreML and Vision APIs
다음 Advent Calendar 2018
내일@mnaka1115 선생의 "Gephi로 보도된 회유 상황을 가시화"에 관한 이야기입니다.
기대해주세요.
크리스마스까지 이어지는 GMO 광고 컨설턴트 달력 2018
앞으로도 투고에 꼭 관심을 가져주세요!
■ 엔지니어의 Techblog 공개 중!
https://techblog.gmo-ap.jp/
■ Wantedly 페이지~ 블로그와 채용 공개중!~
https://www.wantedly.com/projects/199431
■ 엔지니어 모집 페이지~ 복지와 각종 제도에 대한 소개가 여기 있습니다~
https://www.gmo-ap.jp/engineer/
■ 엔지니어 모집 실습 중!~ 유상형 실습으로 개발 현장을 체험해보자~
https://hrmos.co/pages/gmo-ap/jobs/0000027
Reference
이 문제에 관하여(아이폰에서 기계 학습 모형으로 이미지 식별), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tfactory/items/f03c77a29ddfae805b87
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<key>NSCameraUsageDescription</key>
<string>カメラでの撮影のため必要です。</string>
import UIKit
import AVFoundation
import Vision
class ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {
let recognitionLabel: UILabel = {
let recognitionLabel = UILabel()
recognitionLabel.textColor = .white
recognitionLabel.translatesAutoresizingMaskIntoConstraints = false
recognitionLabel.text = ""
recognitionLabel.font = recognitionLabel.font.withSize(24)
return recognitionLabel
}()
override func viewDidLoad() {
super.viewDidLoad()
setupCaptureSession()
view.addSubview(recognitionLabel)
recognitionLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
recognitionLabel.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -50).isActive = true
}
func setupCaptureSession() {
let captureSession = AVCaptureSession()
let availableDevices = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices
do {
if let captureDevice = availableDevices.first {
captureSession.addInput(try AVCaptureDeviceInput(device: captureDevice))
}
} catch {
print(error.localizedDescription)
}
let captureOutput = AVCaptureVideoDataOutput()
captureSession.addOutput(captureOutput)
captureOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer.frame = view.frame
view.layer.addSublayer(previewLayer)
captureSession.startRunning()
}
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
// 機械学習モデルの取得
guard let model = try? VNCoreMLModel(for: ImageClassifier().model) else { return }
guard let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
// 機械学習モデルを利用して画像認識
let request = VNCoreMLRequest(model: model) { (finishedRequest, error) in
guard let results = finishedRequest.results as? [VNClassificationObservation] else { return }
guard let Observation = results.first else { return }
DispatchQueue.main.async(execute: {
self.recognitionLabel.text = "\(Observation.identifier)"
})
}
try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:]).perform([request])
}
}
아래의 인상처럼 산타클로스가 인식되었다.
(응용 프로그램에서 화면을 포착할 수 없기 때문에 실행 인상으로 기재됨)
주제 밖의 말을 하다.이번에 제작된 모형은 산타클로스, 하동, 좀비 3가지 종류가 있기 때문에 그 중 하나처럼 이미지 인식을 해야 한다.모형을 만들 때 녹색 이미지가 많아서인지 오이는 하동으로 여겨진다.
참고 자료
Classifying Images with Vision/Apple
Create ML
How to build an image recognition iOS app with Apple's CoreML and Vision APIs
다음 Advent Calendar 2018
내일@mnaka1115 선생의 "Gephi로 보도된 회유 상황을 가시화"에 관한 이야기입니다.
기대해주세요.
크리스마스까지 이어지는 GMO 광고 컨설턴트 달력 2018
앞으로도 투고에 꼭 관심을 가져주세요!
■ 엔지니어의 Techblog 공개 중!
https://techblog.gmo-ap.jp/
■ Wantedly 페이지~ 블로그와 채용 공개중!~
https://www.wantedly.com/projects/199431
■ 엔지니어 모집 페이지~ 복지와 각종 제도에 대한 소개가 여기 있습니다~
https://www.gmo-ap.jp/engineer/
■ 엔지니어 모집 실습 중!~ 유상형 실습으로 개발 현장을 체험해보자~
https://hrmos.co/pages/gmo-ap/jobs/0000027
Reference
이 문제에 관하여(아이폰에서 기계 학습 모형으로 이미지 식별), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tfactory/items/f03c77a29ddfae805b87
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
내일@mnaka1115 선생의 "Gephi로 보도된 회유 상황을 가시화"에 관한 이야기입니다.
기대해주세요.
크리스마스까지 이어지는 GMO 광고 컨설턴트 달력 2018
앞으로도 투고에 꼭 관심을 가져주세요!
■ 엔지니어의 Techblog 공개 중!
https://techblog.gmo-ap.jp/
■ Wantedly 페이지~ 블로그와 채용 공개중!~
https://www.wantedly.com/projects/199431
■ 엔지니어 모집 페이지~ 복지와 각종 제도에 대한 소개가 여기 있습니다~
https://www.gmo-ap.jp/engineer/
■ 엔지니어 모집 실습 중!~ 유상형 실습으로 개발 현장을 체험해보자~
https://hrmos.co/pages/gmo-ap/jobs/0000027
Reference
이 문제에 관하여(아이폰에서 기계 학습 모형으로 이미지 식별), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tfactory/items/f03c77a29ddfae805b87텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)