OpenStreetMap

Blackbird27's Diary

Recent diary entries

OSM loves Mapillary

Posted by Blackbird27 on 24 May 2016 in English.

When looking through the pages of Open Street Map community at Google+, I stumbled upon an article about collaboration between Open Street Map and Mapillary. Mapillary – is a service for sharing of geotagged photos developed by Mapillary AB, located in Malmö, Sweden. The goal of the company is to represent the whole world (not only streets) with photos using Crowdsourcing. What got me interested is that geotagged photos may be used for OSM map data creation because they licensed under CC-BY-SA license, availability of the plugin for the popular JOSM editor and possibility to turn on Mapillary layer in web-based iD Editor. Mapillary service is an alternative to Google Street View and Yandex Panoramas except that it is users who provide photos for the service. Mapillary service has apps for the mobile phones based on Android, Windows Phone, iOS and BlackBerry OS. But shooting photo-sequences with your phone while you walk or ride bicycle is not very comfortable, besides that phone battery dies very quickly, mount for the phone could be unreliable etc. That’s why in this article I will describe how to create panoramas for the Mapillary service using action camera. When you use Mapillary app on your phone all exif-tags that are necessary for photo geolocation (coordinates and shooting direction) acquired automatically because phones mostly come with compass and GPS unit already built-in. Action cameras usually doesn’t have built-in GPS unit (not like Sony Action Cam HDR-AS30v) that’s why we would need GPS-track for manual geolocation of photos.

What we would need is:

  1. Action camera with car/bicycle mount that can shoot in time-lapse mode. I use cheap but powerful Xiaomi Yi Action Camera.
  2. Device that could record GPS-track. It could be GPS-logger or mobile phone with GPS, or combination of both. I use GPS-logger HOLUX RCV-3000 connected to the phone by Bluetooth and mobile phone with OSMTracker (Android) app installed to record GPS-track. If satellites are dispersed in the sky-evenly in each direction HOLUX RCV-3000 could output GPS data with 1.7 meters accuracy.
  3. A little mind-twisting (dance with a tambourine – in original article, from Ukrainian) around Python, wideband internet access for manual photos upload to Mapillary.

Now in detail:

Start your GPS device and leave it in the place with clear visibility of the sky until GPS position is fixed (for better accuracy let it be for at least 5 min), after GPS position is fixed start GPS-track recording, make a picture with your camera of your phones current time with precision to the seconds (may be needed later for synchronization and setting offset), then start your camera in time-lapse mode and start to move through streets/places for which you wish to create Mapillary photo sequences, when you done export data from OSMTracker into .gpx-file. For the bicycle ride I chose shooting interval of 2 seconds, for the car which could move much faster would be vise to select shorter interval, the camera mentioned above could do time-lapse mode with interval up to 0.5 seconds, as long as fast class micro SD card installed. In my case I still make picture of the phones clock with the camera and make sure that camera clock is synchronized with phones clock, in the OSMTracker Preferences menu I check box to ignore GPS-time and use phone-time (my local time) for the time stamps. screenshot_OSMTracker In that way photos from camera and time stamps in .gpx-file will be in the same time zone and already synchronized, if you didn’t do that you still could correlate photo position with GPS-track later in JOSM as long as you took photo of your phones clock. As a result we got a sequence of the photos and .gpx-file of recorded track. For convenience create a folder named with current date and copy photos and .gpx-file in that folder. It is recommended to create a backup folder here as well and copy all photos in it before making any changes in case something will go wrong. # Geotagging photos There many ways to geotag a photo ranging from use of Windows-programs and to Python scripts or libraries/ modules Ruby Gems on Linux-like operating systems. I will describe two the most easiest ways for the common user: ## Geotagging with old and powerful JOSM: I use JOSM for tagging photos with GPS position, it’s simple and fast to use.

  1. In order to write exif-data to the photos after we synchronized them with GPS-track in JOSM, we need to install Photo Geotagging plugin. Go to the JOSM Preferences (F12)»Plugins tab»Search for Photo Geotagging and check the box to install, after installation restart JOSM. photo_geotagging_en

  2. After JOSM is started»Open .gpx-file and add photos to the loaded GPS-trak, set correlation to 0, because our track recorded using local time zone (phones time), if GPS-track was recorded without prior correction (GPS time is always in UTC 0:00 time zone) then you need to correlate the difference in relation to Greenwich. The best way to do this is to determine the difference from the first picture we took of mobile phones time on the screen, just select this option from dialog and enter the time you see on the picture, in result all sequence will be lined up properly. open_gpx_and_photos_en

  3. Then just right-click the “Geotagged Images” layer and select “Write coordinates to image header”, then yes. Additionally you could check the box on the “keep backup files” option if it wasn’t done earlier. Saving of changes is very fast. save_photos_en

  4. After those steps is done each photo should have coordinates and altitude above sea level (if altitude above sea level was recorded to .gpx-file). To check this you could use simple program called ExifTool by simply dragging photo on the program icon. file_check

Alternative way using freeware-program GeoSetter

  1. Run GeoSetter and in the directory choose dialog select folder with photos which you would like to geotag. open_photos_geosetter

  2. Select all photos in the folder (Ctrl+A) and push on the “Synchronize geo data of selected images with GPS data files” button (Ctrl+G) which will call the dialog window to choose GPS-track and synchronization parameters setup. select_img_and_syncronize

  3. Choose .gpx-file (if track in the same folder as photos, option to use track from that folder will be automatically checked), if needed choose parameters for correlation and press OK. If photo time stamps (Original Taken Date tag) and .gpx-file track-points time in the same time zone program will tell us that GPS positions was found for some amount of the files. If photos doesn’t match the time of .gpx-file track-points you need to set time zone difference. After photos is synchronized don’t forget to save the changes by pressing either floppy disk icon or Ctrl+S key combination. It takes a lot more time to save changes compared to the JOSM. img_syncronized

  4. After those steps is done each photo should have coordinates and altitude above sea level (if altitude above sea level was recorded to .gpx-file). To check this you could use simple program called ExifTool by simply dragging photo on the program icon.

Preliminary photo adjustment and compression

This step could be skipped if you have broadband internet connection with high speed of upload. This step should be done before image direction is calculated because in my case Adobe Lightroom deleted “GPS Img Direction” tag from file header, ignoring the fact that I chose to leave all metadata as is. After import into Adobe Lightroom automatic tone and white balance was done to all photos, then photos exported at the same resolution but with compression to 700 kB and sharpening option for the screen. You could use trial version of Adobe Lightroom, which is free, and continue to work with limited functionality after the trial license expiration date. Tab “Library” still remain active with and you could use “Quick develop” standard presets to do the adjustments. Check out this article for more information. Mapillary team in their instructions recommends to use freeware editor IrfanView, which could do the batch processing of the files.

Setting up Python environment for use of Mapillary Tools scripts.

Prerequisite for this step is installed and properly set up Python programing environment, in our case we would need Python version 2, latest release could be downloaded here. How to properly set up Python could be checked here. Then we would need Mapillary Tools scripts, they could be downloaded from project GitHub page. Unpack archive for example in your user Documents folder. Not entirely full and precise article on how to run Mapillary Tools scripts in Python here. First we need to install a few libraries/packages by means of pip (Python Package Manager) in order for Mapillary Tools scripts to work:

  • exifread – installed by means of pip.
  • gpxpy – installed by means of pip.
  • PIL – installed by means of pip.
  • pyexiv2 – installed using Windows-installer, depending on the version of your Windows OS x32 or x64.

Now in detail:

Run Windows command line, by means of Run menu (Win+R), enter “cmd” into the search field. run_cmd We need to check if Python is working, enter “python” in command line, if everything was set up i.a.w. instruction in the link above, then Python command interpreter should start. You can tell that Python interpreter started by the appearance of “»>” in command line, now you could do simple commands like “print (“All hail OSM”)” and simple math operations. check_if_python_set_up_properly simple_operations_en After we checked that Python set up properly, close the command line and start it again. Then we need to install necessary packages necessary to run Mapillary Tools scripts, namely: exifread, gpxpy, Pillow, pyexiv2 package installed manually by running the installers from the links above. Python (version at the time article was written 2.7.11) by default installed to the following file path: C:\Python27\python.exe. Along with the Python itself, Python Package Manager “pip” installed as well, in my case path to the pip is: C:\Python27\Scripts\pip.exe. In command line change directory to the C:\Python27\Scripts\ in order to run “pip.exe”, for that type in the command line “cd C:\Python27\Scripts\” (path could be simply copied and pasted into command line by right-clicking the mouse over the cmd window, without need to type it manually) change_directory_to_pip Then enter one by one and observe the progress of the packages being downloaded and installed. pip install exifread pip install gpxpy pip install Pillow Because those packages already installed on my system, I only receive message to update the package and the path to witch it was installed: install_packages If everything went well and without errors, then Python environment is ready Mapillary Tools scripts execution.

Calculating the image direction with use of Python scripts.

First I need to mention that Mapillary Tools has a lot of scripts for image processing and further upload to the Mapillary service, including the script to geotag the photos, but not all of them are working or work incorrectly, and author of the scripts mentioned this in the comments to the scripts. For example, I didn’t manage to geotag my photos (currently in correspondence with the scripts developer to resolve the issue), that’s why I described two easier ways to do that in this article. But fortunately, script for calculation of direction photo was shot, in my case, is working and very quickly calculates and writes image direction tag in degrees based on the coordinates of the next photo that was taken in time-lapse sequence. Thus, let’s start calculation of the direction photos were shot. At this step we already have a folder with photos that already has GPS coordinates and time stamps and only thing we need is to enter the path to the script, then to the folder with photos and camera angle offset in regards to the direction we moved. If camera was pointed in same direction to which we moved, then angle offset will be “0”. Scripts are in the archive Mapillary Tools that we downloaded and extracted earlier in the Documents folder. In my case path to the script “interpolate_direction.py”, which we need is: “C:\Users\vfedo\Documents\Mapillary\mapillary_tools-master\python\interpolate_direction.py” Path to the folder with photos: “D:\Mapillary\19.05.2016\backup” Then run the command line and enter: python “C:\Users\vfedo\Documents\Mapillary\mapillary_tools-master\python\interpolate_direction.py” “D:\Mapillary\19.05.2016\backup” 0 (you could use quotation marks or not, it doesn’t matter, but it helps me to outline separate parts of the command) interpolate_direction_script After the script is done its magic we have geotagged photos which has direction of shooting and ready to be uploaded to the Mapillary service. You could check the direction of photos visually in the GeoSetter program by selecting directory with photos and switching from photo to photo by arrow key, this will help to detect the photos which was possibly processed incorrectly by “interpolate_direction.py” script, for example when you wait for the green light GPS-track points will be “dancing” around your real position, due to the GPS unit working principle and possibilities, thus the direction of such images will be calculated improperly, consider deleting such photos from sequence before you upload to Mapillary. Direction could be set after you upload to Mapillary as well, but it will take long to process, (currently service accepts up to 100 changes at time from the editor) and even if you could see that the angle was set for the photo in editor it still points to the north and when you check them in JOSM it’s the same. That’s why to get quality sequence better upload completely ready photos (that include tags: “GPSLongitude”, “GPSLatitude”, “DateTimeOriginal” та “GPSImgDirection” in the exif header). If photos still were uploaded to the server without “GPSImgDirection” tag, it could be corrected in the editor for the whole sequence: enter the editor and check the box to set the direction angle so each photo will be facing next photo in the sequence and if needed specify the offset angle. Offset angle is counted clock-wise in the North-East system of coordinates in range from 0 to 359 degrees. For example, if camera was pointed from left window of the moving car, then angle offset will be 270 degrees (or -90 degrees, which is same direction). While testing, three of mine first sessions were (1, 2, 3) were uploaded without proper tag “GPSImgDirection” and though I edited them on Mapillary they still facing North on the service and in JOSM, maybe Mapillary team will fix that over time. There are upload scripts as well, but in this article I will describe manual upload in the web-browser, so you could see if photos were geotagged and processed correctly.

Uploading to Mapillary

In order to be able to upload photos to Mapillary service you need to create user account. After your successful registration go to the right upper corner and by clicking your user name you could set up your profile, go to your profile or start Manual Uploads. mapillary_user_profile Go the Manual Uploads and press Choose Files, select photos for upload and Mapillary will check them: upload_dialog If all necessary tags are present, then you will see photo sequence connected by line and each photo has the direction arrow: check_before_upload Then press Upload and wait for upload to be finished: press_upload If during upload process the progress shown in percent doesn’t change or your internet connection disconnected, you could continue to upload by pressing “Upload hung up? Click here.” link. upload_hung_up Page will update and show the photos that already uploaded, and the option to upload more photos to the sequence and Publish Sequence or cancel. Select upload more photos to the sequence and choose all photos again, Mapillary will check them, discard the duplicates and offer to upload rest of the photos, showing them on the mini-map with orange points. upload_more_photos_to_this_sequence After upload finished, better to double-check the amount of photos in the folder. Everything seems right 646 photos uploaded. Now you could click Publish Sequence and receive a high five for the good work. Now let’s find out how to use photo data from Mapillary for mapping in OSM. publish_sequence

Using Mapillary service for mapping in OSM

Because we can use photo data from Mapillary to map the objects in OSM, let’s check how to do it with two most popular OSM editors, namely JOSM and iD Editor. ## Using Mapillary with JOSM: In order to use Mapillary service with JOSM and be able to set Mapillary imagery as a layer we need to install pugin of the same name. For that go to the JOSM Preferences (F12)» Plugins tab» Enter Mapillary into the search line. Restart JOSM after plugin installed. install_mapillary_plugin_en After JOSM is started load the map data for the area that has Mapillary coverage. Mapillary coverage could be checked at this web-page, enter your location or zoom in to it, by red lines photo sequences are shown. mapillary_map_coverage I will download an area of my own town, for which I uploaded photo sequence earlier. After OSM map data layer is loaded, Mapillary photo layer could be loaded by going the menu Imagery» Mapillary (or by keyboard shortcut Shift+comma). mapillary_in_josm_en ## Using Mapillary with iD Editor: It is easy to make iD Editor show Mapillary photo layer, just enter the Edit mode for the chosen area, then click on Map Data button (shortcut F) and choose Mapillary photos. After that Mapillary photo layer will appear, showing the photo direction and photo markers which you could click to fix or hover you mouse pointer over them. (screenshot left as in my original post, i.e. iD Editor layout with Ukrainian language) mapillary_in_id_editor

Summary

Mapillary and OSM collaboration plays a big role in both projects development. This How To was created with intention to inspire OSM community to increase Mapillary coverage, because most likely small towns and other places don’t have it, and use of commercially available analogs for mapping in OSM is prohibited.

My Mapillary profile and first proper sequence.

Beautiful gif-animation was created with use of open-source program ScreenToGif.

This is translation of my original article, I am not native English speaker, if you find any mistakes please leave a comment, also share this with your local OSM community and any social network, feel free to use material in the article to translate it into your mother language with reference to this article.

Happy and productive mapping to everyone.

OSM любить Mapillary

Posted by Blackbird27 on 20 May 2016 in Ukrainian (Українська). Last updated on 21 May 2016.

Переглядаючи сторінки спільноти Open Street Map в Google+ наткнувся на статтю про співпрацю Open Street Map та Mapillary. Mapillary – це сервіс обміну фото з геотегами заснований Швецькою компанією Mapillary AB з Мальме. Мета компанії – представити весь світ (а не тільки вулиці) фотографіями за допомогою краудсорсингу. Мене зацікавило те, що геотеговані фотографії можна використовувати для створення даних в OSM, так як вони розповсюджуються по ліцензії CC-BY-SA та наявність втулка для популярного редактора JOSM і можливість підключення шару Mapillary у веб-редакторі iD. Сервіс Mapillary аналог сервісів Google Street View та Yandex Панорами, за виключенням того що користувачі самі наповнюють даний сервіс фото. Сервіс має додатки для телефонів на базі ОС Android, Windows Phone, iOS, BlackBerry OS. Проте зйомка з допомогою телефону серії знімків під час ходьби чи їзди на велосипеді не досить зручна і батарея телефону швидко розряджається, кріплення для телефону може бути не надійне і т.д.. Тому в даній статті я опишу те, як створювати панорами для сервісу з допомогою екшн камери. При використанні додатка Mapillary на телефоні, exif-теги необхідні для геолокації знімка (координати та напрям зйомки), записуються автоматично, так як телефон має вбудований компас та GPS. Екшн камери зазвичай не мають вбудованого GPS приймача (як наприклад Sony Action Cam HDR-AS30v), тому нам знадобиться GPS трек для ручної геолокації знімків.

Що нам знадобиться:

  1. Екшен камера з кріпленням (присоскою) для автомобіля або велосипеда, з можливістю зйомки фото з інтервалами (time-lapse). Я використовував дешеву та сердиту Xiaomi Yi Action Camera.
  2. Пристрій з можливістю запису GPS треку. Це може бути або GPS логгер, або телефон з GPS, або зв’язка двох пристроїв. Я використовую GPS логгер HOLUX RCV-3000 з’єднаний з телефоном по блютузу та встановлений на телефон OSMTracker (Android) для запису GPX трека. При “правильному” розміщенні супутників HOLUX RCV-3000 здатен видавати GPS дані з точністю до 1,7 метра.
  3. Трохи танців з бубном навколо Пітона (Python), широкосмуговий доступ до мережі інтернет для ручного завантаження знімків на Mapillary.

Тепер детальніше:

Запускаєм GPS пристрій, залишаємо його на місці до фіксації супутників (для кращої точності), після фіксації GPS починаємо запис GPS треку, запускаємо камеру на зйомку в режимі time-lapse і рухаємось по вулицях/місцях, для яких хочемо створити панораму, після завершення експортуємо дані з OSMTracker в .gpx-файл. Для велосипеду я вибрав інтервал зйомки 2с, для автомобіля який рухається швидше, є сенс вибрати менший інтервал, вищезгадана камера підтримує інтервал до 0,5 секунди. В моєму випадку я переконуюся, що годинник моєї камери синхронізовано з телефоном, а в налаштуваннях OSMTracker вибрана опція ігнорувати час GPS та використовувати час телефону для часових міток. скріншот OSMTracker Таким чином знімки з камери та часові мітки в .gpx-файлі будуть в однаковому часовому поясі та уже синхронізовані, якщо цього не зробити, то кореляцію можна провести пізніше при синхронізації знімків з GPS треком. Як результат отримали послідовність знімків та .gpx-файл записаного треку. Для зручності створюємо теку з поточною датою куди копіюємо наші знімки та .gpx-файл. В даній теці бажано створити теку “backup” куди також скопіювати наші знімки, як резервну копію, якщо щось піде не так. # Прив’язка знімків до GPS координат Існує багато способів прив’язати знімки до GPS координат, від використання Windows-програм до використання Python-скриптів чи бібліотек Ruby Gems на Linux-системах. Я опишу два найпростіших: ## Прив’язка за допомогою старого доброго JOSM: Я використовую даний спосіб, простий і швидкий.

  1. Для запису координат до exif-даних знімків після їх синхронізації з gpx-треком у JOSM нам спочатку потрібно встановити втулок Photo Geotagging. Для цього заходимо в Налаштування JOSM (F12)» вкладка Втулки» Вводимо в рядок пошуку “ geotag ” та обираємо втулок, після встановлення втулка бажано перезапустити JOSM. photo_geotagging

  2. Запускаємо JOSM»Відкриваємо наш .gpx-файл та додаємо наші зображення до GPS-треку, задаємо зміщення 0, так як наш gpx-трек записаний за місцевим часом (часом телефону), якщо ж трек записаний без попередньої корекції (GPS-час в UTC 0:00), то необхідно підібрати зміщення місцевого часового поясу відносно Гринвіча. open_gpx_and_photos

  3. Далі просто правою клавішею викликаємо меню на шарі “Зображення з геотегами” та обираємо пункт “Записати координати в заголовок зображення”, тиснемо так. Додатково можна поставити галочку на пункті “зберегти резервні копії”, якщо знімки не було зарезервовано раніше. Збереження змін дуже швидке. save_photos

  4. Після даних операцій кожен знімок повинен містити координати та висоту над рівнем моря, якщо даний параметр наявний в .gpx-файлі. Перевірити можна з допомогою простого додатка ExifTool просто перетягнувши файл знімку на іконку програми. file_check

Альтернативний спосіб з допомогою freeware-програми GeoSetter

  1. Запускаємо GeoSetter та в рядку вибору каталогів вибираємо каталог зі знімками, які ми хочемо прив’язати до координат. open_photos_geosetter

  2. Виділяємо всі знімки в каталозі (Ctrl+A) та натискаємо на іконку “Синхронізувати геодані вибраних знімків з геоданими GSP-файлів” (Ctrl+G), після чого з’явиться діалогове вікно для вибору GPS-треку, та налаштування параметрів синхронізації. select_img_and_syncronize

  3. Обираємо .gpx-файл для синхронізації (якщо трек в тому ж каталозі, що і зображення, обирати не потрібно), якщо необхідно обираємо параметри зміщення та натискаємо Ok. Якщо часові мітки знімків та .gpx-файлу знаходяться в одному часовому поясі, то програма повідомить нам, що GPS-дані були знайдені для певної кількості знімків. Якщо не було знайдено знімків, які відповідають часовим міткам .gpx-файлу, то необхідно встановити зміщення часового поясу. Після синхронізації не забуваємо зберегти геотеги до знімків, натиснувши на іконку дискети або комбінацію (Ctrl+S). Збереження проходить значно довше ніж в JOSM. img_syncronized

  4. Після даних операцій кожен знімок повинен містити координати та висоту над рівнем моря, якщо даний параметр наявний в .gpx-файлі. Перевірити можна з допомогою простого додатка ExifTool просто перетягнувши файл знімку на іконку програми.

Попереднє стиснення зображень

Даний крок можна пропустити при наявності якісного широкосмугового доступу до інтернет з високою швидкістю відвантаження. Даний крок потрібно виконати до розрахунку напряму зображення, так як в моєму випадку Adobe Lightroom видалив тег GPS Img Direction з шапки файлу зображення, незважаючи на те, що при збережені був вибраний пункт збереження всіх метаданих. Після імпорту в Adobe Lightroom було виконано автоматичну корекцію одного зображення, після чого дані корекції скопійовані на інші зображення, далі зображення експортовано зі стисненням розміру до 700 кБ без зміни роздільної здатності та збільшення чіткості для екрану. Команда Mapillary в своїх інструкціях рекомендує використання freeware редактора IrfanView для масової обробки файлів. # Налаштування середовища Python для роботи зі скриптами Mapillary Tools Передумовою даного кроку є установлене та правильно налаштоване середовище програмування Python, в нашому випадку нам потрібен Python версії 2, крайній реліз можна завантажити тут. Як правильно налаштувати Python можна прочитати тут англійською. Далі нам будуть потрібні скрипти Mapillary Tools, завантажити їх можна з GitHub тут. Архів бажано розпакувати на диску С в теку Документи користувача, так як диск С є робочим середовищем для Python. Не зовсім повна та коректна стаття про те як запускати скрипти на Python для Mapillary знаходиться тут. Далі для правильної роботи скриптів Mapillary Tools, попередньо доведеться встановити декілька бібліотек/пакунків через pip (Менеджер встановлення пакунків), а саме:

  • exifread – встановлюється через pip.
  • gpxpy – встановлюється через pip.
  • PIL – встановлюється через pip.
  • pyexiv2 – встановлюється через встановлювач Windows в залежності від версії системи x32 або x64.

Далі детальніше:

Запускаємо командний рядок, через команду Виконати (Win+R), в поле вводимо “cmd” run_cmd Перевіряємо чи працює середовище Python, вводимо в командному рядку “python”, якщо все налаштовано згідно інструкцій в посиланні вище, то повинен запуститися інтерпретатор Python. Про запуск інтерпретатора Python свідчить поява »> в командному рядку, тепер можна виконувати прості команди такі як “print (“Слава OSM”)” та прості математичні операції. check_if_python_set_up_properly simple_operations Коли впевнилися, що середовище Python налаштоване правильно закриваємо дане вікно та повторно запускаємо командний рядок. Далі встановлюємо пакунки необхідні для запуску скриптів Mapillary Tools, а саме: exifread, gpxpy, Pillow, бібліотеку pyexiv2 встановлюємо вручну за посиланнями наданими вище. Python (поточна версія 2.7.11) за замовчуванням встановлюється за таким шляхом C:\Python27\python.exe. Разом з Python інсталюється Менеджер встановлення пакунків “pip”, в моєму випадку його було встановлено в C:\Python27\Scripts\pip.exe. В командному рядку переходимо в теку C:\Python27\Scripts\, щоб задіяти можливості “pip.exe”, для цього набираємо в командному рядку “cd C:\Python27\Scripts\ (шлях можна просто скопіювати та вставити в командний рядок натисканням правої клавіші миші): change_directory_to_pip Далі вводимо послідовно та спостерігаємо за процесом встановлення пакунків: pip install exifread pip install gpxpy pip install Pillow Так як дані пакунки уже встановлені в моєму середовищі Python, то з’являється тільки пропозиція оновити дані пакунки: install_packages Якщо все пройшло без помилок то середовище Python тепер готове до роботи зі скриптами Mapillary Tools.

Розрахунок напрямку зйомки зображення з допомогою скриптів Python

Спочатку хочу сказати, що Mapillary Tools містить багато скриптів для обробки зображень та для завантаження на сервіс Mapillary, в тому числі і скрипт для прив’язки зображень до GPS координат, проте деякі з них не працюють або працюють неправильно, про що автор скриптів і написав у коментарях даних скриптів. Так наприклад мені не вдалося прив’язати зображення до GPS координат, тому я і описав два простіших способи раніше у статті. Але скрипт для визначення напряму зйомки шляхом інтерполяції в моєму випадку працює і швидко задає напрям зйомки фото у градусах базуючись на координатах наступного знімка в серії time-lapse. Отже, перейдемо до встановлення напрямку зйомки. На даному етапі у нас є тека зі знімками, які уже мають координати та часові мітки, тому все що нам потрібно це вказати шлях до скрипта, шлях до теки зі знімками та зміщення камери відносно напряму руху. Якщо камера напрямлена в напрямку руху, то зміщення буде “0” Скрипти знаходяться в папці python завантаженого раніше архіву Mapillary Tools. В моєму випадку шлях до скрипта “interpolate_direction.py”, який нам потрібен наступний: “C:\Users\vfedo\Documents\Mapillary\mapillary_tools-master\python\interpolate_direction.py” Шлях до теки зі знімками наступний: “D:\Mapillary\19.05.2016\backup” Далі запускаємо командний рядок та вводимо наступне: python “C:\Users\vfedo\Documents\Mapillary\mapillary_tools-master\python\interpolate_direction.py” “D:\Mapillary\19.05.2016\backup” 0 interpolate_direction_script Після закінчення роботи скрипта отримали знімки з прив’язкою до GPS координат та напрямом зйомки, які готові до завантаження на сервіс Mapillary. Наглядно напрям знімків можна перевірити в програмі GeoSetter, просто обравши каталог зі знімками та переходячи між файлами стрілками клавіатури, це дозволить знайти знімки, які були оброблені не коректно скриптом interpolate_direction.py, наприклад при простої перед світлофором точки GPS-треку будуть “танцювати” навколо вашої реальної позиції, тому і напрям знімків буде визначено помилково. Дану операцію можна виконати і через сервіс Mapillary, і це стосується саме послідовності знімків зроблених при русі на велосипеді/пішки/автомобілем, але обробка займає багато часу і мої знімки хоч і мають правильний кут в редакторі Mapillary, при перегляді все-одно напрямлені на північ (за замовчуванням) те ж саме при перегляді в JOSM, тому краще завантажувати повністю підготовлені знімки (з необхідними тегами: “GPSLongitude”, “GPSLatitude”, “DateTimeOriginal” та “GPSImgDirection”. Якщо ж зображення все-таки були завантажені без тега “GPSImgDirection”, це можна виправити. Для цього потрібно зайти в редактор зображень Mapillary та вибрати опції послідовності зображень, щоб кожне зображення орієнтувалося в напрямку позиції наступного зображення та виставити кут відхилення від напрямку руху, якщо камера була направлена не за напрямком руху. Відлік кута відхилення іде за часовою стрілкою в системі Північ-Схід в діапазоні від 0 до 359 градусів. Наприклад коли камера була напрямлена в ліве вікно автомобіля, то зміщення камери відносно напряму руху буде 270 градусів (або -90). При тестуванні три моїх послідовності знімків (1, 2, 3) були завантажені без належного тегу “GPSImgDirection” і хоча й була вибрана вищезгадана опція, знімки все-одно направлені на північ, як на сервісі так і в JOSM. Для завантаження на сервіс також є скрипти, але в даній статті буде розглянуто ручне завантаження через веб-браузер, так як буде видно чи правильно оброблені знімки.

Завантаження на Mapillary

Для завантаження на Mapillary спочатку потрібно створити обліковий запис на даному сервісі. Після успішної реєстрації заходимо на сторінку Mapillary та у правому верхньому кутку буде ім’я користувача вибране при реєстрації. Натиснувши на ім’я користувача можна налаштувати профіль користувача, перейти до профілю користувача та перейти до Ручних Завантажень. mapillary_user_profile Переходимо в розділ ручних завантажень, та натискаємо Вибір файлів (Choose Files), вибираємо зображення для завантаження після чого Mapillary перевіряє зображення: upload_dialog Якщо всі необхідні теги присутні, то ви побачите послідовність знімків з’єднаних лінією, кожне зображення матиме стрілочку яка вказує напрям: check_before_upload Далі тиснемо Відвантажити і чекаємо доки знімки передадуться на сервер Mapillary. press_upload Якщо під час відвантаження не змінюється відсоток відвантажених знімків, або ж обірвалося з’єднання з мережею інтернет, завантаження можна продовжити, натиснувши на посилання “Upload hung up? Click here.” upload_hung_up Сторінка оновиться і буде показано знімки, які уже відвантажені на сервер при цьому потрібно знову вибрати усі знімки, сервіс перевірить їх та відкине усі знімки, які уже відвантажено, та запропонує відвантажити знімки які лишилися, показавши їх положення на міні-карті оранжевими прапорцями. upload_more_photos_to_this_sequence Після завантаження всіх знімків, кількість у відвантаженій послідовності бажано звірити з кількістю файлів у каталозі зі знімками. Все правильно 646 знімків завантажено. Тепер можна натискати на кнопку Опублікувати послідовність (Publish Sequence) і отримуємо віртуальний “Дай п’ять” за гарну роботу. Тепер розберемося як використовувати дані з Mapillary для картографії OSM. publish_sequence

Використання сервісу Mapillary для картографії в OSM.

Так як дані з Mapillary можна використовувати для нанесення об’єктів OSM, то розглянемо як це можна зробити у двох найпопулярніших редакторах даних OSM, а саме JOSM та iD Editor. ## Використання Mapillary в JOSM: Для використання сервісу Mapillary в JOSM з можливістю відображення геотегованих зображень як шару, спочатку потрібно встановити однойменний втулок. Для цього заходимо в Налаштування JOSM (F12)»вкладка Втулки»в рядок пошуку вводимо Mapillary. Після встановлення втулка перезавантажте JOSM. install_mapillary_plugin Після запуску JOSM завантажуємо дані мапи з сервера OSM для ділянки де є покриття Mapillary. Покриття можна перевірити на веб-сторінці сервісу Mapillary, через пошук на інтерактивній карті, зеленим кольором зображені послідовності знімків. На жаль, на даний момент покриття є для частини обласних центрів України. mapillary_map_coverage Я завантажу область рідного смт, для якої я відвантажував геотеговані послідовності знімків. Після завантаження шару даних мапи OSM, шар знімків Mapillary можна завантажити з меню Фон»Mapillary (або комбінацією клавіш Shift+comma). mapillary_in_josm ## Використання Mapillary в iD Editor: Для підключення шару Mapillary в iD Editor потрібно просто зайти в режим редагування обраної ділянки та натиснути на іконку меню Дані мапи (комбінація клавіш F) та обрати Фото-шар (Mapillary). Після цього з’явиться шар знімків Mapilary з напрямом та можливістю натискати на прапорець для фіксації зображення. mapillary_in_id_editor

Висновок

Співпраця Mapillary та OSM має велике значення для обох проектів. Дане керівництво створювалось з метою надихнути спільноту OSM Україна на збільшення покриття Mapillary на території України, для заповнення прогалини Yandex Панорам, що доступні тільки для обласних центрів та міжнародних трас і дозвіл на використання яких для OSM, завжди може бути припиненим.

Посилання на мій профіль Mapillary та першу вдало створену послідовність фото.

Чудова gif-анімація була створена за допомогою open-source програми ScreenToGif.

Якщо помітили помилку в статті прошу повідомити.

Всім веселого та продуктивного мапінгу.