This article is inspired by Adrian’s blog at PyImageSearch. In one of his articles he asked about what drives me, what makes me want to be an “OpenCV Ninja” and perhaps recount the days about finding magic in coding.
I started out in computer programming in the faithful year of 1999 during my 9th grade when I wanted to make html webpages using Notepad to display my vector art. It was the year where “blue chip companies” were the hottest thing and the tech bubble was just about to burst. “Lets party like it is 1999” highly resonates with me. But everything before that period for me was just about being a mindless consumer of computer games. The first time I had used TelNet to send an email was in 1992 and after using it once, I decided that I would contend myself with TV and playing football and never used TelNet ever again. By 2001, in high school, I still wasn’t doing any computer programing but was preparing for engineering college entrance exams and managed to get good training in basic mathematics and physics. My agenda in joining engineering was to build the things I desired which, weren’t available in the world or weren’t within my financial reach.
Perhaps, what really got me into programming was the anime – Ghost in The Shell which I came across in 2003.
My undergrad was in mechanical engineering. I worked on computer aided design, rapid prototyping, propulsion systems and industrial robotics because what I desired required extreme automation. In mechanical engineering I learned how it moves or resists movement, where it could be any physical thing.
I needed to learn many more things in control engineering and how human beings deal with the world. More particularly I had become interested in what makes a human a human while I was working on military drones during my masters in industrial engineering at University of Iowa. I studied human factors, human computer interaction, human performance modeling, ecological design and automated systems engineering. By this time I was definitely a techno otaku :P This was also the period when I started learning and using computer programming in a more serious way for analyzing large data sets streaming from driving or airplane simulators and from instruments recording human physiology while the human performed tasks. The tasks ranged from driving to hand washing and a rather important fad of that era dealt with the ergonomics of navigating a website on a mobile device while walking up and down the hall and hopefully not bumping into people. It was a time where many people on the buses and in the streets had started to pretend to be deaf mutes, not talking to each other, with earphones from their digital device firmly plugged into their ear and their eyes and fingers frantically grazing their gizmo.
At that time, a large part of my work was categorized as signal processing and most of that was subcategorized as visual signal processing. I naturally dealt with all other domains of signal transduction and that is when I obtained the conviction that “not signal” is not defined.
I came to learn how it senses.
And what makes a human a human has to do with a myriad of ecological factors that yield a “persona”. These factors cannot be throughly controlled and in many cases not even observed by a human or a collection of humans. Strangely, many of these personas are veering towards becoming a commercial-of-the-shelf-automaton. Towards the end of my masters I was working on “belief modification”. This involved dealing with an it that has a preconceived belief and the process of “learning” modifies this belief. Well, it is also possible that “learning” may not modify but rather make the belief even more resistant to change. This may or may not lead to good consequences.
What remained a puzzle for me at the time was to figure out how it understands and how a belief comes to exist within it in the first place. That is the work I’m doing now for my PhD. The current conviction I have via my research is that it need not be a carbon based life form for it to have an understanding of understanding, an understanding of self vs non-self and even in the case where it may have an understanding of the divine, it need not have an anthropomorphic form. All that is necessary is “information transfer” which is caused merely due to a change within it. And this change happens due to degrees of freedom that exist by default in every portion of the universe.
I now regard every articulation i.e. movement made by a system as “encoding”. Any change is defined as “process”. Also, any change within the system is, coincidentally, defined as “computation”. Actually, encoding, process, computation and cognition are identical. So it’s not possible anymore for me to not consider myself a programmer or deny my capacity of being programmed or get rid of the capacity to store a program within my construct. This is because every physical thing is simultaneously a program, a programmer and is programable.
The only challenge is that not every so called it i.e. thing or system or symbol, is endowed with the same degrees of freedom. It is never in isolation of an environment. None of the parts of it are independent of other constituent parts. And to modify the degrees of freedom of an it in order to rig a particular configuration of its parts requires a cascade of recurrent changes within its ecology. Fortunately or unfortunately the trend (rate of change) within these recurrent changes cannot be guaranteed to be constant nor sustainable. The changes may, in fact, come to destroy and erase every trace of it. All of this jazz happens in a fractal manner where things repeatedly tend towards nothingness and from nothingness to infinity.
In light of all this, the thing that I have always desired and, still do, is to explore other planets. In my endeavor to do so I’m working on incremental steps and utilizing my small solutions in different work domains. My work in
- generic signal acquisition and archival is being implemented for long range telecommunications and remote operation,
- signal classification is being used for collision detection, augmented reality and navigation
- all the OpenCV related stuff is going directly into paying for my sustenance ;)
However, in all these years I haven’t fallen in love with OpenCV, I don’t even consider it the most important library that a coder ought to learn. OpenCV is an atrocious beast of a library that was terribly organized in its early days and even today it is a pain to install or use properly. Much of OpenCV is poorly documented and the python bindings have been a half baked afterthought. Due to such issues I came to appreciate python virtualenvirontment, SWIG, scikit-learn, ROSPy and various general aspects of scripting and design. Indeed, I’m truly invested in OpenCV and in its future. Relative to its humble beginnings in Intel IPP the library has come a long way and has become an important part of my repository. I know that it is my responsibility, like that of others in the community, to improve it. So in the coming months one of my top priority is to get more involved with the OpenCV community and make actual contributions to its Github repo. This will require me to get more accustomed to git workflow and that will certainly be for my betterment.