Test caméra 360 "Qoocam 3 Ultra" de Kandao

J’ai repéré cette caméra depuis quelques temps et profité du black friday pour bénéficier d’une remis de 20% afin de la tester.

J’ai mis en gras ce qui me semble mieux que la GoPro Max, et en gras italique ce qui me semble moins bien.

Sur le papier elle a pas mal d’atouts avec un mode photos à 96MP et un GPS intégré, mais pas facile d’avoir plus de détails comme l’intervalle mini entre deux photos.

Elle est plus grosse et lourde d’une GoPro Max:

  • 340g contre 160g, important au bout d’une perche !
  • +5mm en largeur et +30mm en hauteur
  • fixation par vis standard (donc plus facile à aligner en fixe que le système GoPro).

Batterie plus grosse et avec plus de capacité: de 2280mAh contre 1660mAh
Aucune idée si l’autonomie est meilleure, cela dépend de sa consommation et pas juste de la batterie.

Deux trappes séparées:

  • une grande donnant accès à la batterie et la carte microSD
  • une petite donnant accès uniquement à la prise USB-C, très bien pour brancher une alim externe !

L’écran est un peu plus grand, l’ergonomie me semble nettement meilleure que sur la GoPro.
Le statut de la réception GPS est directement indiqué à l’écran (un truc qui manque sur la GoPro), ainsi que les valeurs typiques d’un appareil photo (vitesse d’obturation, etc).

Il y a 3 boutons physiques: on/off, changement de mode, démarrage/arret des prises de vues
Deux boutons virtuels, séparés de l’écran tactile, l’un permet de choisir un raccourci que j’ai configuré sur le mode photo 96MP JPEG.

Elle est livrée avec une housse, un câble USB-C, sa batterie, ainsi qu’une microfibre pour nettoyer les objectifs, mais il n’y a pas de protections d’objectifs fournies.

Elle a du stockage intégré, avec environ 96G disponibles et donc aussi un slot microSD qui a reconnu ma carte 256Go (pas trouvé la limité).
Il y a un aussi mode “external storage” dans les réglages que je n’ai pas testé, possible qu’on puisse de cette façon connecter un stockage plus important comme un SSD sur le connecteur USB-C.

Rapide test de prise de vues

Vue l’heure, il n’y avait plus trop de lumière pour un test grandeur nature, j’ai donc pris juste quelques photos dehors.

Les métadonnées

Le GPS s’est très vite calé, une bonne surprise car je n’ai pas pensé à attendre voulant surtout voir la qualité et le format des images.

Voici les métadonnées des photos en 96MP avec l’intervalle minimum de 2s :

ExifTool Version Number         : 12.76
File Name                       : Interval_20240101_080437_000002.JPG
Directory                       : .
File Size                       : 35 MB
File Modification Date/Time     : 2024:01:01 08:04:42+01:00
File Access Date/Time           : 0000:00:00 00:00:00
File Inode Change Date/Time     : 2024:11:26 17:41:53+01:00
File Permissions                : -rwxr-----
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
Exif Byte Order                 : Big-endian (Motorola, MM)
Y Resolution                    : 300
X Resolution                    : 300
Camera Model Name               : QooCam 3 Ultra
Make                            : Kandao
Software                        : V1.0.3.7
Exif Version                    : 0230
Exposure Compensation           : 0
Exposure Program                : Program AE
Warning                         : Invalid EXIF text encoding for UserComment
Color Space                     : sRGB
Max Aperture Value              : 1.7
ISO                             : 100
Date/Time Original              : 2024:01:01 08:04:41
White Balance                   : Auto
Create Date                     : 2024:01:01 08:04:41
Shutter Speed Value             : 1
Focal Length                    : 1.7 mm
Metering Mode                   : Average
Exposure Time                   : 1/215
Flash                           : No Flash
Light Source                    : Unknown
F Number                        : 1.6
Orientation                     : Unknown (0)
Resolution Unit                 : inches
Modify Date                     : 2024:01:01 08:04:41
GPS Latitude Ref                : North
GPS Altitude Ref                : Above Sea Level
GPS Longitude Ref               : East
JFIF Version                    : 1.01
Image Width                     : 13888
Image Height                    : 6944
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
Aperture                        : 1.6
Image Size                      : 13888x6944
Megapixels                      : 96.4
Shutter Speed                   : 1/215
GPS Altitude                    : 141.6 m Above Sea Level
GPS Latitude                    : 47 deg 52' 7.09" N
GPS Longitude                   : 3 deg 23' 49.80" E
Focal Length                    : 1.7 mm
GPS Position                    : 47 deg 52' 7.09" N, 3 deg 23' 49.80" E
Light Value                     : 9.1

En plus on a des infos spécifiques comme les paramètres de prise de vue (EV, AWB, etc):
QooCam 3 Ultra
PRODUCT=QooCam+3+Ultra
PROJECT=Cherry
SN=QU9302225077
PR_VER=1
SW_VER=V1.0.3.7
HW_VER=qcom LENS=14b614e44614f43406d455261ff31330040360000201b0000f9490645239c5745453359458d6239bcaed7f43aacc868bb40da7f390000000000000000000000000000000053d67f3f020e123dd996d322020e12bd53d67f3fdb5fb925d996d322db5fb9a50000803f000000000000000000000080f00000000000000000000000ffffffff5e24b614e44614f43406d455261ff31330140360000201b0000dc9906458ccd224668c258458d6239bcaed7f43aacc868bb40da7f39000000000000000000000000000000007afb7fbf48493f3cbb9daaba295f3f3cfcfa7f3f7c8185bb465ea43aabfe85bb67ff7fbfee463040cd4d4abd5bd486c0f00000000000000000000000ffffffff05
PTS=1704114281549000
STITCHED=0
COVER_MODE=0
HDR=0
DNG=0
AWB_MODE=0
CCT=5836
EV=0
ISO=100
SHUTTER=4644717
FORMAT=jpg
FOV=360
CAPTURE_MODE=interval
CPU_TEMP=49000
NEED_LSC=2
SENSOR_TEMP=29,30
IMUHEX=000000000000A90009E0C0FE000000000000
LENS_SN0=STCRQ06B46L02M5
LENS_SN1=STCRQ06B46M013N
LENS_OTP_ID0=168
LENS_OTP_ID1=168
GAINMAP0=110000000D0000…

PTS semble correspondre au timestamp (epich Unix) avec millisecondes:

date -d '@1732638708.437000'
mar. 26 nov. 2024 17:31:48 CET

Avec donc +473ms :slight_smile:

En comparant ces valeurs, on trouve de l’ordre de 2.1s entre chaque photos.

Pas de direction de prise de vue, je pense qu’il n’y a pas de magnétomètre même si il y a bien des accéléromètres pour stabiliser les vidéos.

IMUHEX contient sûrement des données des accéléromètres… il faudrait voir comment c’est encodé pour récupérer ces infos.

Format des photos

Les photos peuvent être prises en JPEG et en DNG (format “brut” sans perte).

J’ai juste testé le mode JPEG à 96MP, ce qui m’a permis de voir que les photos ne sont pas fusionnées par la caméra. On a deux fisheye côte à côte et un fichier JPEG pèse plus de 30Mo.

Pour repasser en equi-rectangulaire, on peut le faire depuis l’app mobile (iOS et Android), ainsi qu’une appli “Qoocam Studio” disponible pour Windows et MacOS.
J’ai testé l’appli sur mon MacBook Pro M1, le traitement est très rapide et permet quelques traitements supplémentaires pour améliorer l’image (défrangages, correction couleur, vignettage ET… la mise à l’horizontal).

Interval_20240101_080437_000003_Output(1)
Cliquez sur l’image pour la voir dans Panoramax.

Tests à compléter avec un peu de lumière et aussi en situation au bout d’une perche sur la Panoramobile !

3 Likes

Tu l’as prise à quelle heure ta photo, parce que c’est propre.
Tu penseras à changer la date et l’heure de ta caméra. C’est marqué 1er janvier.
Quid du délai entre 2 photos ?

PS: J’attends une photo de la boîte à livres pour la prochaine séquence de prise de vue.

2.1 secondes entre chaques photos, et non stichées ? L’augmentation du nombre de pixel pourrait être une explication, mais quand même, je suis déçu.
J’imagine que tu vas nous mettre la Gopro Max et la Qoocam 3 Ultra côte à côte sur la voiture afin de comparer la qualité en situation réelle ?

1 Like

Elle s’est mise à l’heure depuis.

Les fichiers JPEG non stichés font plus de 30Mo
Les DNG… 200Mo

Une fois passé dans l’appli, les JPEG perdent du poids et passent en dessous de 15Mo.

La caméra teste la vitesse de la carte mémoire et semble s’adapter. La Sandisk que j’ai mis dedans est mesurée à 45Mo/s par la caméra.

Les 2s ça semble quand même être la limite, la doc et les specs ne précisent pas.

Si la météo veut bien car rien de bon de prévu avant vendredi !

Test à faire aussi avec les smartphone ventousés au pare-brise, pour comparer un peu tout ça sur les positions, l’horodatage, etc…

Temps maussade mais voici une comparaison entre la GoPro et la Qoocam toutes deux à l’échelle 1:1 à l’écran.

La définition est vraiment intéressante, on a vraiment beaucoup plus de détails sans que ce soit trop bruité.

Voici la séquence prise par la GoPro :

et avec la Qoocam… où j’ai dû me louper sur le réglage d’exposition car elles sont bien sombres :

Test à compléter vendredi car la météo annonce du soleil et pas de pluie !

Test suivant… l’autonomie. Batterie chargée à 100%, je la met dehors (température) pour prendre des photos 96MP toutes les 2s… on verra combien seront prises au final.

L’appli de stitching permet de recalibrer l’assemblage.

On prend une photo en pointant vers le sol/ciel pour avoir un max de détail sur la zone de raccord, puis le logiciel détermine les corrections à faire et permet l’export dans un fichier qu’on remet sur la carte SD afin que la caméra le réintègre.

La tête du fichier est identique au champ LENS des données proprio qu’on trouve dans les EXIF.

Pour “PTS”, je pense que c’est l’acronyme de “Photo Time Stamp”.

Ne reste plus qu’à comprendre le contenu de IMUHEX, mais c’est sûr que l’IMU est utilisé sur les photos car celle prise pour calibrer le stitching est bien affichée par la caméra comme si elle avait été prise normalement et pas face sol/ciel.

Comparaison des traces GPS:

  • vert: iPhone 16 Pro (dual freq)
  • rose: GoPro Max
  • bleu: Qoocam

Je vous laisse juger sur ces trois virages assez représentatifs du reste :



Résultat: 2902 photos soit un peu plus de 90mn

Je vais tester aussi les modes vidéo car en 8K (7860x3840 = 30MP) on a une résolution supérieure à une GoPro Max (5760x2880 = 16MP).

Il y a un mode “timelapse”, qui permet de prendre des vidéos en réduisant le nombre d’images par seconde (de 2 à 10, soit des intervalles de 0.5 à 0.1s).

Les vidéos étant enregistrées en HDR, on a aussi une plage dynamique supérieure et l’appli de stitching permet de faire un mapping HDR>SDR avec différentes courbes ce qui permet de ressortir les détails en haute et basse lumière.

Elle peut enregistrer directement une vidéo comme série de JPEG :slight_smile:

Exemple, vite fait avec une lumière franchement pas très bonne :

  • vidéo avec 52 images en timelapse soit 1,73s à 30 images/s
  • 50Mo compressés en H265 (format .mp4), soit 230Mbps

C’est cette dernière qui me semble la plus neutre (sur mon écran).

2 Likes

S’il y a du Time Stamp à la milliseconde, ça va nous intéresser pour le recalage avec le RTK. Reste à voir si le Time Stamp correspond bien à l’heure de prise de vue et pas à la fin de l’enregistrement du fichier.

Pour la résolution, il nous faut des photos sur la route avec des panneaux de circulation. Ce n’est pas terrible avec la GoPro Max.

Le timestamp est à coup à peu près sûr généré avant l’écriture du fichier.

Le problème sur la GoPro semble être qu’il est pris et ajouté après l’assemblage des deux demi-images qui prend un peu de temps, mais là il n’y a pas d’assemblage fait pas la caméra et je pense donc qu’on devrait avoir une valeur pas trop décalée.

Par contre… est-ce un timestamp obtenu à partir du récepteur GPS ou bien de l’horloge interne ? Vu mes premières photos où l’horloge n’étais pas à jour, j’ai l’impression que c’est celui de l’horloge interne.

Oui, je vais refaire un tour, dès qu’il fera moins moche.

Voici une séquence faite avant-hier, avec du soleil et en 96MP:

Lors du stitching, j’ai activé la mise à l’horizon, qui est correct sauf dans les virages à cause de l’accélération centripète:

L’avantage du post-traitement, c’est qu’on peut faire plein de réglages, dont l’activation ou pas de cette mise à l’horizon automatique, mais aussi modifier l’orientation des photos sur les 3 axes pour compenser une mauvaise installation.

C’est cette seconde option qui est sûrement préférable sur une voiture, mais la première sera plus adaptée en mode piéton ou caméra montée sur un casque (vélo).

Mode vidéo

J’ai donc un peu plus exploré ce mode là, intéressant car les vidéos en 8K, ça donne des images de 30MP, soit deux fois plus que ce qu’on a sur une GoPro en mode photo.

Pour l’intervalle des timelaps, en voiture, le 1/2s permet d’avoir une image de 30MP tous les 11m à 80 km/h, idéal pour photo-cartographier les départementales sans y passer y temps fou !

1/2s me semble une bonne valeur, en zone urbaine à 40km/h ça fait une image tous les 5m…

Voici un exemple d’image obtenue :

Voici à l’échelle 1:1 le cédez le passage qui est à gauche de l’image, qui me semble très lisible !

L’app de post-traitement sort donc une série de JPEG, mais malheureusement sans géoloc ou horodatage dedans.
Elle peut toutefois sortir la trace GPX lorsque l’on fait un export vidéo… donc possibilité d’associer tout ça en remettant un timestamp dans les JPEG puis une corrélation avec le GPX.

Lors du post-traitement, on peut refaire tous les calages sur les 3 axes, et ici, j’ai pris les photos en mode gauche/droite pour favoriser la qualité sur les côtés, mais remis ça “droit” lors du post-traitement.

Bref, le workflow me semble vraiment bien adapté si on veut favoriser la qualité:

  • images de 30MP
  • distance entre les images grâce à la fréquence de capture
  • gestion de la lumière avec le mapping HDR>SDR
  • recalage de l’horizon et orientation
  • repositionnement GPX correlé

La recalibration du stitching est aussi très efficace, je vais la refaire car je tenais la caméra à la main sur la photo utilisé pour recalibrer et donc ma main a masqué un partie vers le bas. A refaire avec une perche.

Sur la lisibilité des panneaux, ça a l’air pas mal.

Pour le workflow, il faut voir mais, pour le moment, je ne suis pas satisfait de mon workflow GoPro Max + RTK. Les timestamps à la seconde près sans avoir une cadence de prise de vue suffisamment précise et/ou stable, ça met le bazar.

Sur les photos, on a un timestamp à la milliseconde.

Sur la vidéo, je vais regarder si c’est bien régulier, j’image que oui, vu que le but du timelapse est de faire une vidéo fluide au final.

Test de workflow avec les vidéos en timelapse:

  • copier les fichiers .mp4
  • utilisation de Qoocam Studio pour le post-processing
    • mapping HDR> SDR
    • remise à l’horizon manuelle et ré-orientation (la caméra était à 90° de la trajectoire pour favoriser la qualité sur les côtés)
    • export en JPEG des images de la vidéo
    • export d’une vidéo en résolution réduite pour générer aussi un fichier GPX (j’ai pas trouvé comment extraire ces données directement depuis la vidéo d’origine) avec une position par seconde
  • petit script python maison
    • utilisation de ffprobe pour obtenir les timestamp relatifs (à la milliseconde) des images
    • ajout des tags EXIF pour avoir ce timestamp dans les fichiers JPEG
  • ouverture dans JOSM pour faire la corrélation, trouver le décalage temporel qui va bien, remettre l’orientation sur la trajectoire, etc…

J’ai détaillé, c’est quand même assez simple et rapide d’enchainer tout ça.

Test fait sur la vidéo d’hier, un timelapse à 6 images/s (c’est clairement trop) sur 30 minutes de route avec un peu de zone urbaine et de la départementale à 90 km/h (total de 27km) ce qui fait plus de 9000 images au final et 47Go (pour 11Go de vidéo MP4).

Un truc louche sur les dates… qui fait qu’il y a deux séquences, une au 29/11 et une autre au 11/11 !
Bug aussi sur l’orientation… bizarre, mais ça donne une idée de ce que peut capturer cette caméra.

image

Séquence du haut en mode vidéo 8K à 6 images/s et en bas, c’est le mode photo 96MP avec un image toutes les 2s.

2 Likes

Dernier test campagnard… avec une météo peu favorable:

  • mode vidéo timelapse à 2 images par seconde
  • script d’horodatage corrigé (il y avait un petit bug qui explique les incohérences sur la séquence précédente)
  • ce coup-ci je ne me suis pas planté sur l’orientation dans JOSM :wink:

Quelques chiffres:

  • 21km
  • parcouru en 27 minutes
  • fichier vidéo de 2.95Go (merci le H.265)
  • 12mn de post-processing (sur mon MacBook Pro M1 ultra basique)
  • 3348 photos
  • 12.5 Go pour les photos
  • 10 minutes d’upload + 13mn pour que se terminent les traitements sur l’instance pour être visionnables.

Voilà le résultat :

Avec ce mode de prise de vue, la mémoire intégrée seule (96Go libres) permet d’enregistrer de l’ordre de 16h de prise de vue, soit plus de 100 000 photos au final et de couvrir de 500 à 1000km avec 1 photos tous les 5 à 10m pour une vitesse de 36 à 72 km/h.

Pour l’autonomie, je pense que l’idéal consiste à alimenter la caméra avec un câble, j’ai même trouvé des câbles USB-C coudés pour que ça soit un peu plus propre et moins fragile.

Pour la fixation sur un véhicule, j’ai testé ce matin un nouveau support magnétique et c’est super costaud (difficile à retirer).

Ça n’est pas le cas sur les métadonnées que tu as copié/collé dans ton premier message. :thinking:

De mon côté, je suis toujours en discussion avec eux. Ils ont demandé si un mode timelapse photo à 1s avec le réglage d’exposition en manuel serait utile. Je ne pense pas que ça le soit.
J’essaie d’en savoir un peu plus sur les raisons de la limite à 0.5Hz.

Je leur ai demandé entre autre si un mode timelapse photo avec une résolution un peu plus faible pourrait être une possibilité.

Si je me fais l’avocat du diable, je vois ceci :

  • Pas utilisable pour ceux qui sont à 100% sur linux
  • Trop lourde pour être installée sur un casque
  • Demande du post traitement
1 Like

J’ai l’impression que c’est moins net avec le mode vidéo.

Par ailleurs, question météo, je trouve généralement que les panneaux sont plus lisibles quand le temps est gris. Avec un beau soleil, les panneaux en pleine lumières ont tendance à être surexposés avec les écritures mangées par le fond blanc. Inversement, à l’ombre, c’est le fond qui est trop sombre.

J’ai le modèle fourni par OSM_Be/Mapillary. Il y a trop de degrés de liberté/rotules partout et c’est compliqué de bien mettre ça droit. Dans ton modèle, avec les trois ventouses en étoile, ça paraît plus simple.

Il n’y a qu’une rotule et ensuite c’est fixation par vis, donc pas d’axe de liberté de plus contrairement aux GoPro.

De toute façon, même si on est de travers, on peut tout remettre droit au post-traitement.

Pareil, mais dans cet ordre :smiling_imp:

rédhibitoire 1 : Demande du post traitement
rédhibitoire 2 : Pas utilisable pour ceux qui sont à 100% sur linux
Trop lourde pour être installée sur un casque - bon, si il n’y avait pas 1 et 2, on pourrait éventuellement adapter un mat télescopique arrière …