GitBucket
Pull requests
Issues
Snippets
Sign in
ml2022
/
ContentView.swift
Fork
0
Created at Wed Dec 14 19:03:31 JST 2022
Download ZIP
HTTP
Embed
Embed this snippet in your website.
HTTP
Clone with Git using the repository's web address.
Code
Revision
Forks
s17h006
revised this
on 14 Dec 2022
aa3b8ba
ContentView.swift
// // ContentView.swift // VideoCapture // // https://zenn.dev/yorifuji/articles/swiftui-avfoundation // import SwiftUI import AVFoundation import CoreMotion struct ContentView: View { let videoCapture = VideoCapture() let motionManager = CMMotionManager() @State var x = 0.0 @State var y = 0.0 @State var z = 0.0 @State var px = 5.0 @State var py = 5.0 @State var pz = 5.0 @State var image: UIImage? = nil @ObservedObject var classifier: ImageClassifier = ImageClassifier() //他の所から使いまわせる変数の定義 //画面の表示の定義 var body: some View { VStack { if let image = image { Image(uiImage: image) .resizable() .scaledToFit() } /* 認識ができたら選択肢が出るボタン、やり直しの2つを認識ができた時の処理として埋め込んでおく必要性がある 常時出るrunとstopは変更しなければいけないなので if( if image != nil){ HStack { Button("Retry") { videoCapture.run { sampleBuffer in if let convertImage = UIImageFromSampleBuffer(sampleBuffer) { DispatchQueue.main.async { self.image = convertImage } } } } //stopボタンを押して読み込んでいた処理をフレーム font(.largeTitle) if let imageClass = classifier.imageClass{ Text(imageClass).font(.largeTitle) //実験器具表示 } } */ //ボタンの配置の定義 HStack { Button("run") { start() videoCapture.run { sampleBuffer in if let convertImage = UIImageFromSampleBuffer(sampleBuffer) { DispatchQueue.main.async { self.image = convertImage } // ----- ここを制限 if image != nil{ classifier.detect(uiImage: image!)//ストップボタンを押した時Image } // ------ } } } //stopボタンを押して読み込んでいた処理をフレーム Button("stop") { videoCapture.stop() // if image != nil{ // classifier.detect(uiImage: image!)//ストップボタンを押した時Image // } } } .font(.largeTitle) if let imageClass = classifier.imageClass{ Text(imageClass).font(.largeTitle) //実験器具表示 } Text("accX: \(x)") Text("accY: \(y)") Text("accZ: \(z)") } } func UIImageFromSampleBuffer(_ sampleBuffer: CMSampleBuffer) -> UIImage? { if let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) { let ciImage = CIImage(cvPixelBuffer: pixelBuffer) let imageRect = CGRect(x: 0, y: 0, width: CVPixelBufferGetWidth(pixelBuffer), height: CVPixelBufferGetHeight(pixelBuffer)) let context = CIContext() if let image = context.createCGImage(ciImage, from: imageRect) { return UIImage(cgImage: image) } } return nil } func start() { if motionManager.isDeviceMotionAvailable { motionManager.deviceMotionUpdateInterval = 1.0 motionManager.startDeviceMotionUpdates(to: OperationQueue.current!, withHandler: {(motion:CMDeviceMotion?, error:Error?) in self.updateMotionData(deviceMotion: motion!) }) } } func updateMotionData(deviceMotion: CMDeviceMotion) { // x = deviceMotion.userAcceleration.x // y = deviceMotion.userAcceleration.y // z = deviceMotion.userAcceleration.z px = x py = y pz = z x = deviceMotion.attitude.pitch y = deviceMotion.attitude.roll z = deviceMotion.attitude.yaw // print("x= \(x)") // print("y= \(y)") // print("z= \(z)") } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
/ // ContentView.swift // VideoCapture // // https://zenn.dev/yorifuji/articles/swiftui-avfoundation // import SwiftUI import AVFoundation import CoreMotion struct ContentView: View { let videoCapture = VideoCapture() let motionManager = CMMotionManager() @State var x = 0.0 @State var y = 0.0 @State var z = 0.0 @State var px = 5.0 @State var py = 5.0 @State var pz = 5.0 @State var image: UIImage? = nil @ObservedObject var classifier: ImageClassifier = ImageClassifier() //他の所から使いまわせる変数の定義 //画面の表示の定義 var body: some View { VStack { if let image = image { Image(uiImage: image) .resizable() .scaledToFit() } /* 認識ができたら選択肢が出るボタン、やり直しの2つを認識ができた時の処理として埋め込んでおく必要性がある 常時出るrunとstopは変更しなければいけないなので if( if image != nil){ HStack { Button("Retry") { videoCapture.run { sampleBuffer in if let convertImage = UIImageFromSampleBuffer(sampleBuffer) { DispatchQueue.main.async { self.image = convertImage } } } } //stopボタンを押して読み込んでいた処理をフレーム font(.largeTitle) if let imageClass = classifier.imageClass{ Text(imageClass).font(.largeTitle) //実験器具表示 } } */ //ボタンの配置の定義 HStack { Button("run") { start() videoCapture.run { sampleBuffer in if let convertImage = UIImageFromSampleBuffer(sampleBuffer) { DispatchQueue.main.async { self.image = convertImage } // ----- ここを制限 if image != nil{ classifier.detect(uiImage: image!)//ストップボタンを押した時Image } // ------ } } } //stopボタンを押して読み込んでいた処理をフレーム Button("stop") { videoCapture.stop() // if image != nil{ // classifier.detect(uiImage: image!)//ストップボタンを押した時Image // } } } .font(.largeTitle) if let imageClass = classifier.imageClass{ Text(imageClass).font(.largeTitle) //実験器具表示 } Text("accX: \(x)") Text("accY: \(y)") Text("accZ: \(z)") } } func UIImageFromSampleBuffer(_ sampleBuffer: CMSampleBuffer) -> UIImage? { if let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) { let ciImage = CIImage(cvPixelBuffer: pixelBuffer) let imageRect = CGRect(x: 0, y: 0, width: CVPixelBufferGetWidth(pixelBuffer), height: CVPixelBufferGetHeight(pixelBuffer)) let context = CIContext() if let image = context.createCGImage(ciImage, from: imageRect) { return UIImage(cgImage: image) } } return nil } func start() { if motionManager.isDeviceMotionAvailable { motionManager.deviceMotionUpdateInterval = 1.0 motionManager.startDeviceMotionUpdates(to: OperationQueue.current!, withHandler: {(motion:CMDeviceMotion?, error:Error?) in self.updateMotionData(deviceMotion: motion!) }) } } func updateMotionData(deviceMotion: CMDeviceMotion) { // x = deviceMotion.userAcceleration.x // y = deviceMotion.userAcceleration.y // z = deviceMotion.userAcceleration.z px = x py = y pz = z x = deviceMotion.attitude.pitch y = deviceMotion.attitude.roll z = deviceMotion.attitude.yaw // print("x= \(x)") // print("y= \(y)") // print("z= \(z)") } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
s17h006
revised this
on 14 Dec 2022
6e1fc7d
ContentView.swift
/ // ContentView.swift // VideoCapture // // https://zenn.dev/yorifuji/articles/swiftui-avfoundation // import SwiftUI import AVFoundation import CoreMotion struct ContentView: View { let videoCapture = VideoCapture() let motionManager = CMMotionManager() @State var x = 0.0 @State var y = 0.0 @State var z = 0.0 @State var px = 5.0 @State var py = 5.0 @State var pz = 5.0 @State var image: UIImage? = nil @ObservedObject var classifier: ImageClassifier = ImageClassifier() //他の所から使いまわせる変数の定義 //画面の表示の定義 var body: some View { VStack { if let image = image { Image(uiImage: image) .resizable() .scaledToFit() } /* 認識ができたら選択肢が出るボタン、やり直しの2つを認識ができた時の処理として埋め込んでおく必要性がある 常時出るrunとstopは変更しなければいけないなので if( if image != nil){ HStack { Button("Retry") { videoCapture.run { sampleBuffer in if let convertImage = UIImageFromSampleBuffer(sampleBuffer) { DispatchQueue.main.async { self.image = convertImage } } } } //stopボタンを押して読み込んでいた処理をフレーム font(.largeTitle) if let imageClass = classifier.imageClass{ Text(imageClass).font(.largeTitle) //実験器具表示 } } */ //ボタンの配置の定義 HStack { Button("run") { start() videoCapture.run { sampleBuffer in if let convertImage = UIImageFromSampleBuffer(sampleBuffer) { DispatchQueue.main.async { self.image = convertImage } // ----- ここを制限 if image != nil{ classifier.detect(uiImage: image!)//ストップボタンを押した時Image } // ------ } } } //stopボタンを押して読み込んでいた処理をフレーム Button("stop") { videoCapture.stop() // if image != nil{ // classifier.detect(uiImage: image!)//ストップボタンを押した時Image // } } } .font(.largeTitle) if let imageClass = classifier.imageClass{ Text(imageClass).font(.largeTitle) //実験器具表示 } Text("accX: \(x)") Text("accY: \(y)") Text("accZ: \(z)") } } func UIImageFromSampleBuffer(_ sampleBuffer: CMSampleBuffer) -> UIImage? { if let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) { let ciImage = CIImage(cvPixelBuffer: pixelBuffer) let imageRect = CGRect(x: 0, y: 0, width: CVPixelBufferGetWidth(pixelBuffer), height: CVPixelBufferGetHeight(pixelBuffer)) let context = CIContext() if let image = context.createCGImage(ciImage, from: imageRect) { return UIImage(cgImage: image) } } return nil } func start() { if motionManager.isDeviceMotionAvailable { motionManager.deviceMotionUpdateInterval = 1.0 motionManager.startDeviceMotionUpdates(to: OperationQueue.current!, withHandler: {(motion:CMDeviceMotion?, error:Error?) in self.updateMotionData(deviceMotion: motion!) }) } } func updateMotionData(deviceMotion: CMDeviceMotion) { // x = deviceMotion.userAcceleration.x // y = deviceMotion.userAcceleration.y // z = deviceMotion.userAcceleration.z px = x py = y pz = z x = deviceMotion.attitude.pitch y = deviceMotion.attitude.roll z = deviceMotion.attitude.yaw // print("x= \(x)") // print("y= \(y)") // print("z= \(z)") } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }