From 637b615e08ea06d89e688914d71afb5123ad5041 Mon Sep 17 00:00:00 2001 From: Maksim Shabunin Date: Tue, 9 Dec 2014 18:45:36 +0300 Subject: [PATCH] Tutorial: documenting OpenCV --- doc/tutorials/definitions/noContent.rst | 2 +- .../documentation_tutorial.markdown | 610 +++++++++++++++++++++ .../introduction/documenting_opencv/doxygen-1.png | Bin 0 -> 41991 bytes .../introduction/documenting_opencv/doxygen-2.png | Bin 0 -> 8982 bytes .../introduction/documenting_opencv/doxygen-3.png | Bin 0 -> 14702 bytes .../documenting_opencv/scholarship_cite_dialog.png | Bin 0 -> 31054 bytes .../how_to_write_a_tutorial.markdown | 3 - .../how_to_write_a_tutorial.rst | 440 --------------- .../images/matTheBasicImageStructure.jpg | Bin 6243 -> 0 bytes .../table_of_content_introduction.markdown | 74 ++- .../table_of_content_introduction.rst | 21 - 11 files changed, 647 insertions(+), 503 deletions(-) create mode 100644 doc/tutorials/introduction/documenting_opencv/documentation_tutorial.markdown create mode 100644 doc/tutorials/introduction/documenting_opencv/doxygen-1.png create mode 100644 doc/tutorials/introduction/documenting_opencv/doxygen-2.png create mode 100644 doc/tutorials/introduction/documenting_opencv/doxygen-3.png create mode 100644 doc/tutorials/introduction/documenting_opencv/scholarship_cite_dialog.png delete mode 100644 doc/tutorials/introduction/how_to_write_a_tutorial/how_to_write_a_tutorial.markdown delete mode 100644 doc/tutorials/introduction/how_to_write_a_tutorial/how_to_write_a_tutorial.rst delete mode 100644 doc/tutorials/introduction/how_to_write_a_tutorial/images/matTheBasicImageStructure.jpg diff --git a/doc/tutorials/definitions/noContent.rst b/doc/tutorials/definitions/noContent.rst index c2780c2..50d9cd2 100644 --- a/doc/tutorials/definitions/noContent.rst +++ b/doc/tutorials/definitions/noContent.rst @@ -1,3 +1,3 @@ .. note:: - Unfortunetly we have no tutorials into this section. And you can help us with that, since OpenCV is a community effort. If you have a tutorial suggestion or you have written a tutorial yourself (or coded a sample code) that you would like to see here, please contact follow these instructions: :ref:`howToWriteTutorial` and :how_to_contribute:`How to contribute <>`. + Unfortunetly we have no tutorials into this section. And you can help us with that, since OpenCV is a community effort. If you have a tutorial suggestion or you have written a tutorial yourself (or coded a sample code) that you would like to see here, please contact follow these instructions: :how_to_contribute:`How to contribute <>`. diff --git a/doc/tutorials/introduction/documenting_opencv/documentation_tutorial.markdown b/doc/tutorials/introduction/documenting_opencv/documentation_tutorial.markdown new file mode 100644 index 0000000..749496d --- /dev/null +++ b/doc/tutorials/introduction/documenting_opencv/documentation_tutorial.markdown @@ -0,0 +1,610 @@ +Writing documentation for OpenCV {#tutorial_documentation} +================================ + +@tableofcontents + +Doxygen overview {#tutorial_documentation_overview} +================ + +Intro {#tutorial_documentation_intro} +----- + +[Doxygen] is documentation generation system with a lot of great features, such as: +- parse program sources to produce actual and accurate documentation +- check documentation for errors +- insert images and formulas +- use markdown syntax and plain HTML for precise text formatting +- generate documentation in many different formats + +OpenCV library existing documentation has been converted to doxygen format. + +Installation {#tutorial_documentation_install} +------------ + +Please, check official [download][Doxygen download] and [installation][Doxygen installation] pages. +Some linux distributions can also provide doxygen packages. + +Generate documentation {#tutorial_documentation_generate} +---------------------- + +- Get the OpenCV sources (version 3.0 and later) +- _Optional:_ get the OpenCV_contrib sources +- Create build directory near the sources folder(s) and go into it +- Run cmake (assuming you put sources to _opencv_ folder): + @code{.sh} + cmake ../opencv + @endcode + Or if you get contrib sources too: + @code{.sh} + cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../opencv + @endcode +- Run make: + @code{.sh} + make doxygen + @endcode +- Open doc/doxygen/html/index.html file in your favorite browser + +Quick start {#tutorial_documentation_quick_start} +=========== + +@note These instructions are specific to OpenCV library documentation, other projects can use +different layout scheme and documenting agreements. + +Documentation locations {#tutorial_documentation_quick_start_1} +----------------------- + +Whole documentation is gathered from many different places: + +- __source code__ entities, like classes, functions or enumerations, should be documented in + corresponding header files, right prior entity definition. See examples in next sections. + +- __pages__ are good place to put big pieces of text with images and code examples not directly + connected with any source code entity. Pages should be located in separate files and + contained in several predefined places. This tutorial is example of such page. + +- __images__ can be used to illustrate described things. Usually located at the same places as pages, + images can be inserted to any place of the documentation. + +- __code examples__ show how to use the library in real applications. Each sample is + self-contained file which represents one simple application. Parts of these files can be + included into documentation and tutorials to demonstrate function calls and objects collaboration. + +- __BibTeX references__ are used to create one common bibliography. All science books, articles and + proceedings served as basis for library functionality should be put in this reference list. + +Following scheme represents common documentation places for _opencv_ repository: +~~~ + +├── doc - doxygen config files, root page (root.markdown.in), BibTeX file (opencv.bib) +│   ├── tutorials - tutorials hierarchy (pages and images) +│   ├── py_tutorials - python tutorials hierarchy (pages and images) +│   └── user_guide - old user guide (pages and images) +├── modules +│   └── +│      ├── doc - documentation pages and images for module +│      └── include - code documentation in header files +└── samples - place for all code examples + ├── cpp + │ └── tutorial_code - place for tutorial code examples + └── ... +~~~ + +@note Automatic code parser looks for all header files (".h, .hpp" except for ".inl.hpp; +.impl.hpp; _detail.hpp") in _include_ folder and its subfolders. Some module-specific +instructions (group definitions) and documentation should be put into +"include/opencv2/.hpp" file. + +@note You can put C++ template implementation and specialization to separate files +(".impl.hpp") ignored by doxygen. + +@note Files in _src_ subfolder are not parsed, because documentation is intended mostly for the +library users, not developers. But it still is possible to generate full documentation by +customizing processed files list in cmake script (doc/CMakeLists.txt) and doxygen options in +its configuration file (doc/Doxyfile.in). + +Since version 3.0 all new modules are placed into _opencv_contrib_ repository, it has slightly +different layout: +~~~ + +└── modules + └── + ├── doc - documentation pages and images, BibTeX file (.bib) + ├── include - code documentation in header files + ├── samples - place for code examples for documentation and tutorials + └── tutorials - tutorial pages and images +~~~ + +Example {#tutorial_documentation_quick_start_2} +------- + +To add documentation for functions, classes and other entities, just insert special comment prior +its definition. Like this: + +@verbatim +/** @brief Calculates the exponent of every array element. + +The function exp calculates the exponent of every element of the input array: +\f[ \texttt{dst} [I] = e^{ src(I) } \f] + +The maximum relative error is about 7e-6 for single-precision input and less than 1e-10 for +double-precision input. Currently, the function converts denormalized values to zeros on output. +Special values (NaN, Inf) are not handled. + +@param src input array. +@param dst output array of the same size and type as src. + +@sa log , cartToPolar , polarToCart , phase , pow , sqrt , magnitude +*/ +CV_EXPORTS_W void exp(InputArray src, OutputArray dst); +@endverbatim + +Here you can see: + +- special C-comment syntax denotes it is doxygen comment + @verbatim /** ... */ @endverbatim + +- command `brief` denotes following paragraph is a brief description + @verbatim @brief @endverbatim + +- empty line denotes paragraph end + +- TeX formula between `f[` and `f]` commands + @verbatim \f[ ... \f] @endverbatim + +- command `param` denotes following word is name of the parameter and following text is + description of the parameter; all parameters are placed in a list + @verbatim @param @endverbatim + +- command `sa` starts "See also" paragraph containing references to some classes, methods, pages or URLs. + @verbatim @sa @endverbatim + +Produced reference item looks like this: +![Reference link](doxygen-2.png) + +The "More..." link brings you to the function documentation: +![Function documentation](doxygen-1.png) + + +Another example {#tutorial_documentation_quick_start_3} +--------------- + +Different comment syntax can be used for one-line short comments: + +@verbatim +//! type of line +enum LineTypes { + FILLED = -1, + LINE_4 = 4, //!< 4-connected line + LINE_8 = 8, //!< 8-connected line + LINE_AA = 16 //!< antialiased line +}; +@endverbatim + +Here: + +- special C++-comment syntax denotes it is doxygen comment + @verbatim //! @endverbatim + +- additional symbol `<` denotes this comment is located _after_ documented entity + @verbatim //!< @endverbatim + +Produced documentation block looks like this: +![Enumeration documentation](doxygen-3.png) + +More details {#tutorial_documentation_quick_start_4} +------------ + +### Command prefix + +Doxygen commands starts with `@` or `\` sign: +@verbatim +@brief ... +or +\brief ... +@endverbatim + +### Comment syntax + +Doxygen comment can have different forms: +@verbatim +C-style: +/** ... */ +or +/*! ... */ + +C++-style +//! ... +or +/// ... + +Lines can start with '*': +/** + * ... + * ... + */ + +Can be placed after documented entity: +//!< ... +/**< ... */ +@endverbatim + +### Paragraph end + +To end paragraph, insert empty line or any command starting new paragraph: +@verbatim +@brief brief description paragraph +brief continues + +new paragraph + +@note new note paragraph +note paragraph continues + +another paragraph +paragraph continues +@endverbatim + +### Naming + +Pages, anchors, groups and other named entities should have unique name inside the whole project. +It is a good idea to prefix such identifiers with module name: +@verbatim +@page core_explanation_1 Usage explanation +@defgroup imgproc_transform Image transformations +@anchor mymodule_interesting_note +@endverbatim + +Supported Markdown {#tutorial_documentation_quick_start_md} +------------------ + +Doxygen supports Markdown formatting with some extensions. Short syntax reference is described +below, for details visit [Markdown support]. + +### lists {#tutorial_documentation_md_list} + +@verbatim +Bulleted: +- item1 +- item2 +Numbered: +1. item1 +2. item2 +or +-# item1 +-# item2 +@endverbatim + +### emphasis {#tutorial_documentation_md_emph} + +@verbatim +_italic_ +__bold__ +use html in complex cases: +"path/to/file" +@endverbatim + +### links {#tutorial_documentation_md_links} + +@verbatim +explicit link: +[OpenCV main site](http://opencv.org) +automatic links: + +or even: +http://opencv.org +@endverbatim + +### images {#tutorial_documentation_md_image} + +@verbatim +![image caption](image path) +@endverbatim + +### headers {#tutorial_documentation_md_head} + +@verbatim +Level1 +====== +Level2 +------ +### Level3 +#### Level4 +@endverbatim + +### header id {#tutorial_documentation_md_headid} + +You can assign a unique identifier to any header to reference it from other places. +@verbatim +Header {#some_unique_identifier} +------ +... +See @ref some_unique_identifier for details +@endverbatim + +### page id {#tutorial_documentation_md_page} + +Each page should have additional Level1 header at the beginning with page title and identifier: +@verbatim +Writing documentation for OpenCV {#tutorial_documentation} +================================ +@endverbatim + +### tables {#tutorial_documentation_md_table} + +Example from doxygen documentation: +@verbatim +First Header | Second Header +------------- | ------------- +Content Cell | Content Cell +Content Cell | Content Cell +@endverbatim + +Commonly used commands {#tutorial_documentation_quick_start_5} +---------------------- + +Most often used doxygen commands are described here with short examples. For the full list of +available commands and detailed description, please visit [Command reference]. + +### Basic commands {#tutorial_documentation_commands_basic} + +- __brief__ - paragraph with brief entity description + +- __param__ - description of function argument. + + Multiple adjacent statements are merged into one list. If argument with this name is not found + in actual function signature - doxygen warning will be produced. Function can have either _no_ + documented parameters, either _all_ should be documented. + +- __sa__ - "See also" paragraph, contains references to classes, functions, pages or URLs + +- __note__ - visually highlighted "Note" paragraph. Multiple adjacent statements are merged into + one block. + +- __return, returns__ - describes returned value of a function + +- __overload__ - adds fixed text to the function description: "This is an overloaded member + function, provided for convenience. It differs from the above function only in what argument(s) + it accepts." + +- __anchor__ - places invisible named anchor, which can be referenced by `ref` command. It can be + used in pages only. + +- __ref__ - explicit reference to a named section, page or anchor. + + If such entity can not be found - doxygen warning will be generated. This command has an + optional argument - link text. + + Doxygen also generates some links automatically: if text contains word which can be found in + documented entities - reference will be generated. This functionality can be disabled by prefixing + the word with `%` symbol. + @verbatim +Explicit reference: @ref MyClass +Explicit named reference: @ref example_page "Example page" +Implicit reference: cv::abc::MyClass1 or just MyClass1 +Disable implicit reference: %MyClass1 + @endverbatim + +- __f__ - formula + + Inline formulas are bounded with `f$` command: + @verbatim +\f$ ... \f$ + @endverbatim + + Block formulas - with `f[` and `f]` commands: + @verbatim +\f[ ... \f] + @endverbatim + +### Code inclusion commands {#tutorial_documentation_commands_include} + +To mark some text as a code in documentation, _code_ and _endcode_ commands are used. +@verbatim +@code +float val = img.at(borderInterpolate(100, img.rows, cv::BORDER_REFLECT_101), + borderInterpolate(-5, img.cols, cv::BORDER_WRAP)); +@endcode +@endverbatim + +Syntax will be highlighted according to the currently parsed file type (C++ for .hpp, C for .h) or +you can manually specify it in curly braces: + +@verbatim +@code{.xml} +@endverbatim + +To include whole example file into documentation, _include_ and _includelineno_ commands are used. +The file is searched in common samples locations, so you can specify just its name or short part of +the path. The _includelineno_ version also shows line numbers. + +@verbatim +@include samples/cpp/test.cpp +@endverbatim + +If you want to include some parts of existing example file - use _snippet_ command. + +First, mark the needed parts of the file with special doxygen comments: +@verbatim +//! [var_init] +int a = 0; +//! [var_init] +@endverbatim + +Then include this snippet into documentation: +@verbatim +@snippet samples/cpp/test.cpp var_init +@endverbatim + +@note Currently most of such partial inclusions are made with _dontinclude_ command for +compatibility with the old rST documentation. But newly created samples should be included with the +_snippet_ command, since this method is less affected by the changes in processed file. + +### Grouping commands {#tutorial_documentation_commands_group} + +All code entities should be put into named groups representing OpenCV modules and thier internal +structure, thus each module should be associated with a group with the same name. Good place to +define groups and subgroups is the main header file for this module: +"/include/opencv2/.hpp". + +@note Doxygen groups are called "modules" and are shown on "Modules" page. + +@verbatim +/** +@defgroup mymodule My great module + optional description +@{ + @defgroup mymodule_basic Basic operations + optional description + @defgroup mymodule_experimental Experimental operations + optional description +@} +*/ +@endverbatim + +To put classes and functions into specific group, just add `ingroup` command to its documentation, +or wrap the whole code block with `addtogroup` command: + +@verbatim +/** @brief Example function + @ingroup mymodule +*/ +or +/** +@addtogroup mymodule_experimental +@{ +*/ +... several functions, classes or enumerations here +/** +@} +*/ +@endverbatim + +### Publication reference {#tutorial_documentation_commands_cite} + +Use _cite_ command to insert reference to related publications listed in @ref citelist page. + +First, add publication BibTeX record into "/doc/opencv.bib" or +"/modules//doc/.bib" file: +@verbatim +@ARTICLE{Bradski98, + author = {Bradski, Gary R}, + title = {Computer vision face tracking for use in a perceptual user interface}, + year = {1998}, + publisher = {Citeseer} +} +@endverbatim + +@note Try not to add publication duplicates because it can confuse documentation readers and writers later. + +Then make reference with _cite_ command: +@verbatim +@cite Bradski98 +@endverbatim + +@note To get BibTeX record for the publications one can use [Google Scholar]. Once the publication +have been found - follow its "Cite" link and then choose "BibTeX" option: +![](scholarship_cite_dialog.png) + +Step-by-step {#tutorial_documentation_steps} +============ + +Steps described in this section can be used as checklist during documentation writing. It is not +necessary to do things in the same order, but some steps really depend on previous. And of course +these steps are just basic guidelines, there is always a place for creativity. + +Document the function {#tutorial_documentation_steps_fun} +--------------------- + +1. Add empty doxygen comment preceding function definition. +2. Add _brief_ command with short description of function meaning at the beginning. +3. Add detailed description of the function. +4. _Optional_: insert formulas, images and blocks of example code to illustrate complex cases +5. _Optional_: describe each parameter using the _param_ command. +6. _Optional_: describe return value of the function using the _returns_ command. +7. _Optional_: add "See also" section with links to similar functions or classes +8. _Optional_: add bibliographic reference if any. +9. Generate doxygen documentation and verify results. + +Write the tutorial {#tutorial_documentation_steps_tutorial} +------------------ + +1. Formulate the idea to be illustrated in the tutorial. + +2. Make the example application, simple enough to be understood by a beginning developer. Be + laconic and write descriptive comments, don't try to avoid every possible runtime error or to make + universal utility. Your goal is to illustrate the idea. And it should fit one source file! + + If you want to insert code blocks from this file into your tutorial, mark them with special doxygen comments (see [here](@ref tutorial_documentation_commands_include)). + +3. Collect results of the application work. It can be "before/after" images or some numbers + representing performance or even a video. + + Save it in appropriate format for later use in the tutorial: + - To save simple graph-like images use loseless ".png" format. + - For photo-like images - lossy ".jpg" format. + - Numbers will be inserted as plain text, possibly formatted as table. + - Video should be uploaded on YouTube. + +4. Create new tutorial page (".markdown"-file) in corresponding location (see + [here](@ref tutorial_documentation_quick_start_1)), and place all image files near it (or in "images" + subdirectory). Also put your example application file and make sure it is compiled together with the + OpenCV library when `-DBUILD_EXAMPLES=ON` option is enabled on cmake step. + +5. Modify your new page: + - Add page title and identifier, usually prefixed with "tutorial_" (see [here](@ref tutorial_documentation_md_page)). + - Add brief description of your idea and tutorial goals. + - Describe your program and/or its interesting pieces. + - Describe your results, insert previously added images or other results. + + To add a video use _htmlonly_, _endhtmlonly_ commands with raw html block inside: + @verbatim +@htmlonly +
+ +
+@endhtmlonly + @endverbatim + - Add bibliographic references if any (see [here](@ref tutorial_documentation_commands_cite)). + +6. Add newly created tutorial to the corresponding table of contents. Just find + "table_of_content_*.markdown" file with the needed table and place new record in it + similar to existing ones. + @verbatim +- @subpage tutorial_windows_visual_studio_image_watch + + _Compatibility:_ \>= OpenCV 2.4 + + _Author:_ Wolf Kienzle + + You will learn how to visualize OpenCV matrices and images within Visual Studio 2012. + @endverbatim + As you can see it is just a list item with special _subpage_ command which marks your page as a + child and places it into the existing pages hierarchy. Add compatibility information, + authors list and short description. Also note the list item indent, empty lines between + paragraphs and special _italic_ markers. + +7. Generate doxygen doumentation and verify results. + +References {#tutorial_documentation_refs} +========== +- [Doxygen] - main Doxygen page +- [Documenting basics] - how to include documentation in code +- [Markdown support] - supported syntax and extensions +- [Formulas support] - how to include formulas +- [Supported formula commands] - HTML formulas use MathJax script for rendering +- [Command reference] - supported commands and thier parameters + + +[Doxygen]: http://www.stack.nl/~dimitri/doxygen/index.html) +[Doxygen download]: http://www.stack.nl/~dimitri/doxygen/download.html +[Doxygen installation]: http://www.stack.nl/~dimitri/doxygen/manual/install.html +[Documenting basics]: http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html +[Markdown support]: http://www.stack.nl/~dimitri/doxygen/manual/markdown.html +[Formulas support]: http://www.stack.nl/~dimitri/doxygen/manual/formulas.html +[Supported formula commands]: http://docs.mathjax.org/en/latest/tex.html#supported-latex-commands +[Command reference]: http://www.stack.nl/~dimitri/doxygen/manual/commands.html +[Google Scholar]: http://scholar.google.ru/ diff --git a/doc/tutorials/introduction/documenting_opencv/doxygen-1.png b/doc/tutorials/introduction/documenting_opencv/doxygen-1.png new file mode 100644 index 0000000000000000000000000000000000000000..cdfe84118a74e91d89ca09e2a4aa55f527cd4443 GIT binary patch literal 41991 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 literal 0 HcmV?d00001 diff --git a/doc/tutorials/introduction/documenting_opencv/doxygen-2.png b/doc/tutorials/introduction/documenting_opencv/doxygen-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c8e804b081983e961fe86938c0eeb35b8ff4a298 GIT binary patch literal 8982 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 UzW+y{ZV4nU{t;68!64xO0D+kN4*&oF literal 0 HcmV?d00001 diff --git a/doc/tutorials/introduction/documenting_opencv/scholarship_cite_dialog.png b/doc/tutorials/introduction/documenting_opencv/scholarship_cite_dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..161c9f97405a2106dfa063064f1acb83a4035824 GIT binary patch literal 31054 zcmd3ObySt@*XAJ<1O%kJ6r@912}Mu=6{NenyHg2iq)R|4De3N(5Jc(jPEk5$^ZveC zGvBQFXV#kWkN3PBIL~?R``&Twy|3#Dl70RBHU=360)e)IJ2jIFFK4cYAV?F`km4c2Sx{ z5C|HCr1%pBmz1q(SB+Qe)M$GHnrfNTN>22&Vsb%5v2+3A2DhSl;vmtyF&qM5C& ztqThaQBin@IJnhfpZ3&^gRbw&Qc}`ouan$=-DNn1h{y5C z!D`feSeVm5ny9G9@m_r9%YS{q;9DfEnwnZ-VxmQ#euk!zQFdJ1NF?pk#(RcdhK3*D zK2Pi>CMFiUB8=Zn#j&X)iU+OEkN4p%?WhO;y7k6lu84+#`~nlSf40F4-Ku#;^Uv8J zY)K<^)WG(=v{g^t(y36jfCbT>yVvisb(`>eoxALh8PT7szSV0Wij9?qr7mGoig>8} zuKBohP|tBu=J$Dwn?D^BA>#N~gxa5C} zPYdo{96oKmcYRj7)EBDA@Ji;3O!a?!c{EjdS=En1>xcV$c#!g+zyBnKLe<83|8DK*HZ?i#&ZMWOKMlkl&Q~62ZPnXf=-5g+JKBv157%mNb5u0CJ}{hu4dm3OChy0O zn}23W2Vzt9crC82jWu~+A)(wnzc`xhjpwi)&Qr`+Djbu5@69g_1#8K@m1p(B9)9fX z>|8ME`Z+o(>asVt+jNB;MEm{I)4EH%(3k#?kI2c%-QC^q z-@B)vT6v4s@0=u$ac+5ONyzQbx0aSqTXc8t-X$a??6y8XKcA>DABDxfe~V%~CnPkq zuwZS(v=}Sa{gwTSTF6B<@dS+KcSio_c%_ZeqJeoEa3&G`$*HL+G#o034$sbCfygi^QdP zSmmXfD?MEQZeDE_kFcOyPdz+5;HLi0 zF51=n-TcMz`Py?)6^Zvwk9Mz5AdH;<^88?+E1dF?{Yu})aQ^hv)So|p;8RkC1)o0c zgK-4nP#YN;VUzQ*a&TCW6sY1*i-d-ROjg@wL`TazI5@;Er(Bywx|Fw?MMp5<=4cTI zBcn>GL3b!AH@jvnk8Z2q#o1AQZf>la{m_>;McPeNLN0p^?nh+2W)5@BzUAdS{QOlj z4er{t4&4I-Me;eX6%*~jxrQl?&knaKA31GJ)f`my!|~(FnOe;@Hn<)by?XWP_U+q_ zj*f70No>CV5l{Xtto;A{BAbQ8At2!LBmK$tL}d4sFX6*+OzVvg^Bn7BBRJ6QR?wJOzDGj@J*&=p3GM#IDN2mH)#gkV=wS@~$? zd$NZ}lbwC59!Y?1LeU31LUb%F4X~}L8hiStf&!)dKW6b;YKrxna(-f;hISwTXp4%9 z3X*@-tg9?VPE}aQ$dFTt-Y6Tu5=~&naDjE3kAA&?D1~;LOd(&14ZP0l;?#1yG|Tm1 z1%ZKqLBy(}V{JWKW-KEkGvMckiU4!eEI0WOAFq6Mc|l1*@i`--tgLLZ+!S`XEt`~> zcr^P}^469`H>GByM~zIH$jHb@Wo6}piJ7HkgY~QkT&B_UthT16!RvzTv71|MPEJm2 zY;1mh{t!8tv~+KwdKLIq-{7F_@!tIU`nrXZaes=bzP`Sxsi09G$)Pk~E|sv`*w`4{ zd{$Q0$?54$RMY~^I;ZhcLj;@_B_*Xh7!AbVI_KTE>G-s?w1x&xh_q*aH@gD(ONxt& z>80cD-Mc3sAOJhg%*52)+Z$4tFM4^rI9=zAfa9&Snl>{vB_$wm*cvN&lktpAwY2^F z_wSvZ46LjcJ5x39Zr-+YaPauO6f{J)w7QBz#>2?VJKWMTKOlM)({}<_fe342ef`h- z&)OTl>vUu9qD02T3}wF}uPlam2q(hk{vv*wnTu=i z+qZ9{qoYGZG21r_RtM5HH#bABCUa!c=H_$|&%-HfZET9m%Is}y1U!y8>lD1qrMCMl zM3ld32s*6El9MOHt(UP#7ivk)&(E{7vtwgpH@N+UL_+LiyV%*$)y1LR=<#=Bcwt!T zFF#_n|0CQJ4NOE(~|g$Hylf$NHgOB6>^h)~#D|?$+a)Wnu1XKWK4qaKH{AMxLFV+@=dVwKTR41=>worDs7mZr*frckeaJzJ<@w-qjUBB@CaE zHCv1`yC_`^lmo9Eg?)ek97-jer0FaC(148)zlfoNjQhcZXWF7Sw<;UK+}kzc~G?FNyqco->nc6z#x zZi0`G&q$%VsN0|Sx(Um@@m1!dJAh`f+E`VJb-%G~Dr;&ovL4R968$b#R@UH< z5aYgt5~J^A0lJW#xea>=1jFcO+{MJ+rlxAy+S;0!dx~2Zi z-Te%cm_26W-hvx|t}yuKU_usDy=uV7dEqEhybF^mTDVGwOUe7TlBqHn8nrJ7i>J z5G`YL6CeP9@dW6GQwir46;a>0)57`k<;zfC-zRWW1shR958J0@ehy|l2f$;%D{pIC zlA202xgbZb95wV#S`N$!(qIZ892J$d`T6}WYHv=gyZ_37k!oQgA|hM2*togNAl}3O z(9kr0`?dx-ackyzC`pS|LTaj&nVH*4AL+BsM5md0S1_opT>bA!ycUwnXg;R;5Cjk+=k-TDj@R$rz0=gxr2q9sPOjGLqPDP*4PkF@FOrs)kbv&fHveaP zGM|sz@NlNaKIiRQFy5dT9gnMfALjEPtOh@joaT1 zq~eki-Cr@xfX*L0_zCHTZ400%hemZXQL%E7mXws#)+%I8$U9^{jg4L*L~MXL#|E~9 z!-nWyIR4#G1bAm`Y>ar7%vVuWbp>UDR+HBS>Bkb{;Vo=!O%>}tt@PR$DRkc)VS~am8|SgAYK>}{kwux3LH^~% zSsC?`yn@2e&z}z=Oj%f108j$N^EES5!Rk6sP+;fiwgqU`Iw1Y1b=(95KQyF}JIsuN+iU1M+D9YqiO2_L@!NBAx>GV;q8Mv=58*ttr}NvT(|O1rVO=7`s?Un9nF$MTgq z4$F?YoXU*8zkKxyiG+-d&wPZHj!sO;QId)>P17K*fIC)20-K$mpI=c?5dxR8vhrbp z+JYHGh->H%yJv8e&f$lDq}gb)uIhzK1OcCxx!MX0YM8{yNtTzWe$F%e*Bw-?il zJ5v;?j=Phb+)qfli;Ih{LR4o?2%kH5pFt&L0pagwrX-l0cCikUJDrZ9v2mck|8%wO zy9;YCFA?>JCD5n1P0lASE^bpZ)!Hid?68dfa1Vb~NnTz)g+Sf90InK>$#Rm&Rt<)A zy^f?LGeblAe&ZsohB2;}w%<+6%~w}eq^x2S6PdJnmhHw-B$-vi6f1{r-n_YRB^9SO zRUkxFG(_?-rSRUS6gE|a^U}8uuwxM9Y;YzM@0q;VPWFq zRUJh&3`+JHxNgc+9@W;>m1$$3BHOOUXIP|;Z#FT>XYaWP+0H0^)u_?$!ltH9i;0Qx zMM3LN;+1~$ro_U`&aFsctLANk8lE?iGoCHd{^cG4hJR^Z{#!Qoif>uLvX!>O!^0gc z3QKc(9F|BXW@d4obTr;f2Fm&nJ*pG798(QMR3Xg39`^S4uh`X;l$1ajw{--mobi`G zBF6pn;!^QVGZY}OTaWCP-UBW@?)?`YYwhjLhZwOiXm*G)xv{WF%gv4Nlby{F-wPGj zZ7eJvz$dd_LH>Sz78B*`?LqiqWW0FjsNnq3(ezN4?GKZ>OUTCwpjgi~8YX+U`rQ(C z`*RGHxU0|%`2ASEJ9Z!x4Dc^CHkQ}>@*Gl}HKd-D_u=9FK1e74!f9CULy6-C`5IC@ z_z+b3fQAeTuhVd4@Yrehw{JR4EoUJM!I5gHxd0W_%1z#E7*52*5Fp0K$G2$XlakZ` z;CB;31Yr5fAE28mHA$du0=Pha7-Oz>oCC(YM$di~G(FTx=E<%tIOs-hyuoc7~YZ-$13 zvR@`XFzkte9BFO63r>JVEmFUwWaqYP9ElaTHJ=LsGryME%i)`{)uPhU99~XjVxsDy zocg8Qx3AB@Z}+oumJUp9$AA6&Szll8;psW9OW1wza-6$xXrWj1LJ3omCsP%+1Oiwg zbYn)pYQi!F1qGq!lfY-G2G|WrKv3`kHre0bAK|n!1s>Y1Wuj4I=TF%p;QBk$*B5EB z8Oq0coB7u6==_Pu$rtwl zT-~IhqkAi?-QM1gMa~!6(8I^WW6;&!WBE$;V+|{Kbq(^Ffxjj#6BE&$!No zQtJ(R5Pxc&w#j@T4M1_OrlO*dS-UhEr2ws8h>+^BlhtxKU*%q>2)t2HxQC10ZX6rT z;lCB_119Jd_-^?e0K5j+bI;54#YUnMvmgX--zI*6BK@wsv0ufy zZ5us?ufDv!p@P`y*HB+BxIS3_=p`qd5?MY=uf=Y{VJ80T%F+d3f;0Ah!iw7sL z=f+JI04kwBTUJ^c8X79K-8w#g0v-VV{Nv}(--n0Ls=I=p0WY!eio$s$bLj{8`%6Hs z(a_L<-kGu!B|s5p=cCNbd)JVDEBW@MdZmTwaNh7|i4d=o<#>NgV!(lymuI`=d=_*2 zF5i>+jb~$^VAQIyTZZH2x18Y7@5F*S8i2fnM92POS4beKs(x2EprO2s41IV3yCcTO zUtCzA+idlQFoa3O3Z)}L$J`vcM`IXOKJSO<`VzRFK7ZZ?70keZ%!5_vnM1>Az11I6 zkm5A}d#LE!=53UUw1ll^>Y?dWZZ$p8(UCP&=d`i00e=hteHJP}sN3rtHG|d6t{?9&=DbX7 zbwW9;!0hG)b7k34)1GnffEvgJsu6G=V?#qW^~zA;=ke;A3p>sLz;YwvdKc_!0G3j6 z>9xZxDOoK_30L1!7pK96Zi7Db;32*gs#PTMm_{wF{EiQnEbL5#hSbN0!=0VklFtu3go${@lz{ZRZ5L)8~{xtLI${%4+HFE;_@m!pG2woICq z(_jpfd}vr0{qyHdH(6NnV_B48x3}|m{BeKhLgyobLeLJfvGvCfyCIKhbTW=1I>Evn z7uth@E$CNYvM3Ixc(HUqw&u5-|w0=X6p@@Nn zibGfS&6`0etlBv;6~1nGofaC&P(t3(g4T}HwpzDyIXZ1-z`@?0%kkbPfY}jUn?JL9 zq5XEs>-1(?rfGIJlHs~7Kkns6`|5f=z%APhtzfykHm*X!uGg(&kEw@l7_$#?;QzlV zcU4%u`K~ooAil+6=Dn$LJz~Moh-DssRfDhbWFp0;bVVroVSe<`dOD5e;RDs^f4aB6 zii6u90iK^_#6bOB=dk`04mh4&(+zs5+{XO{5LqBPK4<0;7NlAgK68?J$!viQ0Ae#X0y2d*fgmd}I zMbJ_B1IP}%6zA5hL{8mS7#2Va9uortDp3IZESt)P(5m%V&07nLwYy&(_3(a5f#5)9 z|HeJXhm5&p@t!|3O|EwWOYsyT(~qibx8le0Xf<(2^<(C1G`#ADnb)1v2l}GWs`37dhX zI=M_=kpBw(Fc?P|alaU%4u#}IdwgEiX zt!=@7Mqjyi{@=bF&pt$%Em}hrdU-jLNCS&`bN0++v^vjO3Q4AR4Yg0eSC96fkQ=sF zlt#j41Uqjd;W_*!u$z(SLCu`UX6W@O;6>QGEBXi9WXkJ;ajDm{!rVJ~ubL+z*8y6B z<|%#C6eOV(L3=+jS|14iB3|bz8Akvle1k?Z9} zr!D4nR|zw`F#U2paDe!5fLhU!?5BdVaztood0CnM6?p0-cwVpt2^E!#a4FbcH;$N z?|X)yav2z$+74++Dyb#j_H?IGth^em5M&o-@&0Z%xwD0@;Yw?t+x29L$jfX;#Kyuu zme_Wudo@Q^>B`Av4};5^nfuj=W{JkOBU1WkV-J?Q;N!g7Plj zfgbk{1$_R+eR*|(audjRlZ=K0ZrZN#X#SW*Nk`cI!%jWwaiD_^o$&hkK-{Zj^Y4>@>{=hw@kq`&5 zqsN>7&IR!6{N#v|$Wq_`#Df7tYOl%Q&0(|7DN_tO5)C`P{X6j!CcNfME(Yi4mh|X; z0NN8{57EEFL#otwZcsKG*d zhiiR|I`2e>cv*&&_6~D^bDGG5y|PAk>rMG+3lF);5VFtoozG5!+qbT+bYDC#s0%LJ zUHpzJUH;=z_P+Na+!fx;XYWTYl)g%AtPWz_uWSTdKKRnFM($&u1?Y9VPPs9aiJw_# zsACQlhP~D6yTmbdr8cv0)aDs%ConJ13w-rSZUXahJVS!fyNAp#`a3sz;oLpg8B{($ zm)@&!NeVDr{cySSH0kcE!8+aowe%Vy?C0JlJD<)zwFgE}l9~Dpv}GBq*png%ToZIL z)jbI?Z7*+)#EueX#l4Uxm3GfC)XZF>IldE+oPPBcC&Va=;ZM7&b$a9J7>} zJwlGmdDxICFv916f@csHc*2CmB&eQX;sol$SBT~e+s{NY-5qt9Lp*;S` z#De}Rj<=4qBzISPKMsoHlcVX_GY-Yfk6|<&qxj_Eu}1{9Db=$@dR;P^r-oZKECN3fHJZi!C3<6HwQ{faW$1 z&Q-mpJ>plV$(QgS0tiO1kvrkDfn80qOS*>C78nvuA5}cCMGk)y+(3j-?9bk<-fG?G zEp`|E#y3oMdG&77s(RZ$3GdIQ*O-5y$g>2U1zUqyXC~tb65`bKAI zcm7QKnsaatAR&Tp$SyqfMGGtxzzeft6MuIPL&#yY%{yXg`>Uhp*v4IE$rX%wj*`0+ zh)${-KI~z(JGqP#B~pHSSJZYP>0d)DM0M2#Zf>_^;*;oyv%eA_H&>^QmeFf(S~Emf z_dIvP6QzFZet$^b|1r7*Rm{n82lcz7&+3>0`p_%Nd zaxX`m=sPDHq78>82lrj5XwPcj<9mks%Qq}AVrR6-dQ=YZN3?u1sKcM>ztY|lIL=~u z$lJPya%_4(s*J1cFoWml8Qse5%9-X`b822^Gxn7U+LhaB5YxAGF@cB|nWT z4U8yIV$WBB6Rjo+(LU$mM~^NPZ`;*tdj%m38i_b}e5U5BbYSH{z$qNPQJOTUMoZS4Ey6_BL-N z{=K_-F8^fZ`;S7wsYAVHtK%7QnRmfNc}aP%k#MeyKm&t&KG14_>JJ*fC!3i5tuP6L zhA1*8AK&YjFIoQ*6l>(4&i!`LxFRIi+~3u_XN-hEF(90KMu8x>^~1Q15qCyXJP0?8 zN4ARZ&&FI+AR;m)tXSZUnYGC_X#YLs4M1g?mlBAn$zU! zq&l%tr^#oLV*8*fk1C9eVn94s9!ef!$C77Z|4r_2@56A9+y<&k?7KS2&*v}FE<pjmZb4^cnBcYpNU~FtXRsG?@+SZoq>|W7=d&=LmFJYVcdf99%f;#K229`+t4X^ z^!Z7@*E16R0Q@7C7_LDr41?6!&7sRLp{h4bzObLBD6^i@5G-hZSS#~6*~9j)eqfKu z;_xD$DZ|P#<&fY)`9lPzj6_=2h`kLK1s3ja5@B`PwZ(^mcwu@-&m1~2jHg1oHhQVw z`ljForS0AFpX+HXj+xL(s))SsvS0CR%VpA+b3WIjJ#9=Uaa7n-J0y&%u6e}QijMz< z9%nef6sys#wb7Awhln{rgqt`uMUpfBnDjx7=+%VYH$L8{F; zNA@osT`5fc;^`B(U4@;X=RfxH-2S$6bPtEZU&Zgpsd;&3FbV;J0WcFV#_k=NEl+G8NTzpJlm{iYdTv}$`0Prr}zH;vY^Pj5>_Q1h8q z{^6wqIQH)lB$_I8FaCLF{4n0)N@}e}Ld~QLH{^_$`_ErVm)vAcj`s>z>B&X2;qDyJ6t6-j zwB4ki3Y~Xfd>ZFM(N_sTD|1;)dZAP;Kd#TcrLRLp@mEw=@c*HeK>cq?PN!4)Ryw~jyKm1I^bch*Jh zi2m865y7{%n|Ce~+g&UklQYZL(e!@#h@Q-7Y>8QoxdzjcaBn7!K{S_Tg)r#r5@IO+ zj4Hc6IBJAKj=XAX{%%pM=-@_U^&xUons20U4(UVQn9}g-PM%na#fAsu%buTp9v~jq z@yXdErGL0tim~?)%{M|EN4~>h7|HZPqd?(fab~J_W>l@9&wEtydp-mH?)T5f(Zao! ziSthLjGiVTpp|3?#4Bk00*maMHaCp^p^|y_?Ad~~gQMe#M`J;gR-}w3sVM2ZX;RGY zI2D$T12LyhDe}w`-9FnX8Pa2Jwn2Gn5n}hi)^v76ror6{%646T5fl~<_<8D~M@;pH z@EGTi2yxmXbn=^!J_LNSA81VKiyI4hp&&M-Ubuw3#T$}qrqSQ4mb=;bJJ@EQ)MLw5 zbh(YNmeu@gb4Hm7Md*OP^rJ6K-Rf6AH0xP98I(zeZlr~*Oh87(+MIvIPKPJ^98xff zPdM3@TJW<6ET5b1AWRrD-0cTdX7e@5f80d8GE8Xl{;Jga_|+W*oz~~nJQM96k3M_G z)!2(6jVW(`CM9%l)l;qwA++jp6rU8a`o8nEF7(Dsan{^z$GcP$%*BIf2s9K6D)fMs zlN^$%Cx4c5)$L!Fv42!3LF5@GJ(EE4_-e8@^_diF^GPBOf;hFcLOA9Guz$sch>%g- zFkx10a_CF|0>Db6<#ORkE}>$jZ5EYC+C-1t7nViWhkjUOd2KC-9t^pWbwl(UR02NH zv{ntMvR)YmD~ncm0glLMCI!A1ZRz;|m@@M^G-T+eU&2Mt-ltM$yc8vVfLp)&v&e2x z<*9?fk=xbI$DxA=1v&oRS#105=0(VgUDo2pnRb|po{D9Ugb+~15MlVkc%Hq^1ey;E z127!40%i_$OwET+*GRvXloEsRe%&|W9(7lss>a!#sx0}|pK z39D19-=c~Q(ZLp1J$`C7E#u9KV<=&iQR5DY9CwoUp{Q`270u}32#~?8#5!I3i;ITB zGlEO0rgwvW@8R2$6_rtHNAtTy=tpvZf%oDO#k+iQhn<5TzPSW86@dvI-fk=Ek~Tj3 zgJMCc@G1Xz%|OE~KvkG?9W{na{rz?x{&YS>-!#k{(dT^;tKcO*dg01^eb_W3eq^DHGNJhh}dr z$YI&3?L6dtl{ZjQyiezYa#>rr5@rwD>XP)XW_%-r>-%VN7napooAz`E<73{_S2P6d zbj2W!#};wW>U&y3f8lbDk>663pddp+knR?*NUdkG3w2m4ndH11ju-JrOz`*K)!CJW zLxmcuDZrHP{Xl!aI^6bEy{yVx=>Z!avfDE_;?mo}a+cT~QCb4aL7A+m!mW|v4@S?2 zf|;*d>}h%}_p3@-$&0Qt!_tBc?W%oIOL|N^k4g%=&qq`?~1n>uxC1^4Jb&$ z`2__INU#v$eFrkC^ZRmqqF1ON$rp!62r!|daBU%EQ{e3wZ}fBr3T9SkMADXyfQPlm zSsGEkI=TM$k_ElxoGAtTM*-Pg=Y9 z+LP7XX23!bo_BLF++*OGb4#4B?A#OIKoLuu`}^v~?{RDLW+RQlS}$+gEpJRvNT=A` zrE;fZ5w(@epa>VsuSGv56}#z-S8^~?)sIVS_og}D)~daw<;a|#N^sdci$dhYJnJR1 zzdgA?)yYWWaSvZzTvI=Bp5Vo~j?20>^B3fQ2-BI*(tUvH{$F11M<+$athe0r{3)cU znY`GivPB`sq>5i7fF1Ccvkr|xGFi#8;0BREut;5HS49vB>%OtvLo=009OH&N3t@wr z;@ZsnTx~?Y`ZlIQM1nz=Vx-NH;Q|lwE;EYl(I4`l`gAL0dDkZZ8{3{>&!C6RFFLKh zDTvhih#gJdr%fyjgdjM(us@Q`tDZh*VRe2cN91PR zHg?x$m+|yX1ecMCCiT;!j9qN#C7?eGRASrvjg< zB#!poDum?tXF-a4VVl9wM$j%3`it;RdD7U9gPPCWqC))0`bqQLvN}Z*+Wn^pz{`Od zk@D~B>9){`FD@gWXbO3~3w1`=+{NDL`H~ZiN9#1z+HMsq_Y0b^glhwMJ<4=`c+`#x z*OBD-*c$6)a`S!k`RM)4TlX3XzgzMCrh(qXbLoPOkTfSRp8KQ-UJ1xOr{ebc ze+VS-bQ&pZc=}eIsEm;FFLJG;CYkHbatgVHo#x3!#h%OC9tO6AUlch6Y<__zi&4`R zVR>LtFF_E}-h8}}J;vZm=|2@NsQmee31(SEadBiXzNh%F?$!G@AT2zQ*#FyO&uSxX z&(>}jCz%GPE$R@cEOHnj@m3F!UW|InTB6CEox#y5U(P-%s5?n?H=5yl)Ic?@mQmbg zuA^j)#QWC)RW}G+Ofr2%EYsUje1524aYL8o3$tGJEd=B5eIZJ;ow+eaIFrOm6|X0M z8>Z@6dSR*bCXiSmN9RWkrvl1wFr+(d3cE({d)~2F($StSxErd#m(s zM6@$AUietC*$68UJlV~n5hVXe7IZB*P`JyJd6IZ!W<3qF6WaY(P zLj?lWD&klJEP{X~r8;mpe%>Abz+JE4M(OX8^S36>_jhzZ;EUBm-Z&N>jCDS|O>u%HU|4iFl4L=5-IPt%Z|^nkpB|i=QhGlfYG*#giRPzpq&Ek9iiHV{AC` zOvJhs9#o1>5k;|=MbkF?w?_4vlup45*4Ic=9k$7JeeUEmx}BJN4a_X-x{Ve^mm|b{ zW7=^7ygyFg5%Xd#DjWRuB`=NiO>^{DO?||%wqC4^>Hc3#0lPK zb)Cb1vk0NZp7n$Kf2*hYZ$&o$m);cni|GQhau5W#?l1TsCxe(m5PopKmUY0ONsr`N zeJjXofc1T?HISKBhTH|L5163-sedzoE-sBXzVBmByQLT2 z-rk5CH*NrraAEQA&^I^tWUV91ncass>I1P`RGGyZKSj{+SmQ0;CAdlaqDOw6mNj2fFZBy{moh#;F_d zw_vob%_P}vDxd3_zCaSN|K|@6FYoPJw@%(-#SxK^979?in3Fn$!aVwEycKf z`(ld+XbO5(RwBSX9e6#D8SAd&bp?Wwz1(CE-K+DjdrgivMZzA_R6~glykWqGKz+MM z%%)cUeqfawD>@;e+I*B9b`wU!PH&+21FD<2xL-qqaA4a>rts;>$@th9x_|2<=N%yS z)>=+hDk&)~WQl!>>@7SG34ofTSCWr~#TzYItb7AnxgT0dv!CRc%GZSmCDX+S>KdU6-g6v?t?7uV9MFXFVeXqOzVIxeEF3J9}`{MZhF5Ha>z` zD#)N>HGSLWc}#yo|KuJ6L%;>Yzor*0El;4`_Iqb3+NMTBUj7&GXFEGOkoJy_j{f|i z;I~Q%3BmM%4Le%@)dkGDk&(CtYGj+;8DStZf?IHKaO}tahGGGz5nJ2amKGLqtg3Pw zpG`qo024}3w88cg&63Af7!N=})8x200s~rTG6OLX>I!xso@i?~z3rGkIDwfYkRv_! z=6nlaFlh%g1E5}XUOF%L!~zp2T4NrJ^Y7-Uvy;<`jR3IEffE51qv7Oq2#gA#41HTY z0P5-d&W_i{5EFuniwnlU(6zo+0{~A7IUTqmKyHYWmqP&MXamk4dJmgJxfx%+m>3zY ztghZ~Tp6pfPRq#10Pbl>h_s3diBD!`CO9s|Lx*o|ZEZh)+QF*4yu3g^R8?7tjfI73 zbG)YuL~O7SU@F2qAB1K|E|=#u2HStvf87@l7#khsr=ih-TZQTgWo~zO7j$JA&m(}U zIose){20OrOtp)Oih$Dq?1qkH5F%U`U0cS!k9CZUoGwlsZIk1+QGlWYd|M0SNX5?( z41k)}GcyCr%oY12TVFIar2*fL0G<){ty@ftj0uAF*Z+=2nzafvxG$8>{BGfc(&~8x6(tFY%7>ZMgaiSzAx2;w zK6+FK-zmw^!Py6-2|m}~2A^ct78daC+@Z}EhkM-|FUtuF`_9pHUTQI3I$mZhom~dS zB7`5{^M{jgiJ3`sn_=gMVa|Q~a2L2ZaL(}GYYA3-oTZ`U!m||c5n!v|mr31PSuwJ< zrlz9OGW%X#EdV8tm$o1z_W# zMnJ+PB3c3MijfhYPO}f_j1a&c1*H&ZCV=ll_Q=V?%#7IwXcg>g<==o4=zVnwcQZIR z2(nRN_(;8aC;O?W$P_3j-^wU?$+?dZHj@7@wSkZ)wnO@&Zo9af`)lqcHH8 za~XizwmaJd5&+;c0}ZOjD={X92cieCd-lzckdUq!`J!oHtuRr+YMX-62=*W;xI5ASQURN}4|kuB6@o4Sc;xRuhXeG z?HBPp<-|I;7Ccf2aDtU&W*Pu5+`^LcAF%_ZD^*uUX66T+oYi*A!9!U*z$L zr2HF`-?pc}zaMr9tF5}Gri60+zZE=eHS$@E0hNuOyAn*$IbVWb0~ZQNfb`Cw(ISWa1HbxTH5Z2p?!YC�&ufKV)$@WS~|&z*+?1 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 V++h(3Q@jBxHD#@nxuo;{{|lVF-=zQm literal 0 HcmV?d00001 diff --git a/doc/tutorials/introduction/how_to_write_a_tutorial/how_to_write_a_tutorial.markdown b/doc/tutorials/introduction/how_to_write_a_tutorial/how_to_write_a_tutorial.markdown deleted file mode 100644 index bed26f9..0000000 --- a/doc/tutorials/introduction/how_to_write_a_tutorial/how_to_write_a_tutorial.markdown +++ /dev/null @@ -1,3 +0,0 @@ -How to write a tutorial for OpenCV {#tutorial_how_to_write_a_tutorial} -================================== -@todo new tutorial guide needed diff --git a/doc/tutorials/introduction/how_to_write_a_tutorial/how_to_write_a_tutorial.rst b/doc/tutorials/introduction/how_to_write_a_tutorial/how_to_write_a_tutorial.rst deleted file mode 100644 index 7696be4..0000000 --- a/doc/tutorials/introduction/how_to_write_a_tutorial/how_to_write_a_tutorial.rst +++ /dev/null @@ -1,440 +0,0 @@ -.. _howToWriteTutorial: - -How to write a tutorial for OpenCV -********************************** - -Okay, so assume you have just finished a project of yours implementing something -based on OpenCV and you want to present/share it with the community. Luckily, OpenCV -is an *open source project*. This means that anyone has access to the full source -code and may propose extensions. And a good tutorial is a valuable addition to the -library! Please read instructions on contribution process here: -http://opencv.org/contribute.html. You may also find this page helpful: -:how_to_contribute:`How to contribute <>`. - -While making a robust and practical library (like OpenCV) is great, the success of a -library also depends on how user friendly it is. To improve on this aspect, the -OpenCV team has already been listening to user feedback at :opencv_qa:`OpenCV Q&A -forum <>` and by making samples you can find in the source directories -:file:`samples` folder. The addition of the tutorials (in both online and PDF format) -is an extension of these efforts. - -Goal -==== - -.. _reST: http://docutils.sourceforge.net/rst.html -.. |reST| replace:: reStructuredText -.. |Sphinx| replace:: Sphinx -.. _Sphinx: http://sphinx.pocoo.org/ - -The tutorials are just as an important part of the library as the implementation of -those crafty data structures and algorithms you can find in OpenCV. Therefore, the -source codes for the tutorials are part of the library. And yes, I meant source -codes. The reason for this formulation is that the tutorials are written by using the -|Sphinx|_ documentation generation system. This is based on the popular Python -documentation system called |reST|_ (reST). ReStructuredText is a really neat -language that by using a few simple conventions (indentation, directives) and -emulating old school email writing techniques (text only) tries to offer a simple -way to create and edit documents. Sphinx extends this with some new features and -creates the resulting document in both HTML (for web) and PDF (for offline usage) -format. - - -Usually, an OpenCV tutorial has the following parts: - -1. A source code demonstration of an OpenCV feature: - - a. One or more CPP, Python, Java or other type of files depending for what OpenCV offers support and for what language you make the tutorial. - #. Occasionaly, input resource files required for running your tutorials application. - - -#. A table of content entry (so people may easily find the tutorial): - - a. Adding your stuff to the tutorials table of content (**reST** file). - #. Add an image file near the TOC entry. - - -#. The content of the tutorial itself: - - a. The **reST** text of the tutorial - #. Images following the idea that "*A picture is worth a thousand words*". - #. For more complex demonstrations you may create a video. - -As you can see you will need at least some basic knowledge of the *reST* system in order to complete the task at hand with success. However, don't worry *reST* (and *Sphinx*) was made with simplicity in mind. It is easy to grasp its basics. I found that the `OpenAlea documentations introduction on this subject `_ (or the `Thomas Cokelaer one `_ ) should enough for this. If for some directive or feature you need a more in-depth description look it up in the official |reST|_ help files or at the |Sphinx|_ documentation. - -In our world achieving some tasks is possible in multiple ways. However, some of the roads to take may have obvious or hidden advantages over others. Then again, in some other cases it may come down to just simple user preference. Here, I'll present how I decided to write the tutorials, based on my personal experience. If for some of them you know a better solution and you can back it up feel free to use that. I've nothing against it, as long as it gets the job done in an elegant fashion. - -Now the best would be if you could make the integration yourself. For this you need first to have the source code. I recommend following the guides for your operating system on acquiring OpenCV sources. For Linux users look :ref:`here ` and for :ref:`Windows here `. You must also install python and sphinx with its dependencies in order to be able to build the documentation. - -Once you have downloaded the repository to your hard drive you can take a look in the OpenCV directory to make sure you have both the samples and doc folder present. Anyone may download the latest source files from :file:`git://github.com/Itseez/opencv.git` . Nevertheless, not everyone has upload (commit/submit) rights. This is to protect the integrity of the library. If you plan doing more than one tutorial, and would like to have an account with commit user rights you should first register an account at http://code.opencv.org/ and then contact OpenCV administrator -delete-admin@-delete-opencv.org. Otherwise, you can just send the resulting files to us at -delete-admin@-delete-opencv.org and we'll add it. - - -Format the Source Code -====================== - -Before I start this let it be clear: the main goal is to have a working sample code. However, for your tutorial to be of a top notch quality you should follow a few guide lines I am going to present here. In case you have an application by using the older interface (with *IplImage*, *cvMat*, *cvLoadImage* and such) consider migrating it to the new C++ interface. The tutorials are intended to be an up to date help for our users. And as of OpenCV 2 the OpenCV emphasis on using the less error prone and clearer C++ interface. Therefore, if possible please convert your code to the C++ interface. For this it may help to read the :ref:`InteroperabilityWithOpenCV1` tutorial. However, once you have an OpenCV 2 working code, then you should make your source code snippet as easy to read as possible. Here're a couple of advices for this: - - -.. container:: enumeratevisibleitemswithsquare - - + Add a standard output with the description of what your program does. Keep it short and yet, descriptive. This output is at the start of the program. In my example files this usually takes the form of a *help* function containing the output. This way both the source file viewer and application runner can see what all is about in your sample. Here's an instance of this: - - .. code-block:: cpp - - void help() - { - cout - << "--------------------------------------------------------------------------" << endl - << "This program shows how to write video files. You can extract the R or G or B color channel " - << " of the input video. You can choose to use the source codec (Y) or select a custom one. (N)"<< endl - << "Usage:" << endl - << "./video-write inputvideoName [ R | G | B] [Y | N]" << endl - << "--------------------------------------------------------------------------" << endl - << endl; - } - // ... - int main(int argc, char *argv[], char *window_name) - { - help(); - // here comes the actual source code - } - - Additionally, finalize the description with a short usage guide. This way the user will know how to call your programs, what leads us to the next point. - - + Prefer command line argument controlling instead of hard coded one. If your program has some variables that may be changed use command line arguments for this. The tutorials, can be a simple try-out ground for the user. If you offer command line controlling for the input image (for example), then you offer the possibility for the user to try it out with his/her own images, without the need to mess in the source code. In the upper example you can see that the input image, channel and codec selection may all be changed from the command line. Just compile the program and run it with your own input arguments. - - + Be as verbose as possible. There is no shame in filling the source code with comments. This way the more advanced user may figure out what's happening right from the sample code. This advice goes for the output console too. Specify to the user what's happening. Never leave the user hanging there and thinking on: "Is this program now crashing or just doing some computationally intensive task?." So, if you do a training task that may take some time, make sure you print out a message about this before starting and after finishing it. - - + Throw out unnecessary stuff from your source code. This is a warning to not take the previous point too seriously. Balance is the key. If it's something that can be done in a fewer lines or simpler than that's the way you should do it. Nevertheless, if for some reason you have such sections notify the user why you have chosen to do so. Keep the amount of information as low as possible, while still getting the job done in an elegant way. - - + Put your sample file into the :file:`opencv/samples/cpp/tutorial_code/sectionName` folder. If you write a tutorial for other languages than cpp, then change that part of the path. Before completing this you need to decide that to what section (module) does your tutorial goes. Think about on what module relies most heavily your code and that is the one to use. If the answer to this question is more than one modules then the *general* section is the one to use. For finding the *opencv* directory open up your file system and navigate where you downloaded our repository. - - + If the input resources are hard to acquire for the end user consider adding a few of them to the :file:`opencv/samples/cpp/tutorial_code/images`. Make sure that who reads your code can try it out! - -Add the TOC entry -================= - -For this you will need to know some |reST|_. There is no going around this. |reST|_ files have **rst** extensions. However, these are simple text files. Use any text editor you like. Finding a text editor that offers syntax highlighting for |reST|_ was quite a challenge at the time of writing this tutorial. In my experience, `Intype `_ is a solid option on Windows, although there is still place for improvement. - -Adding your source code to a table of content is important for multiple reasons. First and foremost this will allow for the user base to find your tutorial from our websites tutorial table of content. Secondly, if you omit this *Sphinx* will throw a warning that your tutorial file isn't part of any TOC tree entry. And there is nothing more than the developer team hates than an ever increasing warning/error list for their builds. *Sphinx* also uses this to build up the previous-back-up buttons on the website. Finally, omitting this step will lead to that your tutorial will **not** be added to the PDF version of the tutorials. - -Navigate to the :file:`opencv/doc/tutorials/section/table_of_content_section` folder (where the section is the module to which you're adding the tutorial). Open the *table_of_content_section* file. Now this may have two forms. If no prior tutorials are present in this section that there is a template message about this and has the following form: - -.. code-block:: rst - - .. _Table-Of-Content-Section: - - Section title - ----------------------------------------------------------- - - Description about the section. - - .. include:: ../../definitions/noContent.rst - - .. raw:: latex - - \pagebreak - -The first line is a reference to the section title in the reST system. The section title will be a link and you may refer to it via the ``:ref:`` directive. The *include* directive imports the template text from the definitions directories *noContent.rst* file. *Sphinx* does not creates the PDF from scratch. It does this by first creating a latex file. Then creates the PDF from the latex file. With the *raw* directive you can directly add to this output commands. Its unique argument is for what kind of output to add the content of the directive. For the PDFs it may happen that multiple sections will overlap on a single page. To avoid this at the end of the TOC we add a *pagebreak* latex command, that hints to the LATEX system that the next line should be on a new page. - -If you have one of this, try to transform it to the following form: - -.. include:: ../../definitions/tocDefinitions.rst - -.. code-block:: rst - - .. _Table-Of-Content-Section: - - Section title - ----------------------------------------------------------- - - .. include:: ../../definitions/tocDefinitions.rst - - + - .. tabularcolumns:: m{100pt} m{300pt} - .. cssclass:: toctableopencv - - =============== ====================================================== - |MatBasicIma| **Title:** :ref:`matTheBasicImageContainer` - - *Compatibility:* > OpenCV 2.0 - - *Author:* |Author_BernatG| - - You will learn how to store images in the memory and how to print out their content to the console. - - =============== ===================================================== - - .. |MatBasicIma| image:: images/matTheBasicImageStructure.jpg - :height: 90pt - :width: 90pt - - .. raw:: latex - - \pagebreak - - .. toctree:: - :hidden: - - ../mat - the basic image container/mat - the basic image container - -If this is already present just add a new section of the content between the include and the raw directives (excluding those lines). Here you'll see a new include directive. This should be present only once in a TOC tree and the reST file contains the definitions of all the authors contributing to the OpenCV tutorials. We are a multicultural community and some of our name may contain some funky characters. However, reST **only supports** ANSI characters. Luckily we can specify Unicode characters with the *unicode* directive. Doing this for all of your tutorials is a troublesome procedure. Therefore, the tocDefinitions file contains the definition of your author name. Add it here once and afterwards just use the replace construction. For example here's the definition for my name: - -.. code-block:: rst - - .. |Author_BernatG| unicode:: Bern U+00E1 t U+0020 G U+00E1 bor - -The ``|Author_BernatG|`` is the text definitions alias. I can use later this to add the definition, like I've done in the TOCs *Author* part. After the ``::`` and a space you start the definition. If you want to add an UNICODE character (non-ASCI) leave an empty space and specify it in the format U+(UNICODE code). To find the UNICODE code of a character I recommend using the `FileFormat `_ websites service. Spaces are trimmed from the definition, therefore we add a space by its UNICODE character (U+0020). - -Until the *raw* directive what you can see is a TOC tree entry. Here's how a TOC entry will look like: - -+ - .. tabularcolumns:: m{100pt} m{300pt} - .. cssclass:: toctableopencv - - =============== ====================================================== - |MatBasicIma| **Title:** :ref:`matTheBasicImageContainer` - - *Compatibility:* > OpenCV 2.0 - - *Author:* |Author_BernatG| - - You will learn how to store images in the memory and how to print out their content to the console. - - =============== ====================================================== - - .. |MatBasicIma| image:: images/matTheBasicImageStructure.jpg - :height: 90pt - :width: 90pt - -As you can see we have an image to the left and a description box to the right. To create two boxes we use a table with two columns and a single row. In the left column is the image and in the right one the description. However, the image directive is way too long to fit in a column. Therefore, we need to use the substitution definition system. We add this definition after the TOC tree. All images for the TOC tree are to be put in the images folder near its |reST|_ file. We use the point measurement system because we are also creating PDFs. PDFs are printable documents, where there is no such thing that pixels (px), just points (pt). And while generally space is no problem for web pages (we have monitors with **huge** resolutions) the size of the paper (A4 or letter) is constant and will be for a long time in the future. Therefore, size constrains come in play more like for the PDF, than the generated HTML code. - -Now your images should be as small as possible, while still offering the intended information for the user. Remember that the tutorial will become part of the OpenCV source code. If you add large images (that manifest in form of large image size) it will just increase the size of the repository pointlessly. If someone wants to download it later, its download time will be that much longer. Not to mention the larger PDF size for the tutorials and the longer load time for the web pages. In terms of pixels a TOC image should not be larger than 120 X 120 pixels. Resize your images if they are larger! - -.. note:: - - If you add a larger image and specify a smaller image size, *Sphinx* will not resize that. At build time will add the full size image and the resize will be done by your browser after the image is loaded. A 120 X 120 image is somewhere below 10KB. If you add a 110KB image, you have just pointlessly added a 100KB extra data to transfer over the internet for every user! - -Generally speaking you shouldn't need to specify your images size (excluding the TOC entries). If no such is found *Sphinx* will use the size of the image itself (so no resize occurs). Then again if for some reason you decide to specify a size that should be the **width** of the image rather than its height. The reason for this again goes back to the PDFs. On a PDF page the height is larger than the width. In the PDF the images will not be resized. If you specify a size that does not fit in the page, then what does not fits in **will be cut off**. When creating your images for your tutorial you should try to keep the image widths below 500 pixels, and calculate with around 400 point page width when specifying image widths. - -The image format depends on the content of the image. If you have some complex scene (many random like colors) then use *jpg*. Otherwise, prefer using *png*. They are even some tools out there that optimize the size of *PNG* images, such as `PNGGauntlet `_. Use them to make your images as small as possible in size. - -Now on the right side column of the table we add the information about the tutorial: - -.. container:: enumeratevisibleitemswithsquare - - + In the first line it is the title of the tutorial. However, there is no need to specify it explicitly. We use the reference system. We'll start up our tutorial with a reference specification, just like in case of this TOC entry with its `` .. _Table-Of-Content-Section:`` . If after this you have a title (pointed out by the following line of -), then Sphinx will replace the ``:ref:`Table-Of-Content-Section``` directive with the tile of the section in reference form (creates a link in web page). Here's how the definition looks in my case: - - .. code-block:: rst - - .. _matTheBasicImageContainer: - - Mat - The Basic Image Container - ******************************* - - Note, that according to the |reST|_ rules the * should be as long as your title. - - + Compatibility. What version of OpenCV is required to run your sample code. - - + Author. Use the substitution markup of |reST|_. - - + A short sentence describing the essence of your tutorial. - -Now before each TOC entry you need to add the three lines of: - -.. code-block:: cpp - - + - .. tabularcolumns:: m{100pt} m{300pt} - .. cssclass:: toctableopencv - -The plus sign (+) is to enumerate tutorials by using bullet points. So for every TOC entry we have a corresponding bullet point represented by the +. Sphinx is highly indenting sensitive. Indentation is used to express from which point until to which point does a construction last. Un-indentation means end of that construction. So to keep all the bullet points to the same group the following TOC entries (until the next +) should be indented by two spaces. - -Here, I should also mention that **always** prefer using spaces instead of tabs. Working with only spaces makes possible that if we both use monotype fonts we will see the same thing. Tab size is text editor dependent and as should be avoided. *Sphinx* translates all tabs into 8 spaces before interpreting it. - -It turns out that the automatic formatting of both the HTML and PDF(LATEX) system messes up our tables. Therefore, we need to help them out a little. For the PDF generation we add the ``.. tabularcolumns:: m{100pt} m{300pt}`` directive. This means that the first column should be 100 points wide and middle aligned. For the HTML look we simply name the following table of a *toctableopencv* class type. Then, we can modify the look of the table by modifying the CSS of our web page. The CSS definitions go into the :file:`opencv/doc/_themes/blue/static/default.css_t` file. - -.. code-block:: css - - .toctableopencv - { - width: 100% ; - table-layout: fixed; - } - - - .toctableopencv colgroup col:first-child - { - width: 100pt !important; - max-width: 100pt !important; - min-width: 100pt !important; - } - - .toctableopencv colgroup col:nth-child(2) - { - width: 100% !important; - } - -However, you should not need to modify this. Just add these three lines (plus keep the two space indentation) for all TOC entries you add. At the end of the TOC file you'll find: - -.. code-block:: rst - - .. raw:: latex - - \pagebreak - - .. toctree:: - :hidden: - - ../mat - the basic image container/mat - the basic image container - -The page break entry comes for separating sections and should be only one in a TOC tree |reST|_ file. Finally, at the end of the TOC tree we need to add our tutorial to the *Sphinx* TOC tree system. *Sphinx* will generate from this the previous-next-up information for the HTML file and add items to the PDF according to the order here. By default this TOC tree directive generates a simple table of contents. However, we already created a fancy looking one so we no longer need this basic one. Therefore, we add the *hidden* option to do not show it. - -The path is of a relative type. We step back in the file system and then go into the :file:`mat - the basic image container` directory for the :file:`mat - the basic image container.rst` file. Putting out the *rst* extension for the file is optional. - -Write the tutorial -================== - -Create a folder with the name of your tutorial. Preferably, use small letters only. Then create a text file in this folder with *rst* extension and the same name. If you have images for the tutorial create an :file:`images` folder and add your images there. When creating your images follow the guidelines described in the previous part! - -Now here's our recommendation for the structure of the tutorial (although, remember that this is not carved in the stone; if you have a better idea, use it!): - - -.. container:: enumeratevisibleitemswithsquare - - + Create the reference point and the title. - - .. code-block:: rst - - .. _matTheBasicImageContainer: - - Mat - The Basic Image Container - ******************************* - - You start the tutorial by specifying a reference point by the ``.. _matTheBasicImageContainer:`` and then its title. The name of the reference point should be a unique one over the whole documentation. Therefore, do not use general names like *tutorial1*. Use the * character to underline the title for its full width. The subtitles of the tutorial should be underlined with = charachter. - - + Goals. You start your tutorial by specifying what you will present. You can also enumerate the sub jobs to be done. For this you can use a bullet point construction. There is a single configuration file for both the reference manual and the tutorial documentation. In the reference manuals at the argument enumeration we do not want any kind of bullet point style enumeration. Therefore, by default all the bullet points at this level are set to do not show the dot before the entries in the HTML. You can override this by putting the bullet point in a container. I've defined a square type bullet point view under the name *enumeratevisibleitemswithsquare*. The CSS style definition for this is again in the :file:`opencv\doc\_themes\blue\static\default.css_t` file. Here's a quick example of using it: - - .. code-block:: rst - - .. container:: enumeratevisibleitemswithsquare - - + Create the reference point and the title. - + Second entry - + Third entry - - Note that you need the keep the indentation of the container directive. Directive indentations are always three (3) spaces. Here you may even give usage tips for your sample code. - - + Source code. Present your samples code to the user. It's a good idea to offer a quick download link for the HTML page by using the *download* directive and pointing out where the user may find your source code in the file system by using the *file* directive: - - .. code-block:: rst - - Text :file:`samples/cpp/tutorial_code/highgui/video-write/` folder of the OpenCV source library - or :download:`text to appear in the webpage - <../../../../samples/cpp/tutorial_code/HighGUI/video-write/video-write.cpp>`. - - For the download link the path is a relative one, hence the multiple back stepping operations (..). Then you can add the source code either by using the *code block* directive or the *literal include* one. In case of the code block you will need to actually add all the source code text into your |reST|_ text and also apply the required indentation: - - .. code-block:: rst - - .. code-block:: cpp - - int i = 0; - l = ++j; - - The only argument of the directive is the language used (here CPP). Then you add the source code into its content (meaning one empty line after the directive) by keeping the indentation of the directive (3 spaces). With the *literal include* directive you do not need to add the source code of the sample. You just specify the sample and *Sphinx* will load it for you, during build time. Here's an example usage: - - .. code-block:: rst - - .. literalinclude:: ../../../../samples/cpp/tutorial_code/HighGUI/video-write/video-write.cpp - :language: cpp - :linenos: - :tab-width: 4 - :lines: 1-8, 21-23, 25- - - After the directive you specify a relative path to the file from what to import. It has four options: the language to use, if you add the ``:linenos:`` the line numbers will be shown, you can specify the tab size with the ``:tab-width:`` and you do not need to load the whole file, you can show just the important lines. Use the *lines* option to do not show redundant information (such as the *help* function). Here basically you specify ranges, if the second range line number is missing than that means that until the end of the file. The ranges specified here do no need to be in an ascending order, you may even reorganize the structure of how you want to show your sample inside the tutorial. - - + The tutorial. Well here goes the explanation for why and what have you used. Try to be short, clear, concise and yet a thorough one. There's no magic formula. Look into a few already made tutorials and start out from there. Try to mix sample OpenCV code with your explanations. If with words is hard to describe something do not hesitate to add in a reasonable size image, to overcome this issue. - - When you present OpenCV functionality it's a good idea to give a link to the used OpenCV data structure or function. Because the OpenCV tutorials and reference manual are in separate PDF files it is not possible to make this link work for the PDF format. Therefore, we use here only web page links to the http://docs.opencv.org website. The OpenCV functions and data structures may be used for multiple tasks. Nevertheless, we want to avoid that every users creates its own reference to a commonly used function. So for this we use the global link collection of *Sphinx*. This is defined in the file:`opencv/doc/conf.py` configuration file. Open it and go all the way down to the last entry: - - .. code-block:: py - - # ---- External links for tutorials ----------------- - extlinks = { - 'rwimg' : ('http://docs.opencv.org/modules/imgcodecs/doc/reading_and_writing_images.html#%s', None) - } - - In short here we defined a new **rwimg** directive that refers to an external webpage link. Its usage is: - - .. code-block:: rst - - A sample function of the highgui modules image write and read page is the :rwimg:`imread() function `. - - Which turns to: A sample function of the highgui modules image write and read page is the :rwimg:`imread() function `. The argument you give between the <> will be put in place of the ``%s`` in the upper definition, and as the link will anchor to the correct function. To find out the anchor of a given function just open up a web page, search for the function and click on it. In the address bar it should appear like: ``http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images.html#imread`` . Look here for the name of the directives for each page of the OpenCV reference manual. If none present for one of them feel free to add one for it. - - For formulas you can add LATEX code that will translate in the web pages into images. You do this by using the *math* directive. A usage tip: - - .. code-block:: latex - - .. math:: - - MSE = \frac{1}{c*i*j} \sum{(I_1-I_2)^2} - - That after build turns into: - - .. math:: - - MSE = \frac{1}{c*i*j} \sum{(I_1-I_2)^2} - - You can even use it inline as ``:math:` MSE = \frac{1}{c*i*j} \sum{(I_1-I_2)^2}``` that turns into :math:`MSE = \frac{1}{c*i*j} \sum{(I_1-I_2)^2}`. - - If you use some crazy LATEX library extension you need to add those to the ones to use at build time. Look into the file:`opencv/doc/conf.py` configuration file for more information on this. - - + Results. Well, here depending on your program show one of more of the following: - - - Console outputs by using the code block directive. - - Output images. - - Runtime videos, visualization. For this use your favorite screens capture software. `Camtasia Studio `_ certainly is one of the better choices, however their prices are out of this world. `CamStudio `_ is a free alternative, but less powerful. If you do a video you can upload it to YouTube and then use the raw directive with HTML option to embed it into the generated web page: - - .. code-block:: rst - - You may observe a runtime instance of this on the `YouTube here `_. - - .. raw:: html - -
- -
- - This results in the text and video: You may observe a runtime instance of this on the `YouTube here `_. - - .. raw:: html - -
- -
- - When these aren't self-explanatory make sure to throw in a few guiding lines about what and why we can see. - - + Build the documentation and check for errors or warnings. In the CMake make sure you check or pass the option for building documentation. Then simply build the **docs** project for the PDF file and the **docs_html** project for the web page. Read the output of the build and check for errors/warnings for what you have added. This is also the time to observe and correct any kind of *not so good looking* parts. Remember to keep clean our build logs. - - + Read again your tutorial and check for both programming and spelling errors. If found any, please correct them. - - -Take home the pride and joy of a job well done! -=============================================== - -Once you are done please make a GitHub pull request with the tutorial. Now, to see -your work **live** you may need to wait some time. The PDFs are updated usually at -the launch of a new OpenCV version. The web pages are a little more diverse. They are -automatically rebuilt nightly. Currently we use ``2.4`` and ``master`` branches for -daily builds. So, if your pull request was merged to any of these branches, your -material will be published at `docs.opencv.org/2.4 `_ or -`docs.opencv.org/master `_ correspondingly. Everything -that was added to ``2.4`` is merged to ``master`` branch every week. Although, we try -to make a build every night, occasionally we might freeze any of the branches to fix -upcoming issues. During this it may take a little longer to see your work online, -however if you submitted it, be sure that eventually it will show up. - -If you have any questions or advices relating to this tutorial you can contact us at --delete-admin@-delete-opencv.org (delete the -delete- parts of that email address). diff --git a/doc/tutorials/introduction/how_to_write_a_tutorial/images/matTheBasicImageStructure.jpg b/doc/tutorials/introduction/how_to_write_a_tutorial/images/matTheBasicImageStructure.jpg deleted file mode 100644 index ab6704a3c9d692ff61542e0b453dca04861eb917..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6243 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 gM3thY|4}-0YFDGMF0Q* diff --git a/doc/tutorials/introduction/table_of_content_introduction/table_of_content_introduction.markdown b/doc/tutorials/introduction/table_of_content_introduction/table_of_content_introduction.markdown index efc7858..0d4e66e 100644 --- a/doc/tutorials/introduction/table_of_content_introduction/table_of_content_introduction.markdown +++ b/doc/tutorials/introduction/table_of_content_introduction/table_of_content_introduction.markdown @@ -6,140 +6,138 @@ Additionally you can find very basic sample source code to introduce you to the - @subpage tutorial_linux_install - *Compatibility:* \> OpenCV 2.0 + _Compatibility:_ \> OpenCV 2.0 - *Author:* Ana Huamán + _Author:_ Ana Huamán We will learn how to setup OpenCV in your computer! - @subpage tutorial_linux_gcc_cmake - *Compatibility:* \> OpenCV 2.0 + _Compatibility:_ \> OpenCV 2.0 - *Author:* Ana Huamán + _Author:_ Ana Huamán We will learn how to compile your first project using gcc and CMake - @subpage tutorial_linux_eclipse - *Compatibility:* \> OpenCV 2.0 + _Compatibility:_ \> OpenCV 2.0 - *Author:* Ana Huamán + _Author:_ Ana Huamán We will learn how to compile your first project using the Eclipse environment - @subpage tutorial_windows_install - *Compatibility:* \> OpenCV 2.0 + _Compatibility:_ \> OpenCV 2.0 - *Author:* Bernát Gábor + _Author:_ Bernát Gábor You will learn how to setup OpenCV in your Windows Operating System! - @subpage tutorial_windows_visual_studio_Opencv - *Compatibility:* \> OpenCV 2.0 + _Compatibility:_ \> OpenCV 2.0 - *Author:* Bernát Gábor + _Author:_ Bernát Gábor You will learn what steps you need to perform in order to use the OpenCV library inside a new Microsoft Visual Studio project. - @subpage tutorial_windows_visual_studio_image_watch - *Compatibility:* \>= OpenCV 2.4 + _Compatibility:_ \>= OpenCV 2.4 - *Author:* Wolf Kienzle + _Author:_ Wolf Kienzle You will learn how to visualize OpenCV matrices and images within Visual Studio 2012. - @subpage tutorial_java_dev_intro - *Compatibility:* \> OpenCV 2.4.4 + _Compatibility:_ \> OpenCV 2.4.4 - *Authors:* Eric Christiansen and Andrey Pavlenko + _Authors:_ Eric Christiansen and Andrey Pavlenko Explains how to build and run a simple desktop Java application using Eclipse, Ant or the Simple Build Tool (SBT). - @subpage tutorial_java_eclipse - *Compatibility:* \> OpenCV 2.4.4 + _Compatibility:_ \> OpenCV 2.4.4 - *Author:* Barış Evrim Demiröz + _Author:_ Barış Evrim Demiröz A tutorial on how to use OpenCV Java with Eclipse. - @subpage tutorial_clojure_dev_intro - *Compatibility:* \> OpenCV 2.4.4 + _Compatibility:_ \> OpenCV 2.4.4 - *Author:* Mimmo Cosenza + _Author:_ Mimmo Cosenza A tutorial on how to interactively use OpenCV from the Clojure REPL. - @subpage tutorial_android_dev_intro - *Compatibility:* \> OpenCV 2.4.2 + _Compatibility:_ \> OpenCV 2.4.2 - *Author:* Vsevolod Glumov + _Author:_ Vsevolod Glumov Not a tutorial, but a guide introducing Android development basics and environment setup - @subpage tutorial_O4A_SDK - *Compatibility:* \> OpenCV 2.4.2 + _Compatibility:_ \> OpenCV 2.4.2 - *Author:* Vsevolod Glumov + _Author:_ Vsevolod Glumov OpenCV4Android SDK: general info, installation, running samples - @subpage tutorial_dev_with_OCV_on_Android - *Compatibility:* \> OpenCV 2.4.3 + _Compatibility:_ \> OpenCV 2.4.3 - *Author:* Vsevolod Glumov + _Author:_ Vsevolod Glumov Development with OpenCV4Android SDK - @subpage tutorial_ios_install - *Compatibility:* \> OpenCV 2.4.2 + _Compatibility:_ \> OpenCV 2.4.2 - *Author:* Artem Myagkov, Eduard Feicho + _Author:_ Artem Myagkov, Eduard Feicho We will learn how to setup OpenCV for using it in iOS! - @subpage tutorial_arm_crosscompile_with_cmake - *Compatibility:* \> OpenCV 2.4.4 + _Compatibility:_ \> OpenCV 2.4.4 - *Author:* Alexander Smorkalov + _Author:_ Alexander Smorkalov We will learn how to setup OpenCV cross compilation environment for ARM Linux. - @subpage tutorial_display_image - *Compatibility:* \> OpenCV 2.0 + _Compatibility:_ \> OpenCV 2.0 - *Author:* Ana Huamán + _Author:_ Ana Huamán We will learn how to display an image using OpenCV - @subpage tutorial_load_save_image - *Compatibility:* \> OpenCV 2.0 + _Compatibility:_ \> OpenCV 2.0 - *Author:* Ana Huamán + _Author:_ Ana Huamán We will learn how to save an Image in OpenCV...plus a small conversion to grayscale -- @subpage tutorial_how_to_write_a_tutorial +- @subpage tutorial_documentation - *Compatibility:* \> OpenCV 1.0 + _Compatibility:_ \> OpenCV 3.0 - *Author:* Bernát Gábor + _Author:_ Maksim Shabunin - If you already have a good grasp on using OpenCV and have made some projects that would be - perfect presenting an OpenCV feature not yet part of these tutorials, here it is what you - need to know. + This tutorial describes new documenting process and some useful Doxygen features. diff --git a/doc/tutorials/introduction/table_of_content_introduction/table_of_content_introduction.rst b/doc/tutorials/introduction/table_of_content_introduction/table_of_content_introduction.rst index 046a4bd..78c89ea 100644 --- a/doc/tutorials/introduction/table_of_content_introduction/table_of_content_introduction.rst +++ b/doc/tutorials/introduction/table_of_content_introduction/table_of_content_introduction.rst @@ -293,26 +293,6 @@ world of the OpenCV. :height: 90pt :width: 90pt -* **Want to contribute, and see your own work between the OpenCV tutorials?** - - .. tabularcolumns:: m{100pt} m{300pt} - .. cssclass:: toctableopencv - - =============== ====================================================== - |HowToWriteT| **Title:** :ref:`howToWriteTutorial` - - *Compatibility:* > OpenCV 1.0 - - *Author:* |Author_BernatG| - - If you already have a good grasp on using OpenCV and have made some projects that would be perfect presenting an OpenCV feature not yet part of these tutorials, here it is what you need to know. - - =============== ====================================================== - - .. |HowToWriteT| image:: images/how_to_write_a_tutorial.png - :height: 90pt - :width: 90pt - .. raw:: latex \pagebreak @@ -337,4 +317,3 @@ world of the OpenCV. ../crosscompilation/arm_crosscompile_with_cmake ../display_image/display_image ../load_save_image/load_save_image - ../how_to_write_a_tutorial/how_to_write_a_tutorial -- 2.7.4