Using BlackVue DR900 and mapillary_tools


Want to get some ideas and feedback. I am creating and periodically uploading 10,000-30,000 images per day as I drive random directions in Australia.

I video_process in the vehicle and save to a USB hard disk. Then at intervals between 2 and 12 weeks I connect the drive to a PC in a fixed location and remotely run upload.

I run a virtual environment on Debian 8.

I have been getting thread crashes on various occasions, requiring 30 or more restarts for one days image.

Is anyone else running a setup similar to this? I realize a lot of the development is still in beta but it would be nice to pool ideas.

Cheers Bob


I’ll piggyback onto this thread since the title fits so well. I just got the DR900 and would like to understand an overview of the processing flow.

From your message, I assume that the first step is to apply video_process to the MP4 files and the result is separate Geo-located photos. Then upload those photos just as if they were acquired in a Smart device.


The tools do have the capability of processing and uploading with one command, but I do it separately. It is also useful to be able to delete some of the images prior to upload. (eg private places)

the sub commands are “video_process” or “video_process_and_upload” It is all written in Python and I execute from Linux. I notice some are also running under Windows.

The at is quite good.

It does take a long time to convert the mp4’s to jpg’s. On my i7 it takes about 90 minutes for 3 hours of capture at 2FPS.

There is/was also a direct mp4 upload facility that I think is close to being enabled again.

I have also perfected hot WiFi transfer of the mp4’s from the DR900 to a laptop whilst capture runs concurrently. I was concerned about popping the SD card out every day.


Now that sounds interesting, especially for long drives! Can you elaborate?


I setup a shell script on the Linux machine that connects to the BlackVue WiFi at It also has the ability to do the tools process step, but is commented out. More error correction could be built in but I haven’t bothered. One concern is to repeat a partial download rather than wait for it to finish manually.

It connects at (only) 72Mbit/sec (802.11n) which means about 30-40 seconds for each one minute movie. The BlackVue setup has to be modified for WiFi always on. (Unless one wants to push the button at startup)

The script follows;


#cd “$(dirname “$0”)”
export BVDATE=date +%Y%m%d
echo $BVDATE

cd /media/user/MapDisk2
mkdir -f Record

while :
# Write current list of todays files already saved to large drive
find . -name “*.mp4” | cut -c 2-26 | grep $BVDATE | sort >filesondrive.txt

# Write current list of todays files on the BlackVue SDRAM
curl | sed 's/^n://' | sed 's/F.mp4//' | sed 's/R.mp4//' | sed 's/,s:1000000//' | sed $'s/\r//' | grep $BVDATE | sort | head -n -1 >filesonblack.txt

# Compare file lists and output the next in line to be transferred
F2G="`diff --suppress-common-lines -n filesondrive.txt filesonblack.txt| grep Record | grep -v 000000 | head -n1`"
cd Record

if [ "$F2G" = "" ] ; then
    echo no-file-op
    # Grab mp4
    wget -cN$F2G\F.mp4
    # Insert background launch of mapillary_tools processing for this video
        #mkdir -p /home/user/Thing/Mapillary/$F2G\F/images
        #nice mapillary_tools video_process --import_path /home/user/Thing/Mapillary/$F2G\F/images/ --video_import_path /media/user/MapDisk2/Record/$F2G\F.mp4 --user_name bob3bob3 --advanced --geotag_source "blackvue_videos" --geotag_source_path /media/user/MapDisk2/Record/$F2G\F.mp4 --use_gps_start_time --interpolate_directions --video_sample_interval 0.5 --device_make "Blackvue" --device_model "DR900S-1CH" --overwrite_EXIF_gps_tag --duplicate_distance 1.0 >>/home/user/Thing/Mapillary/logs/bv$F2G\F.log 2>&1 &
cd ..
sleep 5



I had the same concern and found a BlackVueDownloader. It worked, but I had visions of coming home and having it connect to WiFi while parked and I would upload all new stuff. But it takes more than a minute to upload a minute’s video clip. So for now I’ll estimate having a full SD card and dump it that way.


Off topic - I’m soldiering through installing all the conflicting requirements to get mapillary_tools running:
pip cannot import name ‘main’
Python 3 vs Python 2 conflicts, mapillary_tools needs 2.7, then a stern warning that Python 2.7 will reach end of life

Everything was resolved, but it seems more complicated than it should be.


I only have about 40cm between the BlackVue and laptop so the signal is quite good. Even at the speed I get though it is only useful if I download whilst driving. The laptop also captures a webcam and runs a 2nd GPS so it is always available for that.

I would guess that the BlackVue Wifi rate has been throttled for other reasons.

1 Like

It looks like I have the first process working to convert to Geotagged JPG. I notice that when I submit the rear camera view, it is also processed. However I think those are not as useful:

  1. Lower resolution
  2. Most signs on the near side of the road would face the other way
  3. The conversion script calculates the same camera heading (which is strictly correct since that’s the way it’s moving), but as a symbol on the image browse, it should face the other way? Would it combine as part of a 360 view or just confuse things?

For the rear camera;

–offset_angle OFFSET_ANGLE
offset camera angle (90 for right facing, 180 for rear
facing, -90 for left facing)

should help.

The full nmea dump is actually saved inside the mp4, including speed and bearingf The tools however seem to only decode the GPGGA sentence (that includes altitude), not GPRMC. If the WiFi download method is used there is a pseudo nmea text file available (*.gps) for each movie too.

1 Like


mapillary_tools video_process --import_path “path/to/images” --video_import_path “path/to/videos” --user_name “mapillary_user” --advanced --geotag_source “blackvue_videos” --geotag_source_path “path/to/videos” --use_gps_start_time --interpolate_directions --video_sample_interval 0.2 --device_make “Blackvue” --device_model “DR900S-2CH” --overwrite_EXIF_gps_tag

im use this (windows10):
F:\BlackVue>mapillary_tools video_process --import_path “F:\BlackVue\Record\test\images” --video_import_path “F:\BlackVue\Record\test*.mp4” --user_name velmyshanovnyi --advanced --geotag_source “blackvue_videos” --geotag_source_path “F:\BlackVue\Record\test*.mp4” --use_gps_start_time --interpolate_directions --video_sample_interval 0.1 --device_make “Blackvue” --device_model “DR900S-1CH” --overwrite_EXIF_gps_tag --duplicate_distance 0.1

usage: see -h for available tools and corresponding arguments, add --advanced to see additional advanced tools and/or arguments and --version to see version.
Mapillary import tool: error: argument tool: invalid choice: ‘video_process’ (choose from ‘process’, ‘upload’, ‘process_and_upload’)


Don’t specify the the video file name wildcard, use the path name. Pretty sure dropping the trailing slash also works.

mapillary_tools video_process --import_path “F:\BlackVue\Record\test\images” --video_import_path “F:\BlackVue\Record\” --user_name velmyshanovnyi --advanced --geotag_source “blackvue_videos” --geotag_source_path “F:\BlackVue\Record\” --use_gps_start_time --interpolate_directions --video_sample_interval 0.1 --device_make “Blackvue” --device_model “DR900S-1CH” --overwrite_EXIF_gps_tag --duplicate_distance 0.1