FPS比較「OpenCV HardwareCamera API」対「OpenCV Camera2 API」(Android Studio)

2021.4.12 2020.8.30 Coskx Lab  

1 はじめに

OpenCV camera2でのカメラプレビューは遅いと言われています。2017,8年ころの記事です。
簡単に「OpenCV HardwareCamera API版カメラプレビュー」と「OpenCV Camera2 API版カメラプレビュー」が比較できることがわかったので,比較してみます。
「OpenCV HardwareCamera API版カメラプレビュー」 → クラスJavaCameraViewを利用
「OpenCV Camera2 API版カメラプレビュー」 →  クラスJavaCamera2Viewを利用
使用しているOpenCVはver4.5.2です。

2 「OpenCV HardwareCamera API版」と「OpenCV Camera2 API版」のプログラミング上の違い

「OpenCV HardwareCamera API版」と「OpenCV Camera2 API版」の違いは, 「OpenCV4.5.2のカメラプレビュー」で書きましたが,レイアウトxmlの1か所だけです。
OpenCVのクラスJavaCameraViewを使うとHardwareCamera API版になり,JavaCamera2Viewを使うとCamera2 API版になります。

activity_main.xmlのviewのところを,org.opencv.android.JavaCameraViewから
org.opencv.android.JavaCamera2View (JavaCamera2View.javaで定義されているクラス)
に変更すると,mOpenCvCameraViewはJavaCamera2Viewのインスタンスに切り替えることができます。

3 「OpenCV HardwareCamera API版」と「OpenCV Camera2 API版」の比較

比較作業に使用したのは「OpenCV4.5.2のカメラプレビュー」で作成したアプリから派生させたアプリです。
どちらも表示は横位置のまま(画像の回転はありません)として,FPSとイメージサイズと使用しているクラス名を表示するようにしてあります。
Nexus7(android6)では「HardwareCamera API版」の方がFPSはすこし上回っています。
Nexus7で「HardwareCamera API版」ではアスペクト比がおかしいようです。この頃のカメラは不安定かもしれません。
Nexus5X(android8)およびP10lite(android7)では「HardwareCamera API版」と「Camera2 API版」はほとんど変わらないFPSとなっています。

デバイス Nexus7
「HardwareCamera API版」18FPS @1280x726 「Camera2 API版」14FPS @1280x726
デバイス Nexus5x
「HardwareCamera API版」26.5FPS @1280x960 「Camera2 API版」24.5FPS @1280x960
デバイス p10lite
「HardwareCamera API版」25FPS @1280x960 「Camera2 API版」25FPS @1280x960

追記
Pixel4aを入手したので,これもテストしてデータだけ書き加えます。
android11デバイスでは,「Camera2 API版」は最適化されているようで高速化し,「HardwareCamera API版」は速度が鈍化していました。

Pixel4a
「HardwareCamera API版」 20FPS @1920x960
「Camera2 API版」    30FPS @1920x960

4 まとめ

「OpenCV HardwareCamera API版カメラプレビュー」と「OpenCV Camera2 API版カメラプレビュー」」とのFPSを比較してみました。
androidのバージョンが上がるにつれて,FPSはほとんど差がなくなっています。画面キャプチャの瞬間に,ピント合わせや露光合わせが生じているかどうかで数FPS変化するだけです。
2018年頃の記事ではCamera2はFPSが1桁で実用に耐えないとありました。またAndroid5,6では,Camera2はデバイスによっては動作しないことが多いとの記事も見られました。 その後,Camera2 APIを使用したJavaCamera2Viewは修正され,現在は使える状態になっていると思われます。 2018年頃の記事にあったOpenCV Camera2 API版はOpenCV HardwareCamera API版に比べて遅いという症状は,すでに克服されているようです。
HardwareCamera APIはすでに非推奨とされているため,今後ある時期に使えなくなるでしょう。
レイアウトxmlの1か所だけ書き換えれば,HardwareCamera API版がCamera2 API版に生まれ変わるので,使用するべきでしょう。
(カメラの焦点領域とかAE領域の設定などは書き換える必要があります。)
最近のハードウエアの進歩のため,この比較はもはや意味をなさなくなりました。「Camera2 API版」へ移行すべきでしょう。

追記 使用環境