diff options
Diffstat (limited to 'apps/CameraITS/tests/sensor_fusion/test_preview_stabilization.py')
-rw-r--r-- | apps/CameraITS/tests/sensor_fusion/test_preview_stabilization.py | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/apps/CameraITS/tests/sensor_fusion/test_preview_stabilization.py b/apps/CameraITS/tests/sensor_fusion/test_preview_stabilization.py index 64b22d908ce..c6b852c5378 100644 --- a/apps/CameraITS/tests/sensor_fusion/test_preview_stabilization.py +++ b/apps/CameraITS/tests/sensor_fusion/test_preview_stabilization.py @@ -20,9 +20,9 @@ import time from mobly import test_runner +import its_base_test import camera_properties_utils import image_processing_utils -import its_base_test import its_session_utils import sensor_fusion_utils import video_processing_utils @@ -33,11 +33,11 @@ _ARDUINO_SERVO_SPEED = 10 _IMG_FORMAT = 'png' _MIN_PHONE_MOVEMENT_ANGLE = 5 # degrees _NAME = os.path.splitext(os.path.basename(__file__))[0] -_NUM_ROTATIONS = 25 +_NUM_ROTATIONS = 12 _START_FRAME = 30 # give 3A some frames to warm up _VIDEO_DELAY_TIME = 5.5 # seconds _VIDEO_DURATION = 5.5 # seconds -_VIDEO_STABILIZATION_FACTOR = 0.6 # 60% of gyro movement allowed +_VIDEO_STABILIZATION_FACTOR = 0.7 # 70% of gyro movement allowed _PREVIEW_STABILIZATION_MODE_PREVIEW = 2 @@ -86,7 +86,7 @@ def _collect_data(cam, video_size, rot_rig): return recording_obj -class PreviewStabilityTest(its_base_test.ItsBaseTest): +class PreviewStabilizationTest(its_base_test.ItsBaseTest): """Tests if preview is stabilized. Camera is moved in sensor fusion rig on an arc of 15 degrees. @@ -115,7 +115,7 @@ class PreviewStabilityTest(its_base_test.ItsBaseTest): camera_properties_utils.skip_unless( first_api_level >= its_session_utils.ANDROID13_API_LEVEL, 'First API level should be {} or higher. Found {}.'.format( - its_session_utils.ANDROID13_API_LEVEL, first_api_level)) + its_session_utils.ANDROID13_API_LEVEL, first_api_level)) supported_stabilization_modes = props[ 'android.control.availableVideoStabilizationModes' @@ -124,7 +124,7 @@ class PreviewStabilityTest(its_base_test.ItsBaseTest): camera_properties_utils.skip_unless( supported_stabilization_modes is not None and _PREVIEW_STABILIZATION_MODE_PREVIEW - in supported_stabilization_modes, + in supported_stabilization_modes, 'Preview Stabilization not supported', ) @@ -137,9 +137,12 @@ class PreviewStabilityTest(its_base_test.ItsBaseTest): # Initialize rotation rig rot_rig['cntl'] = self.rotator_cntl rot_rig['ch'] = self.rotator_ch + if rot_rig['cntl'].lower() != 'arduino': + raise AssertionError(f'You must use the arduino controller for {_NAME}.') # List of video resolutions to test supported_preview_sizes = cam.get_supported_preview_sizes(self.camera_id) + supported_preview_sizes.remove(video_processing_utils.QCIF_SIZE) logging.debug('Supported preview resolutions: %s', supported_preview_sizes) @@ -201,10 +204,9 @@ class PreviewStabilityTest(its_base_test.ItsBaseTest): sensor_fusion_utils.calc_max_rotation_angle(gyro_rots, 'Gyro') ) logging.debug( - 'Max deflection (degrees): gyro: %.2f, camera: %.2f', - max_gyro_angles[-1], - max_camera_angles[-1], - ) + 'Max deflection (degrees) %s: video: %.3f, gyro: %.3f ratio: %.4f', + video_size, max_camera_angles[-1], max_gyro_angles[-1], + max_camera_angles[-1] / max_gyro_angles[-1]) # Assert phone is moved enough during test if max_gyro_angles[-1] < _MIN_PHONE_MOVEMENT_ANGLE: @@ -218,9 +220,10 @@ class PreviewStabilityTest(its_base_test.ItsBaseTest): if max_camera_angle >= max_gyro_angles[i] * _VIDEO_STABILIZATION_FACTOR: test_failures.append( f'{supported_preview_sizes[i]} video not stabilized enough! ' - f'Max gyro angle: {max_gyro_angles[i]:.2f}, Max camera angle: ' - f'{max_camera_angle:.2f}, stabilization factor THRESH: ' - f'{_VIDEO_STABILIZATION_FACTOR}.') + f'Max video angle: {max_camera_angle:.3f}, ' + f'Max gyro angle: {max_gyro_angles[i]:.3f}, ' + f'ratio: {max_camera_angle/max_gyro_angles[i]:.4f} ' + f'THRESH: {_VIDEO_STABILIZATION_FACTOR}.') if test_failures: raise AssertionError(test_failures) |