• Stars
    star
    193
  • Rank 197,063 (Top 4 %)
  • Language
    JavaScript
  • License
    GNU Affero Genera...
  • Created almost 8 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A lightweight REST API to access aerial image processing engines such as ODM or MicMac

NodeODM

Build Status

NodeODM is a standard API specification for processing aerial images with engines such as ODM. The API is used by clients such as WebODM, CloudODM and PyODM. This repository contains a performant, production-ready reference implementation written in NodeJS.

image

Getting Started

We recommend that you setup NodeODM using Docker.

  • From the Docker Quickstart Terminal (Windows / OSX) or from the command line (Linux) type:
docker run -p 3000:3000 opendronemap/nodeodm
  • If you're on Windows/OSX, find the IP of your Docker machine by running this command from your Docker Quickstart Terminal:
docker-machine ip

Linux users can connect to 127.0.0.1.

  • Open a Web Browser to http://<yourDockerMachineIp>:3000
  • Load some images
  • Press "Start Task"
  • Go for a walk :)

If the computer running NodeODM is using an old or 32bit CPU, you need to compile OpenDroneMap from sources and setup NodeODM natively. You cannot use docker. Docker images work with CPUs with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3 instruction set support or higher. Seeing a Illegal instruction error while processing images is an indication that your CPU is too old.

Running rootless

  • A rootless alternative to Docker is using Apptainer. In order to run NodeODM together with ClusterODM in rootless environments, for example on HPC, we need a rootless alternative to Docker, and that's where Apptainer comes in to play. From the Linux command line, cd into the NodeODM folder and run the following commands to host a NodeODM instance:
apptainer build --sandbox node/ apptainer.def
apptainer run --writable node/ 

apptainer build --sandbox requires you to have root permission to build this apptainer container. Make sure someone with root permission build this for you. You will need to build this apptainer container if you want to work with ClusterODM on the HPC. Check for ClusterODM for more instructions on using SLURM to set it up.

An apptainer.def file can be built directly from the dockerfile as needed:

pip3 install spython
spython recipe Dockerfile &> apptainer.def

API Docs

See the API documentation page.

Some minor breaking changes exist from version 1.x to 2.x of the API. See migration notes.

Run Tasks from the Command Line

You can use CloudODM to run tasks with NodeODM from the command line.

Using an External Hard Drive

If you want to store results on a separate drive, map the /var/www/data folder to the location of your drive:

docker run -p 3000:3000 -v /mnt/external_hd:/var/www/data opendronemap/nodeodm

This can be also used to access the computation results directly from the file system.

Using GPU Acceleration

Since ODM has support for GPU acceleration you can use another base image for GPU processing. You need to use the opendronemap/nodeodm:gpu docker image instead of opendronemap/nodeodm and you need to pass the --gpus all flag:

docker run -p 3000:3000 --gpus all opendronemap/nodeodm:gpu

The GPU implementation is CUDA-based, so will only work on NVIDIA GPUs.

If you have an NVIDIA card, you can test that docker is recognizing the GPU by running:

docker run --rm --gpus all nvidia/cuda:10.0-base nvidia-smi

If you see an output that looks like this:

Fri Jul 24 18:51:55 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.82       Driver Version: 440.82       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |

You're in good shape!

See https://github.com/NVIDIA/nvidia-docker and https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker for information on docker/NVIDIA setup.

Windows Bundle

NodeODM can run as a self-contained executable on Windows without the need for additional dependencies (except for ODM which needs to be installed separately). You can download the latest nodeodm-windows-x64.zip bundle from the releases page. Extract the contents in a folder and run:

nodeodm.exe --odm_path c:\path\to\ODM

Run it Natively

If you are already running ODM on Ubuntu natively you can follow these steps:

  1. Install Entwine: https://entwine.io/quickstart.html#installation

  2. Install node.js, npm dependencies, 7zip and unzip:

sudo curl --silent --location https://deb.nodesource.com/setup_6.x | sudo bash -
sudo apt-get install -y nodejs python-gdal p7zip-full unzip
git clone https://github.com/OpenDroneMap/NodeODM
cd NodeODM
npm install
  1. Start NodeODM
node index.js

You may need to specify your ODM project path to start the server:

node index.js --odm_path /home/username/OpenDroneMap

If you want to start node ODM on a different port you can do the following:

node index.js --port 8000 --odm_path /home/username/OpenDroneMap

For other command line options you can run:

node index.js --help

You can also specify configuration values via a JSON file:

node index.js --config config.default.json

Command line arguments always take precedence over the configuration file.

Run it using PM2

The app can also be run as a background process using the pm2 process manager, which can also assist you with system startup scripts and process monitoring.

To install pm2, run (using sudo if required):

npm install pm2 -g

The app can then be started using

pm2 start processes.json

To have pm2 started on OS startup run

pm2 save
pm2 startup

and then run the command as per the instructions that prints out. If that command errors then you may have to specify the system (note that systemd should be used on CentOS 7). Note that if the process is not running as root (recommended) you will need to change /etc/init.d/pm2-init.sh to set export PM2_HOME="/path/to/user/home/.pm2", as per these instructions

You can monitor the process using pm2 status.

Test Mode

If you want to make a contribution, but don't want to setup OpenDroneMap, or perhaps you are working on a Windows machine, or if you want to run automated tests, you can turn test mode on:

node index.js --test

While in test mode all calls to OpenDroneMap's code will be simulated (see the /tests directory for the mock data that is returned).

Test Images

You can find some test drone images here.

What if I need more functionality?

NodeODM is meant to be a lightweight API. If you are looking for a more comprehensive solution to drone mapping, check out WebODM, which uses NodeODM for processing.

Contributing

Make a pull request for small contributions. For big contributions, please open a discussion first. Please use ES6 syntax while writing new Javascript code so that we can keep the code base uniform.

Roadmap

See the list of wanted features.

More Repositories

1

ODM

A command line toolkit to generate maps, point clouds, 3D models and DEMs from drone, balloon or kite images. 📷
Python
4,603
star
2

WebODM

User-friendly, commercial-grade software for processing aerial imagery. 🛩
JavaScript
2,662
star
3

FIELDimageR

FIELDimageR: A R package to analyze orthomosaic images from agricultural field trials. This package is a compilation of functions to analyze pos-mosaicking images from research fields, and allows to: crop the image; remove soil effect; build vegetation indices; rotate the image; build the plot shapefile; extract information for each plot; and evaluate stand count, canopy percentage, and plant height.
R
220
star
4

Obj2Tiles

Converts OBJ files to OGC 3D tiles by performing splitting, decimation and conversion
C#
194
star
5

ODMdata

Example data for OpenDroneMap: https://OpenDroneMap.org sourced from a variety of sources
134
star
6

PyODM

A Python SDK for adding aerial image processing capabilities to your applications 🔌
Python
91
star
7

dem2mesh

Quickly generate 2.5D meshes from elevation models.
C++
81
star
8

ClusterODM

A NodeODM API compatible autoscalable load balancer and task tracker for easy horizontal scaling ♆
JavaScript
80
star
9

NodeMICMAC

A Lightweight REST API to Access MICMAC Photogrammetry and SFM Engine.
JavaScript
78
star
10

CloudODM

A command line tool to process aerial imagery in the cloud. 🌩
Go
60
star
11

LiveODM

Live DVD/USB ISO with ODM, node-ODM and WebODM pre-installed.
Shell
49
star
12

pypopsift

Python module for CUDA accelerated SIFT on GPUs
C++
32
star
13

docs

🎉 Contribute to OpenDroneMap's documentation! Read how below! 🎉
Python
25
star
14

python-WebODM

Python client for WebODM API
Python
22
star
15

UAVArena

Drone mapping software outputs compared side by side! Which will win? ⚔️
JavaScript
20
star
16

odm_vagrant

Vagrant machine for using OpenDroneMap
19
star
17

posm-gcpi

Ground Control Point interface (GCPi) for OpenDroneMap
JavaScript
15
star
18

dem2points

Extract 3D points from digital elevation models
C++
13
star
19

ODMSemantic3D

An open photogrammetry dataset of classified 3D point clouds for automated semantic segmentation. CC BY-SA 4.0
Shell
12
star
20

odm_orthophoto

ODM Orthophoto Module - Rasterize Textured 3D Models to PNG
C++
10
star
21

SkyRemoval

Create sky masks to improve photogrammetric reconstruction
Python
10
star
22

odm_data_aukerman

10
star
23

FPCFilter

Fast Point Cloud Filtering
C++
10
star
24

orthorectify

Orthorectify images from ODM reconstruction
C++
9
star
25

awesome-aerial-mapping

Awesome resources for learning about aerial mapping
8
star
26

odm-benchmarks

Benchmark data index for OpenDroneMap and WebODM
JavaScript
8
star
27

airsim-generator

Generate synthetic drone photos and elevation models from Microsoft AirSim
Python
8
star
28

odm_data_zoo

7
star
29

presentations

JavaScript
7
star
30

oats

OpenDroneMap Automated Testing Suite
Shell
6
star
31

RSCalibration

Docs and scripts to estimate a camera's rolling shutter readout time
HTML
6
star
32

WebODM-Locale

Localization files for WebODM
5
star
33

odm_data_langley

OpenDroneMap Langley dataset
5
star
34

opendronemap-ecs

Serverless API to get opendronemap tasks running on AWS Elastic Container Service (ECS)
JavaScript
5
star
35

odm-start-deprecated

Tutorial / Startup doc for using OpenDroneMap
4
star
36

odm_data_bellus

4
star
37

odm_data_copr

odm_data copr dataset
3
star
38

odm_data_garfield_msp

3
star
39

odm_data_lewis

Lewis Road Riding Arena Flight
2
star
40

odm_data_caliterra

Submodule of ODM data for Caliterra dataset
2
star
41

odm_data_seneca

OpenDroneMap Seneca dataset
2
star
42

images2geojson

Convert OpenDroneMap's images.json image database to GeoJSON point collections.
JavaScript
2
star
43

odm_data_benchmark

OpenDroneMap benchmark dataset
2
star
44

WestCreekPleasantValley

Stream topography drone flight, taken with GoPro Hero 4 (3.37mm lens) on 3DR Solo
2
star
45

odm_data_helenenschacht

2
star
46

syntheticDSM

Synthetic georeferenced DSM files to verify volume calculation accuracy
2
star
47

wiki-assets

1
star
48

multispectral-docs

Resources for getting started in multispectral processing
1
star
49

opendronemap.github.io

1
star
50

odm_data_apt

Trail (sidewalk) OpenDroneMap test dataset
1
star
51

UAVArena-data

Tilesets for the UAVArena Web Application
1
star
52

WebODM-Plugins-Archive

Plugins waiting for a hero to fix them
JavaScript
1
star
53

odm_data_toledo

1
star
54

documents

The transparent bylaws, policies and rules of OpenDroneMap ⚖️
1
star
55

odm_data_waterbury

1
star
56

odm_data_rv_nir

1
star