Is using a phone's wide angle camera possible?

Hi,

I have an LG G6 and I love its wide angle camera. However, is there any possibility to use it in Mapillary?

I’ve looked around a bit and it seems that, unfortunately, the wide angle lens isn’t integrated in the normal camera API, which is why Mapillary doesn’t use it. Also when switching to legacy API in the developer settings it doesn’t work. However, other apps, like WhatsApp, opencamera and the pro version of dailyroads voyager (a dashcams app) can use it.

So my question is, is there any possibility to use the wide angle in Mapillary? Needless to say it’d be quite helpful when taking streetlevel photos. The difference is insane.
Or if it isn’t possible, is there an implementation planned? I understand it’s probably not a feature of priority as it would benefit only a handful of users as there aren’t tons of wide angle phones out there (AFAIK only LG G5, G6, V20) but I hope anyone can give me some information here on this topic.

I’ve added images below to demonstrate the difference (all taken from the same height, obviously):

Default camera app with wide angle:

Default camera app without wide angle:

Mapillary:

Thanks in advance

cageythree

3 Likes

I have the G5 a completely agree: The wide angle camera is awesome. The Mapillary app does not support changing camera, just as you cannot use the selfie camera.

Cameras that supports the wide camera actually just circles through the list of cameras. LGs own app knows which is which and have separate controls for that. So it should not be that hard for Mapillary to implement.

I suggest filing an issue on https://github.com/mapillary/mapillary_issues/issues where developers will see it.

1 Like

It seems this issue in GitHub has been archived and I cannot find a new thread about this feature request in the forum. As an owner of a LG G7 I also find it very interesting. Actually I use the wide angle camera more often than the regular one, but I cannot use it with Mapillary.

I personally don’t have a wide angle camera phone anymore now, but now as there are more manufacturers besides LG using wide angle cameras in their phones (For example Samsung Galaxy S9+, S10, Note 9, A7 and A9; Huawei Mate 20; Asus ROG and Zenfone 5Z; Moto X4; Vivo X23; ZTE Axon 9 Pro) so my opinion is still that this should be implemented. Even if it would be just a hidden setting - there could be an option in the developer settings to add a camera cycling feature that lets the user switch cameras if needed.

2 Likes

just got a samsung s10e last week and the wide angle lens is wiiiiide! it would be great to get support for this in mapillary

standard lens:


wide lens:

i wonder if there is a normal system-wide api for these now. multi-camera was added in Pie…

Android have a system for switching between cameras, so it should be a simple call to switch to the next. If you don’t mind uploading from your PC, the Android app Open Camera can do all that Mapillary can do (geotagging, repeat unlimited every N meter, more focusing options), but also circle through cameras and exposure compensation.

2 Likes

How do you do that though? I couldn’t find anything for this

From the main screen, press the gear, select Timer, scroll all the way down to 1, 2, 5m. Could be better with the option to specify a number. Or just 10 and 20 m. Also set Repeat to unlimited in the same settings menu.

It only shows 1/2/5 minutes for me… Is this just a translation error in my language’s localization files or did you mis-interpret the unit m?

i set repeat to unlimited and the timer to 1s which is roughly the same as what the mapillary app does. (repeat is another menu above the timer option)

you can also get to these settings quicker by tapping the 3 dots from the camera screen and scrolling down the menu that pops up

I’ve considered that too, but honestly I’m just too lazy to sort out the pictures taken while standing at traffic lights.

However, I’ve just successfully tested this with Tasker! I use my integrated camera app though, as I’ve recently got a Xiaomi Mi 9 and it doesn’t seem to give any other camera app access to the wide angle lense. It works with open camera too though, in case OC detects the wide angle camera on your device.

So what I did is the following (easier and with pictures explained at the bottom): First, I’ve created a profile thats if statement is the camera app. So the profile will become active when I open the camera. The first action of this profile is to start GPS search, while checking the options “immediately continue with task”, “continuous search” and “continue task after error”. Note that the options might be labeled differently, I’m using Tasker in my locale so the English option labels might be different. This profile was just for testing purposes but I’ll keep it in case my camera app fails to update GPS frequently enough. After this action I’ve added another one, that is plugin > AutoInput > UI query > app package: com.android.camera (for open camera use com.sourceforge.opencamera). That generates a variable with the app name, so @aiapp will be “Camera” or “Open Camera” or whatever camera app you’re using. After that I added task > if > %aiapp ~ camera, and below I added go-to action > action number 1 (= if the camera app is still open, repeat the profile, i.e. continue scanning for GPS) and else stop the task (=don’t scan for location anymore)

Then I added another profile that is variable > variable set > %CurLoc. I’ll explain in the next profile why I didn’t use the built-in %LOC here. The action of this profile is taking a picture. I accomplished that using AutoInput again. In my stock camera app this is Type=Id, value=com.android.camera:id/v9_shutter_button_internal, Action=click. So basically this means as soon as a new location is set (that isn’t the same as the last one, hence the %CurLoc instead of %LOC) to take a picture.

Next profile is setting up %CurLoc. The if statement of this profile is event > variable > variable set. So every time a location is reported (no matter if its the same one or a new one) this profile will trigger. Since I want this profile to update the %CurLoc variable as soon as a different location is reported, the action list is the following: First, set %CurLoc to %LOC (so %CurLoc will start with the current location). Now an If statement; if %CurLoc ~ %LOC, wait one second, then go-to action number 2. That means if %CurLoc is still the same as %LOC (= I haven’t moved since the last location update), do nothing, wait a second, go back to the if statement and check again if %CurLoc is still the same as %LOC. If it is, repeat the above forever until it isn’t. Now if it isn’t the same (else statement) it goes back to step one; setting the %CurLoc to %LOC, which will trigger the “%CurLoc variable has been set” profile, which will then trigger the camera shutter button.

What I did, but that’s completely optional for functionality, is set up another variable that is %MapillaryActive ~ true/false. I switch that variable manually and set it up as an additional if statement for all profiles; that allows me to easily switch all the profiles on or off from a home screen shortcut without going into Tasker and toggling them all three manually every time I want to take photos.

Now this probably sounds more complicated than it is, especially if you don’t have experience with Tasker. So here’s an imgur album with screenshots in case anyone wants to do it like this (I’ve changed Tasker to English for those): https://imgur.com/a/eRDxE5b
I’ve added captions to the pictures to explain what the stuff is below the pictures, probably easier to understand than what I’ve wrote above.
The setup works fine!

Edit: I’m on the go at the moment but I’ll upload the tasks as xml files later so anyone can just import those if they wanna test it (you’ll then only have to edit device specific stuff like the shutter button name)

Edit: The xml files for import are, for profiles this, this and this and for tasks this and this.

I can see that I misunderstood the configurations. I read 1m, 2m 5m as meters while it actually means minutes.
If using the command line Python scripts from Mapillary , there is an option to remove duplicate images. I use that on images from action cameras and it works very well. But it would be better to not take those extra images.

I don’t have experience with the command line and python stuff, but I’ll try if I can do it. Thanks!

Back to the subject,
Can you share the EXIF information?
Is there enough info for Mapillary to get this right?
Have you tried to take a picture with and without the wide lens and uploaded it to see what happens?

Just a thought:
Maybe it’s possible to juggle around with there EXIF parameters:
ProjectionType=cylindrical / equirectangular
CroppedAreaLeftPixels=x
CroppedAreaTopPixels=-x
CroppedAreaImageWidthPixels=x
CroppedAreaImageHeightPixels=x
FullPanoWidthPixels=x
UsePanoramaViewer=true

But I have no idea what the values would need to be to get this right…