質問するログイン新規登録

Q&A

0回答

344閲覧

Swift カメラ映像の処理時間をフレーム数でカウントしたい

sottos

総合スコア0

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2022/07/21 07:26

編集2022/07/24 07:46

0

0

前提

Swiftでカメラからの映像を Visionほかで処理させています。実際は、1フレームで完了しませんので飛び飛びの画像処理です。処理中を示すフラグを用意して適当に間引きしています。

Date() 関数の差で処理時間を計測してみると、手元の iPhoneの遅い機種では1.2秒、速いのは0.4秒程度でした。フレームレイトを30/秒として、間引きされたフレーム数は 36 or 13 程度のはずです。

処理は正しいようですが、実際に間引きされたフレーム数を計数したいのですが上手くゆかなくて質問しました。

実現したいこと

1。操作時、見かけ上の機種のスピード感の差を少なくしたい。
2。そこで、実行中に間引きしたフレーム数をカウントする。
2。カウント数に反比例した分を意図的に間引く処理を追加する。

発生している問題

計測カウンタの値が常にゼロ (counter=0)になる

該当のソースコード

使用言語:Swift

//クラス変数
var runing = false //実行中フラグ
var counter = 0 //間引きをカウントする

//フレーム毎に呼ばれるデリゲートメソッド
func captureOutput(_ output: AVCaptureOutput,
didOutput sampleBuffer: CMSampleBuffer,
from connection: AVCaptureConnection) {

**//実行中は計数のみ** guard !self.runing else { //間引き数の計数 self.counter += 1 return; } **//実行開始** self.runing = true //実行中フラグ //CMSampleBuffer映像をUIImage画像に変換 let img: UIImage = imageFromSampleBuffer(sampleBuffer: sampleBuffer) // -- UIImageを使用した処理の開始 -- ..... ..... //Vision 顔の検出 func faceDetct(_ image: UIImage) { let request = VNDetectFaceRectanglesRequest { (request, Error) in for observation in request.results as! [VNFaceObservation] { ..... ..... //顔をクロップして、モデルによるAI処理、表示など self.predict( ... ... ... ) //メソッドの呼び出し } **//実行終了** self.runing = false //実行中フラグ **//間引きしたフレーム数の確認** print("flame number: \(self.counter)") // **常にゼロとなる!** **_//追加:この行が抜けていました_** **_self.counter = 0 //カウンターをリセット_** } //クロージャのリクエスト実行 //Visionが処理できるデータ型に画像を変換 if let cgImage = image.cgImage { //画像データを設定してリクエストヘッダを生成 let handler = VNImageRequestHandler(cgImage: cgImage, options:[:]) //顔検出を実行 try? handler.perform([request]) } ..... ..... }

}

試したこと

Date(start) 〜 Date().timeIntervalSince(start) による
1。フレームのサイクルの計測
2。処理時間の計測

補足情報(FW/ツールのバージョンなど)

バージョンなど
macOS 12.3.1
Xcode 13.3.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問