Since you are apparently capable of writing your own scripts, I think you should also be able to understand the Photo Sphere XMP Metadata | Street View | Google for Developers specification to answer most of your questions. Generally speaking, it is usually best to have your camera fixed to face forward (the front facing lens) only. Simply put, forward is in the center of the image. The “north pole” is at the center top edge of the image. Technically, Mapillary does not care if the image direction is all over the place but such imagery is not particularly comfortable to look at nor aesthetically pleasing. A forward facing fixed camera will also enable you to easily add the GPSImgDirection Exif tag (should it be necessary) to the resulting imagery by virtue of normalization at the GPS position of the next image.
You may also want to make sure your camera is mounted or held horizon leveled (0° pitch and roll) because Mapillary does not do it for you. Some cameras advertise software auto horizon leveling. In my experience, most of the time the results are mediocre at best. So, I try to avoid using software horizon leveling because it adds unnecessary pixel juggling by the camera which always introduces artifacts.
Although I do not own a Qoocam, I think the capture interval is limited by stitching speed rather than storage throughput. Basically all consumer grade 360° cameras currently on the market are bottlenecked by the iGPU and poor firmware. So there isn’t much you can do. Sometimes you can trade resolution for interval time.
It depends on the firmware.
I think most people use built‑in camera storage or SD cards because you do not have to fiddle with cables and powerbanks. If you want to connect an external SSD that requires additional power and/or power the camera on the go then you are going to need a USB hub. Note that not all USB hubs can take and distribute power on multiple ends, so you will have to do some research on which products/devices do.
It should be a single JPEG image in equirectangular projection (see the spec for what it means) on a 2:1 plane.
I’d rather not point a lens straight ahead. I have TONS of imagery for my area (6600km Road with 930K+ Images) and i am now more interested in the sides of the road rather than the road itself. So i’d rather have a less then optimal image straight ahead than off to the sides.
So i need to experiment a bit with XMP tags e.g. GPSImageDirection which then is 90° off to the travel direction.
Just an example of an image fresh from the Qoocam 3 Ultra - So it does not seem to fill GPS Img Direction. But thats doable - the normal mapillary uploader console will fill this for me based on the next image. It least better than nothing.
exiftool --struct Interval_20250221_135247_000014.JPG | egrep GPS
GPS Version ID : 2.3.0.0
GPS Latitude Ref : North
GPS Longitude Ref : East
GPS Altitude Ref : Above Sea Level
GPS Time Stamp : 12:53:27
GPS Measure Mode : 3-Dimensional Measurement
GPS Dilution Of Precision : 2.7
GPS Speed Ref : km/h
GPS Speed : 0.004141277
GPS Img Direction Ref : True North
GPS Img Direction : 0
GPS Dest Latitude Ref : North
GPS Dest Longitude Ref : East
GPS Dest Bearing Ref : True North
GPS Processing Method : gps
GPS Date Stamp : 2025:02:21
GPS Altitude : 72.7 m Above Sea Level
GPS Date/Time : 2025:02:21 12:53:27Z
GPS Dest Latitude : 51 deg 54' 31.67" N
GPS Dest Longitude : 8 deg 21' 22.65" E
GPS Latitude : 51 deg 54' 31.67" N
GPS Longitude : 8 deg 21' 22.65" E
GPS Position : 51 deg 54' 31.67" N, 8 deg 21' 22.65" E
The Camera does not do that. It says one can stitch in the camera, but it seems thats only supported for video, not interval/photos - at least i am unable to find that.
I am now trying with Qoocam Studio - but i dont even have a Windows Machine myself (Linux only since '94) so a workflow which requires Qoocam Studio would be a major PITA.
Neither GPano:PoseHeadingDegrees nor GPSImgDirection have any meaningful impact on Mapillary any longer, except for the “blue” UI dots in the web app which display the metadata image direction. You can make mapillary_tools offset your GPSImgDirection with the --offset_angle option.
Pro tip that makes life easy: Having the front lens always face forward alleviates you from remembering what the offset was, especially with 360° imagery.
I can not really believing this - this may be true if successive of a sequence have enough overlap with other imagery to get some heading. Following a sequence and not jumping around in direction of view would require that information wouldnt it?
The stability of “Direction of view” then relies on
a) Orientation of camera in relation to movement hasnt changed (Which prohibits mounting the Camera on a helmet)
b) Mapillary can reorient the image by other already available imagery (possibly from same sequence)
And IMHO Qoocam Studio does a lot of “fixing” here by using the GPS and IMU information.
And thanks for the Pro tip. I am taking Fotos for mapillary now for 12+ years and have done 6000km of street and 900k+ images so i have my tricks aswell for enshuring stuff like that. It all about establishing well known proceedures. I marked the sides of the cameras with L and R to always use the same facing.
Now i need an automated process of fetching imagery, stitching it as batch, and uploading it. Right now for the non 360° camera its just a matter of connecting the camera and the process runs automatically.
And using Windows Software e.g. Qoocam Studio is a non option here. Right now exploring Hugin (Which i used for making point clouds and aerials from a drone)
Kandao, please adjust the “QooCam Ultra 3” Interval Mode settings so that it becomes possible to capture frames as frequently as possible, since this camera is arguably the best tool for recording 360‑degree imagery for Mapillary.
The current interface creates the impression that the 3‑second limit is caused by storage write speed rather than by exposure settings, and users keep swapping SD cards, connecting SSD drives, yet the result is disappointing — the interval cannot be reduced.
Yes, the camera can shoot every 2 seconds, but to achieve this you must switch the exposure mode to manual and set the minimum shutter speed to at least 1/100, which in most daytime shooting scenarios is self‑evident.
The problem is that the interface is so misleading that even knowing this fact, forcing the camera to shoot every 2 seconds is a challenge.
2‑second interval shooting is only possible when the shutter speed is set manually, but in that case the camera can control exposure only by adjusting the ISO value, which is very limited, due to changing lightning conditions.
If there were a way to clearly declare that the shooting mode is automatic while still requiring the camera to stay within specific shutter‑speed and ISO ranges, the device would be simply outstanding.
Have you tried contacting them directly? Also we haven’t tested the QooCam Ultra 3 - if you are able to share raw samples from the camera (both video and imagery) - that would be amazing.
Yes, today I finally forced myself to do it. I sent them an email and also wrote on their Facebook page. But if more potential buyers asked for the same thing, they might finally see the need for a firmware update.
As for the question about RAW photos/video — I didn’t quite understand it. People have been sharing that in this thread as well.
Do you need some other type of RAW photos/video?
Great. Yes, there was one raw image shared earlier in this thread - I was looking for a few more samples and ideally for video as well - as it comes off the camera without any manual processing steps.
The camera can shoot in JPG and DNG. For every series it creates a folder where it stores the JPG files and one file with the “kvar” extension. Tomorrow I’ll upload some samples — just tell me what you’d like to check.
Thank you for sharing the samples @kedas, confirming that I received them. It looks like all the output the camera creates requires stitching, so the workflow for Mapillary is a little bit more manual compared to something like the GoPro MAX 2.
Merging can also be done in‑camera. There is a setting for that, but I never use it because it doesn’t work in interval mode. When triggered manually, the camera produces a stitched frame every five seconds. I can upload some examples made this way when I get a chance.
The camera is able to stitch video automatically, but I never shoot video because the resolution drops significantly. I don’t use 360‑degree video at all.
I shoot in manual mode because I’ve never had hardware that records GPS data accurately enough. When shooting, the GPS track often drifts too far for me to feel comfortable uploading directly to Mapillary. So I record GPS with OsmAnd+, correct it in JOSM, then geotag the 360 photos with GeoSetter, and only after that use the Mapillary app to interpolate directions and upload everything.
It’s hard for me to imagine uploading files of this size automatically through a phone app.
By the way, if anyone is interested, the RAW photos and videos are available here.