Here's a reply I gave to the same question about the opencv project a few weeks ago, note that getting data from a camera strictly speaking isn't really a part of opencv core, but I think it's a useful exercise in terms of understanding the threading issues and putting together a nifty demo

Task #8 in this list would be to create a nice QtDemo that can go in our examples folder and will build when the user asks for Qt/OpenCV support


Just an update on the project from my ‘wish list’

Task #1 : have a lookm at opencv and how the threading backends are implemented

Task #2: Get a good understanding of the HPX threading framework. Make sure you appreciate the difference between kernel level threads and lightweight HPX threads. Reading from a webcam or other device might make low level calls that need to be done on a kernel thread rather than an hpx worker/task thread.

Task #3: Implement an HPX backend to replace OpenMP/TBB in openCV and test out standard opencv algorithms

Task #4: make sure that the threading implementation doesn’t violate the terms of #2 and that hpc threads are not blocking in wait staes whilst polling for camera/image data

Task #5: understand that HPX supports thread pools and we can create a custom thread for any opencv camera poll work so that the problems I just alluded to do not happen

Task #6: Together a simple Qt demo with a GUI that displays images in a nice GUI window and overlays some image processing data etc. I have an application I wrote for monitoring wildlife in my garden that can be adapted for this - it tracks movement by doing pixel comparisons after applying  bunch of filters to the webcam images - when movement is detected, it starts recording so I can see what happened whilst I was asleep etc (infra-red cameras for night vision).

Task #7: Understand that Qt GUI threads can’t always be run on hpx task threads and/or tht Qt guis are not generally thread safe and we may need a special thread for GUI updates (or careful use of Qt synchronization), so a thread pool dedicated for that might/would be a good idea.

Task #0 - learn as much as you can about all of the above before gsoc starts and write a decent proposal “in your own words” that describes how you plan to do the above (and insert extra tasks because I wrote  this fast and skipped lots of details).

Feel free to ask questions on IRC or here - I’ll update the task list above if I think of more - and note that #1-#5 are the main essentials and #6-#7 are bonus work for anyone who makes good progress on the first tasks.


On 03/06/2018 12:20 AM, Jakub Golinowski wrote:
Good afternoon,

I am Computer Science student at ETH Zürich in the 2nd semester of my Master of Science Programme. I already have programming experience from working in industry and on many academic projects throughout my studies. However, I have never engaged in the development of the open source software. Therefore, GSoC is the unparalleled opportunity for me to fully emerge in the open source community and gain knowledge necessary to continue open source contributions after the end of the programme.

I am particularly interested in the HPX library because this is very close to my research interests and my specialization at ETH Zürich, which is Distributed Systems. I am familiar with distributed computing paradigms and problems occurring while managing clusters of machines both from theoretical courses, reading scientific papers and (most recently) working on a large-scope semester project. The task was the design, development and deployment of the network load-balancing middleware, followed by the series of automated experiments with synthetic traffic. Conducting experiments allowed me to hone my bash scripting skills and exposed me to the problems connected with managing cluster of 8 machines (including scheduling and collecting data). The above described project was summarized in the report which I link here (link to project report <>). In the current semester I will (among other projects) be working on the project focused on reducing the network traffic in the data centre.

Another reason for my interest in HPX is that I have been on the IRC channel and mailing list of the Ste||ar Group for a few weeks now and I am really fascinated by the great atmosphere on the communication channels. It is at the same time structured and allows for effective information flow but is also cordial and makes me want to be part of this community.

The projects of my interest are:

1. HPX Backend for OpenCV.
2. Script Language Bindings.

I am primarily interested in these projects because they both combine two different technologies and I am convinced that connecting existing and well-tested technologies is generally of great value. What is more I am sure that developing backend for OpenCV or script language bindings will contribute to further increase of the HPX's reach.

I have successfully built the HPX library on my machine (linux) and went through examples. While building the HPX I discovered interesting issue with newest boost. It is including the architecture tag in the library names and consequently cmake is unable to locate the library files. For now I switched to older version of boost and also created PR to update documentation (#3214 <>)

Finally I would like to ask about suggestions and directions for my next steps i.e. writing a detailed proposal, including scope of the projects and detail schedule of development stages.

I have already seen a hint from Adrian Serio about Script Language Bindings and making myself familiar with other scripting language bindings is in my schedule:

    Look at the work we have completed with other scripting languages
    here (

If there were some suggestions about HPX backend for OpenCV I must have missed them and I will simply start by going over implementation of parallelism in OpenCV with the use of OpenMP.


Jakub Golinowski
(IRC nick: jakub_golinowski)

hpx-users mailing list

hpx-users mailing list

Reply via email to