質問編集履歴

2

質問を詳細に具体的にしました。

2019/10/21 02:16

投稿

SKMT
SKMT

スコア57

test CHANGED
File without changes
test CHANGED
@@ -4,9 +4,13 @@
4
4
 
5
5
  AVFoundationを使って写真を撮影するアプリを作ったのですが
6
6
 
7
+ 撮影した写真をその後加工するために一度データ型に保存して
8
+
7
- 撮った写真を一度画面に表示させたいのですがやり方がわかりません。
9
+ 加工後の写真を画面に表示させたいのですが、データ型に保存するやり方
8
-
10
+
9
- どうればいいでしょう
11
+ 保存したとしてそれを画面に表示るがわりません。
12
+
13
+
10
14
 
11
15
 
12
16
 
@@ -190,7 +194,7 @@
190
194
 
191
195
  ### 試したこと
192
196
 
193
- swift4アプリ開発入門ノートという参考書を読みながら作りました。
197
+ swift4アプリ開発入門ノートという参考書を読みながら写真を撮影して写真アプリに保存するアプリを作りました。
194
198
 
195
199
 
196
200
 

1

質問を少し変えました

2019/10/21 02:16

投稿

SKMT
SKMT

スコア57

test CHANGED
@@ -1 +1 @@
1
- [swift4]Vision.Frameworkを用いた矩形検出
1
+ [swift4]AVFoundationを用いた画像表示
test CHANGED
@@ -1,34 +1,12 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- swiftで矩形検出する名刺読み取りアプリのような物を作りたいです。
3
+
4
-
5
-
6
-
7
-
8
-
4
+
9
- そのためにVIsionというフレームワークを使おうと思ったのですが
5
+ AVFoundationを使って写真を撮影するアプリを作ったのですが
10
-
11
- 調べているのですが、日本語の情報が少なくて困っています。
6
+
12
-
13
-
14
-
15
- open class VNDetectRectanglesRequest : VNImageBasedRequest
16
-
17
- open class VNRectangleObservation : VNDetectedObjectObservation
18
-
19
-
20
-
21
- をどこに記述していいかわかりません。
22
-
23
- 一番下に書いたところエラーが発生している状態です。
24
-
25
-
26
-
27
- また、VNDetectRectanglesRequest内のパラメータに初期値を入れるように
28
-
29
- エラーメッセージが出るのですが初期値をいくつにしていい分かりません。
7
+ 撮った写真を一度画面に表示させたいのですがやり方がわかりません。
8
+
30
-
9
+ どうすればいいでしょうか
31
-
32
10
 
33
11
 
34
12
 
@@ -38,85 +16,173 @@
38
16
 
39
17
  ```swift
40
18
 
41
- import UIKit
42
-
43
- import AVFoundation
44
-
45
- import Vision
46
-
47
-
48
-
49
19
  class ViewController: UIViewController {
50
20
 
21
+ // プレビュー用のビューとOutlet接続しておく
22
+
23
+ @IBOutlet weak var previewView: UIView!
24
+
25
+ // インスタンスの作成
26
+
27
+ var session = AVCaptureSession()
28
+
29
+ var photoOutputObj = AVCapturePhotoOutput()
30
+
31
+ // 通知センターを作る
32
+
33
+ let notification = NotificationCenter.default
34
+
35
+
36
+
37
+ var shareImage:UIImage?
38
+
39
+
40
+
41
+ override func viewDidLoad() {
42
+
43
+ super.viewDidLoad()
44
+
45
+ // セッション実行中ならば中断する
46
+
47
+ if session.isRunning {
48
+
49
+ return
50
+
51
+ }
52
+
53
+ // 入出力の設定
54
+
55
+ setupInputOutput()
56
+
57
+ // プレビューレイヤの設定
58
+
59
+ setPreviewLayer()
60
+
61
+ // セッション開始
62
+
63
+ session.startRunning()
64
+
65
+ // デバイスが回転したときに通知するイベントハンドラを設定する
66
+
67
+ notification.addObserver(self,
68
+
69
+ selector: #selector(self.changedDeviceOrientation(_:)),
70
+
71
+ name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
72
+
73
+ }
74
+
75
+
76
+
77
+ // シャッターボタンで実行する
78
+
79
+ @IBAction func takePhoto(_ sender: Any) {
80
+
81
+ let captureSetting = AVCapturePhotoSettings()
82
+
83
+ captureSetting.flashMode = .auto
84
+
85
+ captureSetting.isAutoStillImageStabilizationEnabled = true
86
+
87
+ captureSetting.isHighResolutionPhotoEnabled = false
88
+
89
+ // キャプチャのイメージ処理はデリゲートに任せる
90
+
91
+ photoOutputObj.capturePhoto(with: captureSetting, delegate: self)
92
+
93
+ }
94
+
95
+
96
+
97
+ // 入出力の設定
98
+
99
+ func setupInputOutput(){
100
+
101
+ //解像度の指定
102
+
103
+ session.sessionPreset = AVCaptureSession.Preset.photo
104
+
51
105
 
52
106
 
107
+ // 入力の設定
108
+
109
+ do {
110
+
111
+ //デバイスの取得
112
+
113
+ let device = AVCaptureDevice.default(
114
+
115
+ AVCaptureDevice.DeviceType.builtInWideAngleCamera,
116
+
117
+ for: AVMediaType.video, // ビデオ入力
118
+
119
+ position: AVCaptureDevice.Position.back) // バックカメラ
120
+
121
+
122
+
123
+ // 入力元
124
+
125
+ let input = try AVCaptureDeviceInput(device: device!)
126
+
53
- override func viewDidLoad() {
127
+ if session.canAddInput(input){
54
-
128
+
55
- super.viewDidLoad()
129
+ session.addInput(input)
130
+
56
-
131
+ } else {
132
+
133
+ print("セッションに入力を追加できなかった")
134
+
135
+ return
136
+
137
+ }
138
+
57
- // Do any additional setup after loading the view, typically from a nib.
139
+ } catch let error as NSError {
140
+
141
+ print("カメラがない (error)")
142
+
143
+ return
144
+
145
+ }
58
146
 
59
147
 
60
148
 
149
+ // 出力の設定
150
+
151
+ if session.canAddOutput(photoOutputObj) {
152
+
153
+ session.addOutput(photoOutputObj)
154
+
155
+ } else {
156
+
157
+ print("セッションに出力を追加できなかった")
158
+
159
+ return
160
+
61
- }
161
+ }
62
-
63
-
64
-
65
- override func didReceiveMemoryWarning() {
162
+
66
-
67
- super.didReceiveMemoryWarning()
68
-
69
- // Dispose of any resources that can be recreated.
70
-
71
- }
163
+ }
164
+
165
+
166
+
72
-
167
+ // プレビューレイヤの設定
168
+
73
-
169
+ func setPreviewLayer(){
170
+
74
-
171
+ // プレビューレイヤを作る
172
+
173
+ let previewLayer = AVCaptureVideoPreviewLayer(session: session)
174
+
175
+ previewLayer.frame = view.bounds
176
+
177
+ previewLayer.masksToBounds = true
178
+
179
+ previewLayer.videoGravity = AVLayerVideoGravity.resizeAspect
180
+
181
+ // previewViewに追加する
182
+
183
+ previewView.layer.addSublayer(previewLayer)
184
+
75
- }
185
+ }
76
-
77
-
78
-
79
- open class VNDetectRectanglesRequest : VNImageBasedRequest {
80
-
81
-
82
-
83
- open var minimumAspectRatio: VNAspectRatio = 1.0
84
-
85
- open var maximumAspectRatio: VNAspectRatio = 0.2
86
-
87
- open var quadratureTolerance: VNDegrees = 0.0
88
-
89
- open var minimumSize: Float = 0.0
90
-
91
- open var minimumConfidence: VNConfidence = 0.5
92
-
93
- open var maximumObservations: Int = 0
94
-
95
-
96
-
97
- }
98
-
99
-
100
-
101
- open class VNRectangleObservation : VNDetectedObjectObservation {
102
-
103
-
104
-
105
- open var topLeft: CGPoint?
106
-
107
-
108
-
109
- open var topRight: CGPoint? {}
110
-
111
-
112
-
113
- open var bottomLeft: CGPoint? {}
114
-
115
-
116
-
117
- open var bottomRight: CGPoint? {}
118
-
119
- }
120
186
 
121
187
  ```
122
188
 
@@ -124,13 +190,9 @@
124
190
 
125
191
  ### 試したこと
126
192
 
127
- https://note.mu/shu223/n/n6075e9cbefdd#vVE9f
128
-
129
- https://qiita.com/sy-hash/items/a21a825acbc69b78983a
130
-
131
-
132
-
133
- このサイ参考にしました。
193
+ swift4アプリ開発入門ノーという参考書を読みながら作りました。
194
+
195
+
134
196
 
135
197
 
136
198