[NVL++]: new library and utilities

Hello List, Have recently released a series of libraries aimed at facilitating computer-vision tasks - taking out much of the boiler-plate associated with connecting to multiple cameras, and image streams generally. Work that is largely the product of almost 1.5 years work, using OpenCV as a back-end, but thread-safe, and all in modern C++, and largely header-file only. For those not particularly interested in computer-vision, there are libraries and miscellaneous utilities that may be of interest, in particular: - a library wrapper over Boost.Thread (not entirely complete, but covers majority of use-cases); and makes threading less error-prone - a library for parsing delimited strings (csv, etc) - a library for parsing command-line options (expresses intent better than Boost.Program_options, betters in some areas, lacks in others) - a library that with a bit more of effort can be made stand-alone for streaming ("chaining") of algorithms, though binders are common-place, some work herein presents alternative approaches. [[Documentation]]: is available, but not of Boost quality, however it is sufficient. Depending upon reaction, what I do with these libraries, depends largely upon feedback I get. [[License]]: largely C++ Boost license, with the exception of a few 3rd-party libs included in the package. [[Platform]]: developed & tested on Linux; compiles with GCC-4.4.2 [[Where to get it]]: for the time being can be found here (until comms at work can get their act together and put up on their open-website) - http://users.cecs.anu.edu.au/~manfredd ..there's only one file there: nvl++.tar.bz2 Cheers, -- Manfred

Hi Manfred, I tried something similar a while ago when developing a GIL ( generic image library ) extension to make OpenCV functionality available for GIL data types. It's not multi-threaded. If you're interested you can find the code here: http://code.google.com/p/gil-contributions/source/browse/#svn/trunk/gil_2/bo... Regards, Christian On Wed, Sep 1, 2010 at 10:56 AM, Manfred Doudar <manfred.doudar@rsise.anu.edu.au> wrote:
Hello List,
Have recently released a series of libraries aimed at facilitating computer-vision tasks - taking out much of the boiler-plate associated with connecting to multiple cameras, and image streams generally.
Work that is largely the product of almost 1.5 years work, using OpenCV as a back-end, but thread-safe, and all in modern C++, and largely header-file only.
For those not particularly interested in computer-vision, there are libraries and miscellaneous utilities that may be of interest, in particular:
- a library wrapper over Boost.Thread (not entirely complete, but covers majority of use-cases); and makes threading less error-prone
- a library for parsing delimited strings (csv, etc)
- a library for parsing command-line options (expresses intent better than Boost.Program_options, betters in some areas, lacks in others)
- a library that with a bit more of effort can be made stand-alone for streaming ("chaining") of algorithms, though binders are common-place, some work herein presents alternative approaches.
[[Documentation]]: is available, but not of Boost quality, however it is sufficient. Depending upon reaction, what I do with these libraries, depends largely upon feedback I get.
[[License]]: largely C++ Boost license, with the exception of a few 3rd-party libs included in the package.
[[Platform]]: developed & tested on Linux; compiles with GCC-4.4.2
[[Where to get it]]: for the time being can be found here (until comms at work can get their act together and put up on their open-website) -
http://users.cecs.anu.edu.au/~manfredd
..there's only one file there: nvl++.tar.bz2
Cheers, -- Manfred
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Hello Christian, On Wed, 1 Sep 2010 11:26:32 -0400 Christian Henning <chhenning@gmail.com> wrote:
Hi Manfred, I tried something similar a while ago when developing a GIL ( generic image library ) extension to make OpenCV functionality available for GIL data types. It's not multi-threaded.
[snip..] Admittedly, I could have benefited from GIL, but most of my work had been done by the time GIL was released. I've looked at your extensions, they are nice and crisp. However, what I've published goes considerably further, and would love to hear your opinion if you could spare time to look under the hood. Much of the unit tests illustrate functionality. ** Here's an example of face-detection: camera_device< > camera; video_server< > server(camera); video_client< > client(&server); // algorithm face_detect ftor("haarcascade_frontalface_alt.xml"); // run it client(ftor); ** Want to thread and connect multiple streams: using namespace boost; controller< > ctrl1; video_server< > server1(&ctrl1, "video1.avi"); video_server< > server2(&ctrl1, "video2.avi"); video_client< > client1(&ctrl1, &server1, &server2); video_client< > client2(&ctrl1, &server1); controller< > ctrl2; video_server< > server3(&ctrl2, "video1.avi"); video_client< > client3(&ctrl2, &server3); thread ctrl1_thd(ref(ctrl1)); thread ctrl2_thd(ref(ctrl2)); thread server1_thd(ref(server1)); thread server2_thd(ref(server2)); thread server3_thd(ref(server3)); // algorithm play_stream< > ftor; // run it thread client1_thd(bind(&video_client< >::operator()<play_stream< > >, cref(client1), ref(ftor))); // sync off server1 (redundant, only 1 server) // play stream 2secs from now, then 800ms thereafter posix_time::ptime now = posix_time::mircosec_clock::local_time(); thread client2_thd(bind(&video_client< >::operator()<play_stream< > >, cref(client2), cref(server1), now + posix_time::seconds(2), posix_time::milliseconds(800), ref(ftor))); // sync off server3 (redundant, only 1 server) thread client3_thd(bind(&video_client< >::operator()<play_stream< > >, cref(client3), cref(server3), now + posix_time::seconds(5), posix_time::seconds(0), ref(ftor))); client3_thd.join(); client2_thd.join(); client1_thd.join(); ctrl2_thd.join(); ctrl1_thd.join(); ** Here's an example of algorithm chaining: - below we do histogram equalization on image stream, then we do phosphene rendering of the stream, and display [note: I've not released either histeq or phosphene algorithms, but library doco details how you'd write such algorithms of your own]. std::vector<variant< pipe::visitable<histeq::streamable> * , pipe::visitable<phosphene::streamable> * > > algo_stream; // histogram equalization algo streamable::histeq_streamable<depth_8u, bgr_p> heq_stream; algo_stream.push_back(&heq_stream); // phosphene algo streamable::phosphene_streamable<depth_8u, bgr_p> p_stream(gain_control, gamma_correction, x_count, y_count); algo_stream.push_back(&p_stream); // set up the pipe pipe::pipe_stream2< depth_8u , bgr_p , histeq::streamable< depth_8u , bgr_p >::base_type::result_type , pipe::visitable<histeq::streamable> , depth_8u , bgr_p , pipe::display_tag::type , pipe::visitable<phosphene::streamable> , pipe::visitor , std::vector > pipe(std::move(algo_stream)); camera_device< > camera; video_server< > server(camera); video_client< > client(&server); // run it.. feed the pipe to client client(pipe); Here it is again: http://users.cecs.anu.edu.au/~manfredd/nvl++.tar.bz2 Cheers, -- Manfred

Hi, Someone pointed out to me that I should have a compression format for the libraries accessible to MS-Windows users, hence now in both bzip2 and zip formats: http://users.cecs.anu.edu.au/~manfredd/nvl++.tar.bz2 http://users.cecs.anu.edu.au/~manfredd/nvl++.zip Cheers, -- Manfred On Thu, 2 Sep 2010 00:56:45 +1000 Manfred Doudar <manfred.doudar@rsise.anu.edu.au> wrote:
Hello List,
Have recently released a series of libraries aimed at facilitating computer-vision tasks - taking out much of the boiler-plate associated with connecting to multiple cameras, and image streams generally.
Work that is largely the product of almost 1.5 years work, using OpenCV as a back-end, but thread-safe, and all in modern C++, and largely header-file only.
For those not particularly interested in computer-vision, there are libraries and miscellaneous utilities that may be of interest, in particular:
- a library wrapper over Boost.Thread (not entirely complete, but covers majority of use-cases); and makes threading less error-prone
- a library for parsing delimited strings (csv, etc)
- a library for parsing command-line options (expresses intent better than Boost.Program_options, betters in some areas, lacks in others)
- a library that with a bit more of effort can be made stand-alone for streaming ("chaining") of algorithms, though binders are common-place, some work herein presents alternative approaches.
[[Documentation]]: is available, but not of Boost quality, however it is sufficient. Depending upon reaction, what I do with these libraries, depends largely upon feedback I get.
[[License]]: largely C++ Boost license, with the exception of a few 3rd-party libs included in the package.
[[Platform]]: developed & tested on Linux; compiles with GCC-4.4.2
[[Where to get it]]: for the time being can be found here (until comms at work can get their act together and put up on their open-website) -
http://users.cecs.anu.edu.au/~manfredd
..there's only one file there: nvl++.tar.bz2
Cheers,
participants (2)
-
Christian Henning
-
Manfred Doudar