Camera Image Test Suite (ITS) ist ein Framework zum Ausführen von Tests an Bildern, die von einer Android-Kamera erstellt wurden. Das allgemeine Ziel jedes Tests in ITS besteht darin, die Kamera auf eine bestimmte Weise zu konfigurieren, eine oder mehrere Aufnahmen zu machen und die Aufnahmen daraufhin zu untersuchen, ob sie die erwarteten Bilddaten enthalten. Bei vielen Tests muss die Kamera auf eine bestimmte Zielkarte gerichtet oder mit einer bestimmten Intensität beleuchtet werden.
ITS befindet sich im CTS Verifier-Testumgebung unter cts/apps/CameraITS
. Geräte müssen die ITS-Tests bestehen, die den unterstützten Funktionen entsprechen, die vom Kamera-Framework für Apps von Drittanbietern als Teilmenge von CTS angekündigt werden.
Aufstellen
Um ITS-Tests auszuführen, muss Folgendes eingerichtet werden:
- Ein zu testendes Gerät (DUT)
- Ein Host-Computer (z. B. ein Linux-Desktop oder -Laptop)
- Eine Szene, die die Kamera fotografiert
Setup des zu testenden Geräts (DUT).
Um ein DUT einzurichten, gehen Sie folgendermaßen vor:
- Verbinden Sie das DUT über USB mit einem Host-Computer.
- Erteilen Sie dem Host Berechtigungen für den Zugriff auf das DUT über ADB.
Installieren Sie die CTS Verifier-App (
CtsVerifier.apk
) auf dem Gerät. Weitere Informationen finden Sie unter Verwenden von CTS Verifier .extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
Host-Setup
ITS erfordert, dass der Host-Rechner über USB mit dem DUT verbunden ist, ADB für die Gerätesteuerung und -kommunikation verwenden kann und über die erforderliche Software verfügt.
Stellen Sie zum Einrichten Ihres Hostcomputers sicher, dass die folgende Software installiert ist.
Android SDK-Plattformtools
Die Android SDK Platform-Tools müssen installiert sein und ADB muss sich im ausführbaren Pfad der Shell oder des Terminals befinden, die auf dem Host-Computer ausgeführt wird. Die öffentlich veröffentlichte Version der Android SDK Platform Tools finden Sie in den Versionshinweisen zu SDK Platform Tools .
Python
Python muss auf dem Hostcomputer installiert sein. Wir empfehlen die Verwendung einer gebündelten Python-Distribution, um die Unterstützung kompatibler Versionen sicherzustellen. Einzelheiten dazu, welche Python- und Paketversionen für eine bestimmte Version installiert werden müssen, finden Sie in den Camera ITS-Versionshinweisen für die entsprechende Version.
Mobly
Für Android 12 und höher muss das Mobly-Testframework installiert sein. Mit Mobly können Sie ein DUT und ein Diagrammtablett in der Klasse its_base_test
einrichten. Führen Sie Folgendes aus, um das Mobly-Testframework zu installieren:
pip install mobly
Umgebungseinrichtung
Führen Sie zum Einrichten der Testumgebung Folgendes aus:
cd CameraITS
source build/envsetup.sh
Dieser Befehl überprüft die Python-Installation, richtet die Umgebungsvariable PYTHONPATH
ein und führt Komponententests für die Module utils/*.py
aus. Wenn keine Fehler auf dem Terminal ausgegeben werden, ist die Umgebung bereit, die ITS-Tests auszuführen.
Wenn zur Laufzeit die Fehlermeldung libtinfo.so.6: no version information available (required by /bin/sh)
, führen Sie den folgenden Befehl aus, um die Datei libtinfo.so.6
umzubenennen.
mv $ENV_DIRECTORY/lib/libtinfo.so.6 $ENV_DIRECTORY/lib/libtinfo.so.6.bak
Szenenaufbau
Zum Einrichten der Szenen empfehlen wir die Verwendung des Camera ITS-in-a-box- Setups, um die Automatisierung, Zuverlässigkeit und Effizienz beim Testen zu vereinfachen. Die ITS-in-a-box-Prüfstände unterstützen alle Beleuchtungs-, Zentrierungs- und Kartenwechselanforderungen für ITS. Außerdem ist ITS-in-a-box für das Testen von Kameraerweiterungen erforderlich.
Stellen Sie beim manuellen Testen Folgendes sicher:
- Der Prüfling steht auf einem Stativ
- Der Prüfling wird für jeden Test auf die richtige Szene gerichtet. (Das ITS-Testskript bietet Aufforderungen zum Ändern der Szeneneinrichtung, bevor Tests in einer neuen Szene gestartet werden.)
- Das DUT wird über USB mit dem Host-Computer verbunden.
- Der Prüfling bewegt sich während des Testlaufs nicht.
- Die Szene wird mit einer gleichmäßigen, nicht schwankenden Lichtquelle beleuchtet. (Verwenden Sie kein fluoreszierendes Licht, da dies zu Flimmern führt.)
Das ITS-Testskript zeigt eine Eingabeaufforderung an, in der der Benutzer aufgefordert wird, die Szeneneinrichtung zu ändern, bevor Tests in einer neuen Szene gestartet werden.
Die Ausrichtung des Telefons muss so eingestellt sein, dass die Kamera Bilder ohne Drehung aufnimmt. Dies lässt sich am einfachsten anhand der Gesichtsszenen in Szene 2 überprüfen. Bei den meisten Telefonen befindet sich das Telefon im Querformat, wobei das Telefon für die hintere Kamera gegen den Uhrzeigersinn und für die vordere Kamera im Uhrzeigersinn gedreht wird.
Konfigurationsdateien
Mithilfe des Mobly-Frameworks müssen Sie eine Konfigurationsdatei config.yml
erstellen, um das Mobly-Testbed zu definieren. Im Folgenden finden Sie Beispiele für verschiedene Anwendungsfälle.
Tablet-basierte Szenen config.yml-Datei
Im Folgenden finden Sie eine Beispieldatei config.yml
für Tablet-basierte Szenen. Für Tablet-basierte Tests muss das Schlüsselwort TABLET
im Testbed-Namen enthalten sein. Bei der Initialisierung initialisiert der Mobly-Testläufer die Parameter in der Datei und übergibt sie an die einzelnen Tests.
TestBeds:
- Name: TEST_BED_TABLET_SCENES
# Test configuration for scenes[0:4, 6, _change]
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
- serial: 5B16001229
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False" # "True" or "False"; quotes needed
lighting_cntl: <controller-type> # "arduino" or "None"; quotes needed
lighting_ch: <controller-channel>
camera: 0
foldable_device: "False". # set "True" if testing foldable
scene: <scene-name> # if <scene-name> runs all scenes
Um die Testumgebung aufzurufen, führen Sie tools/run_all_tests.py
aus. Wenn keine Befehlszeilenwerte zur Angabe von Kameras oder Szenen vorhanden sind, wird der Test mit den Werten der Datei config.yml
ausgeführt. Wenn Befehlszeilenwerte für Kameras oder Szenen vorhanden sind, überschreiben diese die Werte im Abschnitt TestParams
der Datei config.yml
. Zum Beispiel:
python tools/run_all_tests.py
python tools/run_all_tests.py camera=1
python tools/run_all_tests.py scenes=2,1,0
python tools/run_all_tests.py camera=1 scenes=2,1,0
sensor_fusion-Szenendatei config.yml
Im Folgenden finden Sie eine config_yml
Beispieldatei für sensor_fusion
Tests. Für sensor_fusion
Tests muss das Schlüsselwort SENSOR_FUSION
im Testbed-Namen enthalten sein. Android 13 und höher unterstützen aufgrund von Vorschau- und Videostabilisierungstests nur den Arduino-Controller für Sensorfusion. Android 12 unterstützt Arduino- und Canakit-Controller.
Testbeds
- Name: TEST_BED_SENSOR_FUSION
# Test configuration for sensor_fusion/test_sensor_fusion.py
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False"
chart_distance: 25
rotator_cntl: arduino
rotator_ch: 1
camera: 0
Um sensor_fusion
Tests mit der Sensor-Fusion-Box auszuführen, führen Sie Folgendes aus:
python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
Mehrere Testbeds config.yml-Datei
Das Folgende ist ein Beispiel für eine config.yml
Datei mit mehreren Testbeds, einem Tablet-Testbed und einem sensor_fusion
-Testbed. Die richtige Testumgebung wird durch die getesteten Szenen bestimmt.
Testbeds
- Name: TEST_BED_TABLET_SCENES
# Test configuration for scenes[0:4, 6, _change]
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
- serial: 5B16001229
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
chart_loc_arg: ""
camera: 0
scene: <scene-name> # if <scene-name> runs all scenes
- Name: TEST_BED_SENSOR_FUSION
# Test configuration for sensor_fusion/test_sensor_fusion.py
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False"
chart_distance: 25
rotator_cntl: arduino # cntl can be arduino or canakit
rotator_ch: 1
camera: 0
Manuelles Testen der Datei config.yml
Im Folgenden finden Sie eine Beispieldatei config.yml
für manuelle Tests. Ab Android 14 werden manuelle Tests für alle Tests außer den scene_extensions
Tests unterstützt. Für manuelle Tests muss das Schlüsselwort MANUAL
im Testbed-Namen enthalten sein. Außerdem darf der Abschnitt AndroidDevice
keinen Seriennummern- oder Etikettenabschnitt für ein Tablet enthalten.
TestBeds:
- Name: TEST_BED_MANUAL
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
debug_mode: "False"
camera: 0
scene: 1
Ausführen von ITS-Tests
In diesem Abschnitt wird beschrieben, wie ITS-Tests ausgeführt werden.
Aufrufen von Tests
Nachdem das Gerät, die Hostmaschine (einschließlich Umgebung) und die physische Szene eingerichtet wurden, führen Sie die ITS-Tests mit dem folgenden Prozess aus.
Öffnen Sie die CTS Verifer-App. Wählen Sie im Testmenü Kamera-ITS-Test aus.
Führen Sie auf dem Hostcomputer die ITS-Tests aus dem Verzeichnis
CameraITS/
aus. Führen Sie beispielsweise für ein Gerät mit Front- und Rückkamera den folgenden Befehl aus:python tools/run_all_tests.py
Das Skript durchläuft Kameras und testet Szenen basierend auf der Datei
config.yml
. Für Debugging-Setups empfehlen wir, eine derscene2
-Szenen mit einem einzigen Test auszuführen, um die schnellste Abwicklung zu gewährleisten.Bei manuellen Tests nimmt das Skript vor Beginn der Ausführung der ITS-Tests für jede Szene ein Bild der aktuellen Szene auf, speichert es als JPEG, druckt den Pfad zum JPEG auf der Konsole aus und fordert den Benutzer auf, dies zu bestätigen das Bild ist ok. Dieser Erfassungs- und Bestätigungsablauf läuft in Schleifen ab, bis der Benutzer bestätigt, dass das Bild in Ordnung ist. Im Folgenden sind die Nachrichten in diesem Fluss aufgeführt.
Preparing to run ITS on camera 0 Start running ITS on camera: 0 Press Enter after placing camera 0 to frame the test scene: scene1_1 The scene setup should be: A grey card covering at least the middle 30% of the scene Running vendor 3A on device Capture an image to check the test scene Capturing 1 frame with 1 format [yuv] Please check scene setup in /tmp/tmpwBOA7g/0/scene1_1.jpg Is the image okay for ITS scene1_1? (Y/N)
Bei jeder Ausführung des Skripts wird ein Protokoll ausgegeben, das für jeden ITS-Test entweder „PASS“, „FAIL“ oder „SKIP“ anzeigt, wobei SKIP angibt, dass der Test bestanden wurde, weil das Gerät die zugrunde liegende, getestete Funktion nicht angekündigt hat. Wenn ein Gerät beispielsweise über die Kameraschnittstellen nicht ankündigt, dass es DNG unterstützt, werden Tests im Zusammenhang mit der DNG-Dateierfassung übersprungen und als bestanden gewertet.
Um zu bestätigen, dass die Tests die Testanforderungen erfüllt haben, tippen Sie auf die Schaltfläche mit dem grünen Häkchen. Der Eintrag „Kamera-ITS-Test“ im CTS-Verifier-Testmenü wird dann grün und bedeutet, dass das Telefon den Kamera-ITS-Test bestanden hat.
Parallele Prüflingsprüfung
Geräte mit Android 14 oder höher unterstützen parallele DUT-Tests. Dadurch können Sie Prüflinge parallel mit mehreren Prüfständen testen, um die Gesamttests zu beschleunigen. Durch paralleles Testen können Sie beispielsweise Kamera 0 in einem Rig und Kamera 1 in einem anderen Rig gleichzeitig testen. Alle Tests für parallele Testsitzungen werden in der CTS-Verifier-Sitzung auf dem Referenz-DUT zusammengefasst. Sie müssen parallele Tests mit der Arduino-Beleuchtungssteuerung durchführen, da die manuelle Beleuchtungssteuerung bei parallelen Tests nicht unterstützt wird. Stellen Sie sicher, dass ein anderer Kanal auf demselben Arduino-Controller die Beleuchtung für jedes Rig steuert.
Im Folgenden finden Sie eine Beispieldatei config.yml
, die drei Testumgebungen für die parallele Ausführung definiert.
TestBeds:
- Name: TEST_BED_TABLET_SCENES_INDEX_0
Controllers:
AndroidDevice:
- serial: <device-id-0>
label: dut
- serial: <tablet-id-0>
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
lighting_cntl: "arduino"
lighting_ch: <controller-channel-0>
camera: 0
scene: <scene-name> # if <scene-name> left as-is runs all scenes
foldable_device: "False"
- Name: TEST_BED_TABLET_SCENES_INDEX_1
Controllers:
AndroidDevice:
- serial: <device-id-1>
label: dut
- serial: <tablet-id-1>
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
lighting_cntl: "arduino"
lighting_ch: <controller-channel-1>
camera: 1
scene: <scene-name> # if <scene-name> left as-is runs all scenes
foldable_device: "False"
# TEST_BED_SENSOR_FUSION represents testbed index 2
# Parallel sensor_fusion is currently unsupported due to Arduino requirements
- Name: TEST_BED_SENSOR_FUSION
# Test configuration for sensor_fusion
Controllers:
AndroidDevice:
- serial: <device-id>
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False"
chart_distance: 25
rotator_cntl: "arduino"
rotator_ch: <controller-channel-2>
camera: <camera-id>
foldable_device: "False"
tablet_device: "False"
lighting_cntl: "None"
lighting_ch: <controller-channel>
scene: "sensor_fusion"
Um die Testbeds parallel auszuführen, verwenden Sie den folgenden Befehl:
for i in 0 1 2; do python3 tools/run_all_tests.py testbed_index=$i num_testbeds=3 & done; wait
DNG-Rauschmodell
Geräte, die die Fähigkeit zur RAW- oder DNG-Erfassung ankündigen, müssen in den Erfassungsergebnis-Metadaten jeder Rohaufnahme ein Rauschmodell bereitstellen. Dieses Rauschmodell muss in den Kamera-HAL für jede Kamera (z. B. Vorder- und Rückkamera) auf dem Gerät eingebettet werden, das Unterstützung beansprucht.
Implementierung des Geräuschmodells
Um ein Rauschmodell zu implementieren, befolgen Sie diese Schritte, um ein Rauschmodell zu generieren und das Modell in die Kamera-HAL einzubetten.
Um für jede Kamera ein Rauschmodell zu generieren, führen Sie das Skript
dng_noise_model.py
imtools
Verzeichnis aus. Dadurch wird ein C-Code-Snippet ausgegeben. Weitere Informationen zum Einrichten der Kamera und der Aufnahmeumgebung finden Sie im DokumentDngNoiseModel.pdf
imtools
Verzeichnis.Um das Rauschmodell für das Gerät zu implementieren, schneiden Sie das C-Code-Snippet aus und fügen Sie es in die Kamera-HAL ein.
Validierung des Geräuschmodells
Der automatisierte ITS-Test tests/scene1_1/test_dng_noise_model.py
validiert das Rauschmodell, indem er überprüft, ob die in den Kameradaten angegebenen Rauschwerte für die Aufnahmebelichtung und -verstärkung korrekt sind.