How to contribute

Version 12 (Daniil Osokin, 2014-07-14 06:01 pm)

1 1
h1. How to contribute
2 1
3 11 Daniil Osokin
We suppose that you've seen the http://opencv.org/contribute.html page, and want to share some code. If so, good news for you, OpenCV project now has a mirror on the GitHub! And if you're familiar with that hosting, you can contribute in a familiar and friendly way. So, the preferred way to propose your code is to create a pull request on the GitHub. This way it will be automatically tested and reviewed: http://pullrequest.opencv.org. Here is the right project to fork: https://github.com/itseez/opencv.
4 1
5 11 Daniil Osokin
h2. Overall process
6 1
7 12 Daniil Osokin
OpenCV uses "Fork & Pull model" for code contribution:
8 12 Daniil Osokin
# Create your fork of OpenCV repository: https://github.com/Itseez/opencv (see https://help.github.com/articles/fork-a-repo for details).
9 12 Daniil Osokin
# Code and work, according to all prerequisites from below.
10 12 Daniil Osokin
# When you are done, create a pull request with your commits (see https://help.github.com/articles/using-pull-requests for details). Choose the right "base branch" onto pull request will be applied.
11 12 Daniil Osokin
12 12 Daniil Osokin
OpenCV has three different branch for development:
13 12 Daniil Osokin
# "current major version" (right now it's "2.4") - used for the next minor releases of OpenCV (e.g. 2.4.3, 2.4.4, etc). This branch is good for contributing performance optimizations, bugfixes, new functionality. But note, it can contain only binary compatible with current major version changes.
14 12 Daniil Osokin
# "master" - used for the future major releases of OpenCV. It can contain binary incompatible with current major version changes.
15 12 Daniil Osokin
# "cuda-dev" - used by OpenCV for CUDA developers.
16 12 Daniil Osokin
17 12 Daniil Osokin
Pull request testing and merging with OpenCV:
18 12 Daniil Osokin
# Your pull request will be automatically tested by OpenCV's buildbot (testing status see here: http://pullrequest.opencv.org). If any builders are failed, you should fix the issue.
19 12 Daniil Osokin
# When all builders are green, one of OpenCV developers will review your code. Reviewer could ask you to modify your pull request. Please provide timely response for reviewers, otherwise you submission could be postponed or even rejected.
20 11 Daniil Osokin
21 11 Daniil Osokin
Here is how pull requests are processed:
22 11 Daniil Osokin
!https://docs.google.com/drawings/pub?id=1_m7oVQ4CvoMxZn63N1_TyhhazmLLWY5uLEGUyPCERLo&w=960&h=720!
23 11 Daniil Osokin
24 11 Daniil Osokin
h2. Prerequisites
25 11 Daniil Osokin
26 11 Daniil Osokin
Below are some recommendations for contributors. They are raw, but can be used as a starting point for anybody who wants to see his code added to the library.
27 11 Daniil Osokin
28 11 Daniil Osokin
> We would gladly accept such a contribution, but because of little resources available on our side, I would ask you to do all the preparations. Here is the checklist, including both generic items and the specific things related to your code that I found after brief inspection:
29 1
30 4 Daniil Osokin
# A prerequisite: is the algorithm patented? If yes, then we may not be that interested in putting it in.
31 4 Daniil Osokin
# License - the current license is fine, it's compatible with OpenCV.
32 4 Daniil Osokin
# Interface. Here some work is needed to make this code a seamless part of OpenCV.
33 4 Daniil Osokin
** @M_PI -> CV_PI@
34 4 Daniil Osokin
** You should remove all the static constants from the header. it's not portable and generally a bad practice. Use defines and enumerations.
35 4 Daniil Osokin
** cv:: and std:: should not be used in the header, since all the stuff is already inside cv namespace and we already have "using std::vector", "using std::string" directives.
36 4 Daniil Osokin
** "m_" in member names should be dropped, we do not this convention in OpenCV.
37 4 Daniil Osokin
# Implementation.
38 4 Daniil Osokin
** The code should be portable, it should compile fine on ARM too, for example. Therefore, you should not use SSE2 intrinsics outside of conditional compilation. Instead of "#ifdef USE_SSE" you should use "#if CV_SSE2".
39 4 Daniil Osokin
** Avoiding duplication of existing OpenCV functionality. 
40 4 Daniil Osokin
** Writing to cerr should be replaced with CV_Error() calls.
41 4 Daniil Osokin
# Documentation.
42 4 Daniil Osokin
** Documentation in RST format should be provided for the functionality. Check http://docs.opencv.org/modules/features2d/doc/feature_detection_and_description.html#orb as example.
43 4 Daniil Osokin
# You should provide sample code.
44 4 Daniil Osokin
** help() function should be added, check opencv/samples/cpp.
45 4 Daniil Osokin
# Regression tests - the code should include some regression tests.
46 4 Daniil Osokin
** Please, take a look at opencv/modules/features2d/test/test_features2d.cpp. You will need to add a similar test for your code.
47 4 Daniil Osokin
# Integration
48 9 Daniil Osokin
** Take the latest version of our repository or fork from our github mirror at https://github.com/Itseez/opencv/
49 9 Daniil Osokin
** Add your code
50 4 Daniil Osokin
** Insert documentation and add the test to the corresponding module
51 4 Daniil Osokin
** Build OpenCV, run tests. If you have access to both Linux and Windows - great! Sometimes GCC-approved code does not built with MSVC and vice versa.
52 9 Daniil Osokin
** Create pull request on github.com or create patch file or and submit it as patch at http://code.opencv.org/projects/opencv/issues/new.