Code Monkey home page Code Monkey logo

eventemin's Introduction

EventEMin

License: CC BY-NC-SA 4.0

Code for the following papers:

The authors provide this code in the hope it will be useful for understanding the proposed method, as well as for reproducibility of the results.

For more information and more open-source software please visit the Personal Robotic Lab's website: https://www.imperial.ac.uk/personal-robotics/.

Requirements

This code was tested on Ubuntu 16.04, 18.04 and 20.04 distros.

Dependencies

sudo apt install cmake cmake-curses-gui
git clone https://gitlab.com/libeigen/eigen.git
cd eigen
mkdir build && cd build
cmake ..
sudo make install

or

sudo apt install libeigen3-dev

This repo was originally developed using Eigen 3.3.7. Currently, there are some compilation issues between Eigen 3.4.0 and the AutoDiff module. So, you should compile this repo with at most Eigen 3.3.9.

git clone https://github.com/ampl/gsl.git
cd gsl
./configure
sudo make install
sudo apt install libomp-dev

General

git clone https://github.com/ImperialCollegeLondon/EventEMin.git
cd EventEMin
mkdir build && cd build
cmake .. <cmake arguments>

The cmake arguments can be set as follows:

-DEventEMin_BATCH_MODE=ON/OFF
                            Build batch mode.
                            (default: OFF)
-DEventEMin_INCREMENTAL_MODE=ON/OFF
                            Build incremental mode.
                            (default: OFF)
-DEventEMin_FAST_EXP=ON/OFF
                            Use fast exponentiation.
                            (default: ON)
-DEventEMin_USE_OPENMP=ON/OFF
                            Uses the OpenMP library for parallelization.
                            (default: ON)

Lastly, ensure all environment path variables are well set, and compile everything:

make

ROS

A ROS package for real-time incremental estimation can be found on the following repository: https://github.com/ImperialCollegeLondon/event_emin_ros.

Datasets

We provide samples in the dataset folder, corresponding to some results obtained in the paper. Most of the examples provided work with these samples, so you are not required to download any dataset.

Examples

The source files are located in the test directory and the binary files will be located in the bin directory. We provide estimation examples per model, and the dispersion measure to be used can be chosen on the corresponding source file. Please note that the exact entropy-based measures have quadratic complexity with the number of events and the respective examples are expected to take longer (especially if you do not use OpenMP).

Batch Mode

For each example, two images should be seen, corresponding to the original events and the transformed events, according to the estimated parameters, accumulated on the image plane. The status of the optimisation procedure should be displayed in the following format:

iteration, restart iteration: score, gradient magnitude
gradient
parameters

In the end, the estimated parameters are also displayed.

2D Translation Estimation

To run the example, on a terminal type:

./example_translation2d

Rotation Estimation

To run the example, on a terminal type:

./example_rotation

Motion Estimation in Planar Scenes

To run the example, on a terminal type:

./example_homography

6-DOF in 3D

To run the example, on a terminal type:

./example_6dof

Incremental Mode

For each example, two images should be seen, corresponding to the original events and the transformed events, according to the estimated parameters, accumulated on the image plane. The timestamp and corresponding estimates should be displayed in the following format:

ts: timestamp, v: motion parameter estimates

In the end, the estimated parameters are also displayed.

2D Translation Estimation

To run the example, on a terminal type:

./example_incremental_translation2d

Rotation Estimation

To run the example, on a terminal type:

./example_incremental_rotation

6-DOF in 3D

To run the example, on a terminal type:

./example_incremental_6dof

Test Sequences

To run the sequences test, you need to download at least one sequence of the dataset provided in http://rpg.ifi.uzh.ch/davis_data.html.

Batch Mode

2D

To run the test, on a terminal type:

./example_test_sequence <path-to-events-dir> <batch-size> <path-to-estimates-saving-dir> <estimates-file-name>

The executable arguments are as follows:

  • path-to-events-dir: Path to the events' directory, following the format proposed in http://rpg.ifi.uzh.ch/davis_data.html, e.g. /poster_rotation. The events' directory must contain two files, namely, events.txt (list of events) and calib.txt (camera parameters). Please check the folders under dataset for examples.
  • batch-size: Number of events of each batch, e.g. 20000.
  • path-to-estimates-saving-dir: Path to where the estimates are to be stored, e.g. /poster_rotation/estimates.
  • estimates-file-name: File name of the estimates, e.g. approx_tsallis_2.

For example, if you downloaded the poster_rotation sequence and stored it under foo directory, by running

./example_test_sequence /foo/poster_rotation 20000 /foo/poster_rotation/estimates approx_tsallis_2

a file containig the estimates using the Approx. Tsallis measure should be created under the /foo/poster_rotation/estimates directory (/estimates directory should be created before running the command).

3D

To run the test, on a terminal type:

./example_test_sequence_3d <path-to-events-dir> <batch-size> <minimum-depth> <maximum-depth> <path-to-estimates-saving-dir> <estimates-file-name>

The additional executable arguments are as follows:

  • minimum-depth: Minimum depth of the depth-augmented events.
  • maximum-depth: Maximum depth of the depth-augmented events.

The rest of the arguments are the same as previously. The events should already be undistorted and augmented with depth. See indoor_flying1 for an example.

Incremental Mode

2D

To run the test, on a terminal type:

./example_incremental_test_sequence <path-to-events-dir> <number-events> <path-to-estimates-saving-dir> <estimates-file-name>

The executable arguments are as follows:

  • path-to-events-dir: Path to the events' directory, following the format proposed in http://rpg.ifi.uzh.ch/davis_data.html, e.g. /poster_rotation. The events' directory must contain two files, namely, events.txt (list of events) and calib.txt (camera parameters). Please check the folders under dataset for examples.
  • number-events: Number of the most recent events to maintain, e.g. 10000.
  • path-to-estimates-saving-dir: Path to where the estimates are to be stored, e.g. /poster_rotation/estimates.
  • estimates-file-name: File name of the estimates, e.g. incremental_potential.

For example, if you downloaded the poster_rotation sequence and stored it under foo directory, by running

./example_incremental_test_sequence /foo/poster_rotation 10000 /foo/poster_rotation/estimates incremental_potential

a file containig the estimates using the Incremental Potential measure should be created under the /foo/poster_rotation/estimates directory (/estimates directory should be created before running the command).

3D

To run the test, on a terminal type:

./example_incremental_test_sequence_3d <path-to-events-dir> <number-events> <minimum-depth> <depth-scale> <path-to-estimates-saving-dir> <estimates-file-name>

The additional executable arguments are as follows:

  • minimum-depth: Minimum depth of the depth-augmented events.
  • depth-scale: Depth scaling factor.

The rest of the arguments are the same as previously. The events should already be undistorted and augmented with depth. See indoor_flying1 for an example.

Compute Errors

To compute the errors for rotational motion estimation, run the MATLAB script sequence_error.m.

License

The EventEMin code is licensed under CC BY-NC-SA 4.0. Commercial usage is not permitted.

eventemin's People

Contributors

shiba24 avatar umgnunes avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

eventemin's Issues

fatal error: gsl/gsl_bst.h

avl.c:29:10: fatal error: gsl/gsl_bst.h: 没有那个文件或目录
29 | #include <gsl/gsl_bst.h>
| ^~~~~~~~~~~~~~~
compilation terminated.

Issue running example

Hi,

Thank you for your code.

I am trying it out and I managed to install everything with no problems.
However, I am trying to run the sequences test in batch mode, as written in readme:
[ ~/EventEMin/bin$ ./example_test_sequence ../dataset/poster_rotation 20000 ../dataset/poster_rotation/estimates approx_tsallis_2 ]
and nothing happens, only a blank txt document is created ( EventEMin/dataset/poster_rotation/estimates/approx_tsallis_2_estimates.txt ).

I ran cmake like this: cmake .. -DEventEMin_BATCH_MODE=ON
Running examples such as ./example_rotation seems to work well.

Am I doing something wrong?

how to add an additional column to the event.txt

hi!
thank you for your excellent code!
I want to run your 6dof code with another dataset, but how can I add an additional column corresponding to the depth of each event to every row in the event.txt file?

Build on MacOS

Hi authors, thank you for providing such great code!

I have a question about your environment. I trying to build on my Mac. I understand you haven't tested it and building on Mac is sometimes not straightforward than Ubuntu.
But let me try it ... I am facing some (probably version?) error in build. So basically I'd like to know which version you are actually using.

Environment

I have:

  • cmake 3.21.3
  • Eigen 3.4.0_1
  • gsl 2.7

Error

tl;dr

The error that I'm facing is two types. The first one is

EventEMin/include/dispersion/approx_entropy/approx_entropy.h:116:5: error: no matching function for call to 'gaussKernel'

And the second one is

EventEMin/include/dispersion/approx_entropy/approx_entropy.h:171:33: error: non-type template argument is not a constant expression

I took a look into the second one and found this and this. And that's why I guessing some version problem - especially around C++.

Could you provide your tested environment version information if you can?

The full error log:


Consolidate compiler generated dependencies of target example_approx_entropy_homography
[ 43%] Building CXX object test/CMakeFiles/example_approx_entropy_homography.dir/main_approx_entropy_homography.cpp.o
In file included from /Users/shintaro/work/tub/EventEMin/test/main_approx_entropy_homography.cpp:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion.h:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion/approx_entropy/approx_potential.h:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion/approx_entropy/approx_entropy.h:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/convolution.h:7:
In file included from /usr/local/include/eigen3/Eigen/Core:176:
/usr/local/include/eigen3/Eigen/src/Core/arch/Default/Half.h:537:9: warning: compound literals are a C99-specific feature [-Wc99-extensions]
  h.x = _cvtss_sh(ff, 0);
        ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.0.0/include/f16cintrin.h:69:54: note: expanded from macro '_cvtss_sh'
  (unsigned short)(((__v8hi)__builtin_ia32_vcvtps2ph((__v4sf){a, 0, 0, 0}, \
                                                     ^
In file included from /Users/shintaro/work/tub/EventEMin/test/main_approx_entropy_homography.cpp:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion.h:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion/approx_entropy/approx_potential.h:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion/approx_entropy/approx_entropy.h:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/convolution.h:8:
In file included from /usr/local/include/eigen3/unsupported/Eigen/CXX11/Tensor:69:
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h:44:36: warning: unused parameter 'val' [-Wunused-parameter]
  EIGEN_DEVICE_FUNC void set(Index val) {
                                   ^
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h:60:54: warning: unused parameter 'val' [-Wunused-parameter]
  EIGEN_DEVICE_FUNC void set(const IndexPair<Index>& val) {
                                                     ^
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h:276:49: warning: unused parameter 'i' [-Wunused-parameter]
  EIGEN_DEVICE_FUNC static void set(const Index i, IndexTuple<T...>& t, const ValueT value) {
                                                ^
In file included from /Users/shintaro/work/tub/EventEMin/test/main_approx_entropy_homography.cpp:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion.h:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion/approx_entropy/approx_potential.h:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion/approx_entropy/approx_entropy.h:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/convolution.h:8:
In file included from /usr/local/include/eigen3/unsupported/Eigen/CXX11/Tensor:90:
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h:255:46: warning: unused parameter 'beta' [-Wunused-parameter]
      const ResScalar alpha, const ResScalar beta) {
                                             ^
In file included from /Users/shintaro/work/tub/EventEMin/test/main_approx_entropy_homography.cpp:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion.h:10:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion/entropy/potential.h:4:
/Users/shintaro/work/tub/EventEMin/include/dispersion/entropy/entropy.h:43:15: warning: unused parameter 'd' [-Wunused-parameter]
    const int d) const
              ^
In file included from /Users/shintaro/work/tub/EventEMin/test/main_approx_entropy_homography.cpp:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion.h:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion/approx_entropy/approx_potential.h:4:
/Users/shintaro/work/tub/EventEMin/include/dispersion/approx_entropy/approx_entropy.h:116:5: error: no matching function for call to 'gaussKernel'
    kernel::gaussKernel<T, this->ndims()>(ksize, kernel_);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/shintaro/work/tub/EventEMin/include/dispersion/approx_entropy/approx_tsallis.h:45:5: note: in instantiation of member function 'event_model::dispersion::ApproxEntropy<event_model::dispersion::ApproxTsallis<event_model::Model<event_model::model::homography::Homography<float>>>>::ApproxEntropy' requested here
    ApproxEntropy<ApproxTsallis<Model> >(dim, offset, lambda, ksize),
    ^
/Users/shintaro/work/tub/EventEMin/test/main_approx_entropy_homography.cpp:68:14: note: in instantiation of member function 'event_model::dispersion::ApproxTsallis<event_model::Model<event_model::model::homography::Homography<float>>>::ApproxTsallis' requested here
  Dispersion dispersion({width, height});
             ^
/Users/shintaro/work/tub/EventEMin/include/gauss_kernel.h:163:1: note: candidate template ignored: substitution failure: too many template arguments for function template 'gaussKernel'
gaussKernel(
^
/Users/shintaro/work/tub/EventEMin/include/gauss_kernel.h:179:1: note: candidate template ignored: substitution failure: too many template arguments for function template 'gaussKernel'
gaussKernel(
^
/Users/shintaro/work/tub/EventEMin/include/gauss_kernel.h:147:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter 'NDims'
gaussKernel(
^
/Users/shintaro/work/tub/EventEMin/include/gauss_kernel.h:222:1: note: candidate function template not viable: requires 4 arguments, but 2 were provided
gaussKernel(
^
/Users/shintaro/work/tub/EventEMin/include/gauss_kernel.h:242:1: note: candidate function template not viable: requires 4 arguments, but 2 were provided
gaussKernel(
^
/Users/shintaro/work/tub/EventEMin/include/gauss_kernel.h:260:1: note: candidate function template not viable: requires 4 arguments, but 2 were provided
gaussKernel(
^
In file included from /Users/shintaro/work/tub/EventEMin/test/main_approx_entropy_homography.cpp:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion.h:4:
In file included from /Users/shintaro/work/tub/EventEMin/include/dispersion/approx_entropy/approx_potential.h:4:
/Users/shintaro/work/tub/EventEMin/include/dispersion/approx_entropy/approx_entropy.h:171:33: error: non-type template argument is not a constant expression
    convolution::Convolution<U, this->ndims(), T> conv(dim(),
                                ^~~~~~~~~~~~~
/Users/shintaro/work/tub/EventEMin/include/dispersion/dispersion.h:170:32: note: in instantiation of function template specialization 'event_model::dispersion::ApproxEntropy<event_model::dispersion::ApproxTsallis<event_model::Model<event_model::model::homography::Homography<float>>>>::compute<float>' requested here
    (*f)(0)=this->underlying().compute(cmScaled);
                               ^
/usr/local/include/eigen3/unsupported/Eigen/CXX11/../src/AutoDiff/AutoDiffJacobian.h:73:16: note: in instantiation of function template specialization 'event_model::dispersion::Dispersion<event_model::dispersion::ApproxEntropy<event_model::dispersion::ApproxTsallis<event_model::Model<event_model::model::homography::Homography<float>>>>>::operator()<float>' requested here
      Functor::operator()(x, v, Params...);
               ^
/Users/shintaro/work/tub/EventEMin/include/optimiser/gsl_fdf_optimiser.h:210:5: note: in instantiation of function template specialization 'Eigen::AutoDiffJacobian<event_model::dispersion::ApproxTsallis<event_model::Model<event_model::model::homography::Homography<float>>>>::operator()<>' requested here
    func_(vars, &f, nullptr);
    ^
/Users/shintaro/work/tub/EventEMin/include/optimiser/gsl_fdf_optimiser.h:254:10: note: in instantiation of member function 'event_model::optimiser::GSLfdfOptimiser<event_model::dispersion::ApproxTsallis<event_model::Model<event_model::model::homography::Homography<float>>>>::operator()' requested here
  return (*static_cast<GSLfdfOptimiser<Func>*>(params))(gvars);
         ^
/Users/shintaro/work/tub/EventEMin/include/optimiser/gsl_fdf_optimiser.h:92:17: note: in instantiation of function template specialization 'event_model::optimiser::gslfdffFunc<event_model::dispersion::ApproxTsallis<event_model::Model<event_model::model::homography::Homography<float>>>>' requested here
    gslFunc_.f=&gslfdffFunc<Func>;
                ^
/Users/shintaro/work/tub/EventEMin/test/main_approx_entropy_homography.cpp:84:13: note: in instantiation of member function 'event_model::optimiser::GSLfdfOptimiser<event_model::dispersion::ApproxTsallis<event_model::Model<event_model::model::homography::Homography<float>>>>::GSLfdfOptimiser' requested here
  Optimiser optimiser(dispersion, Optimiser::OptimiserParams(
            ^
/Users/shintaro/work/tub/EventEMin/include/dispersion/approx_entropy/approx_entropy.h:171:33: note: use of 'this' pointer is only allowed within the evaluation of a call to a 'constexpr' member function
    convolution::Convolution<U, this->ndims(), T> conv(dim(),
                                ^
/Users/shintaro/work/tub/EventEMin/include/dispersion/approx_entropy/approx_entropy.h:171:33: error: non-type template argument is not a constant expression
    convolution::Convolution<U, this->ndims(), T> conv(dim(),
                                ^~~~~~~~~~~~~
/Users/shintaro/work/tub/EventEMin/include/dispersion/dispersion.h:170:32: note: in instantiation of function template specialization 'event_model::dispersion::ApproxEntropy<event_model::dispersion::ApproxTsallis<event_model::Model<event_model::model::homography::Homography<float>>>>::compute<Eigen::AutoDiffScalar<Eigen::Matrix<float, 8, 1, 0>>>' requested here
    (*f)(0)=this->underlying().compute(cmScaled);
                               ^
/usr/local/include/eigen3/unsupported/Eigen/CXX11/../src/AutoDiff/AutoDiffJacobian.h:93:14: note: in instantiation of function template specialization 'event_model::dispersion::Dispersion<event_model::dispersion::ApproxEntropy<event_model::dispersion::ApproxTsallis<event_model::Model<event_model::model::homography::Homography<float>>>>>::operator()<Eigen::AutoDiffScalar<Eigen::Matrix<float, 8, 1, 0>>>' requested here
    Functor::operator()(ax, &av, Params...);
             ^
/Users/shintaro/work/tub/EventEMin/include/optimiser/gsl_fdf_optimiser.h:210:5: note: in instantiation of function template specialization 'Eigen::AutoDiffJacobian<event_model::dispersion::ApproxTsallis<event_model::Model<event_model::model::homography::Homography<float>>>>::operator()<>' requested here
    func_(vars, &f, nullptr);
    ^
/Users/shintaro/work/tub/EventEMin/include/optimiser/gsl_fdf_optimiser.h:254:10: note: in instantiation of member function 'event_model::optimiser::GSLfdfOptimiser<event_model::dispersion::ApproxTsallis<event_model::Model<event_model::model::homography::Homography<float>>>>::operator()' requested here
  return (*static_cast<GSLfdfOptimiser<Func>*>(params))(gvars);
         ^
/Users/shintaro/work/tub/EventEMin/include/optimiser/gsl_fdf_optimiser.h:92:17: note: in instantiation of function template specialization 'event_model::optimiser::gslfdffFunc<event_model::dispersion::ApproxTsallis<event_model::Model<event_model::model::homography::Homography<float>>>>' requested here
    gslFunc_.f=&gslfdffFunc<Func>;
                ^
/Users/shintaro/work/tub/EventEMin/test/main_approx_entropy_homography.cpp:84:13: note: in instantiation of member function 'event_model::optimiser::GSLfdfOptimiser<event_model::dispersion::ApproxTsallis<event_model::Model<event_model::model::homography::Homography<float>>>>::GSLfdfOptimiser' requested here
  Optimiser optimiser(dispersion, Optimiser::OptimiserParams(
            ^
/Users/shintaro/work/tub/EventEMin/include/dispersion/approx_entropy/approx_entropy.h:171:33: note: use of 'this' pointer is only allowed within the evaluation of a call to a 'constexpr' member function
    convolution::Convolution<U, this->ndims(), T> conv(dim(),
                                ^
6 warnings and 3 errors generated.
make[2]: *** [test/CMakeFiles/example_approx_entropy_homography.dir/main_approx_entropy_homography.cpp.o] Error 1
make[1]: *** [test/CMakeFiles/example_approx_entropy_homography.dir/all] Error 2

Build error: no matching function for call to 'isfinite'

Hi, I am trying to build the latest version of this repository and getting a bug.

My environment is:

Ubuntu 20.04.3 
libeigen3-dev 3.4.0-1~focal

The command is:

$ cmake .. -DEventEMin_BATCH_MODE=ON
-- The CXX compiler identification is GNU 9.4.0
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Setting build type to 'Release' as none was specified.
-- Found OpenMP_CXX: -fopenmp (found version "4.5") 
-- Found OpenMP: TRUE (found version "4.5")  
OpenMP found
-- Found OpenCV: /usr (found version "4.2.0") 
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
-- Found GSL: /usr/include (found version "2.5") 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/shintaro/work/EventEMin/build
➜  build git:(master) make

$ make

The error is:

/home/shintaro/work/EventEMin/test/main_test_sequence_3d.cpp:107:79:   required from here
/usr/include/eigen3/Eigen/src/Core/MathFunctions.h:989:39: error: no matching function for call to ‘isfinite(const Eigen::AutoDiffScalar<Eigen::Matrix<float, 6, 1, 0, 6, 1> >&)’
  989 |     return isfinite EIGEN_NOT_A_MACRO (x);
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
In file included from /home/shintaro/work/EventEMin/include/EventEMin/convolution.h:6,
                 from /home/shintaro/work/EventEMin/include/EventEMin.h:4,
                 from /home/shintaro/work/EventEMin/test/main_test_sequence_3d.cpp:5:
/usr/include/c++/9/cmath:578:5: note: candidate: ‘template<class _Tp> constexpr typename __gnu_cxx::__enable_if<std::__is_integer<_Tp>::__value, bool>::__type std::isfinite(_Tp)’
  578 |     isfinite(_Tp __x)
      |     ^~~~~~~~

Could you help me?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.