Thursday, June 4, 2009

Product Ideas

Press on any image to see a larger version.


The Tcx Client program is only half of a program. You would have to imagine the other half of this program -- the Tcx Server, because it is invisible and there might be hundreds of them. Tcx Client automatically handles multiple Fuzzy Text Search requests to as many servers as are available -- in parallel. This was written in a wxWidgets C++ gui builder, using Code::Blocks and wxSmith. Tcx stands for Text Content Indexing.


The Image Work program was built using QtCreator and private C libraries. (There is also a wxWidget version.) The program allows experimenting with various image processes and contains a built-in HTML browser that Qt provides. Image Work also stores neural encoded features about each image, so that the program recognizes images which are similar to the currently displayed image.

I imagine there are dozens of programs with the main idea behind this one. But the recognition system behind this one does work. The wxWidgets version of this same program is actually more capable in many areas, but the Qt version is more attractive for this picture...


ImageDisp was an earler, less complicated program which just displayed images, and that's about it. The good part about this and all these programs is that they all work on Linux and Windows (Vista too). They will supposedly work on Macs, but they aren't tested on one as of yet, besides, Macs are so perfect they don't need software.

This early program was merely a tutorial for me while learning wxWidget's imaging abilities. It is handy enough, though, so I use it on all my machines. There is an identical Qt version, but not for commercial purposes, which is Qt's fly in the ointment.


wxWave simply loads .WAV sound files and allows analyzing their spectral signatures.

It is the precursor to a program that will recognize speech or other sounds in the same way that the above Image Work program recognizes images. Although still images are more complex than speech, they are somewhat easier to manage because they are "still". You can never have "still" speech. It is always moving. But the idea is somewhat similar: find neural features within sounds and store them for later recognition.

Other than the intended recognition part, there are far more interesting forms of this type of program out there, but none of them did what I want to do. This technology will also be part of a more ambitious attempt to index both movies and sounds -- something my assortment of home computers will struggle with. I think an Intel i7 would be necessary, at least.


This is "ImageDisp with Video Capture" (featuring yours truly.) It also has the ability to process video in real time, so far as the underlying hardware is capable of that. This program is an experiment using wxWidgets + OpenCV (Intel's open sourced Computer Vision algorithms.) My own personal set of C/C++ image processing algorithms are simultaneously usable as well, although the OpenCV versions are often higher performance, if not so easy to use, mainly because of their ability (in a few cases) to use specialized Intel hardware tricks.

This video display is using a function which performs image transformations with a more artistic bend (the Plasticize effect) rather than anything utilitarian, just for the display.

There is also another part to the Gui to select options and parameters for things like that.

Qt versus wxWidgets (update)

I have tried OpenCV with Qt, which I suspected might have Windows DLL problems, but it does work. So both the wxWidgets and Qt systems seem about the same performance using OpenCV on Intel hardware. I have used the same code on both Xp and Linux.

Gui Builders

I only bother with these GUI builders to make sure the programs are completely portable AND high quality. Otherwise I would just choose whichever was the easiest and be done with it.

Qt takes about 10 times as much space on disk (or installation blob) as wxWidgets. I'm not sure why, exactly, although in some cases Qt has better (or at least prettier) versions of things, such as the QWebKit stuff. There may be differences in the compiler that accounts for the tremendous difference in code size -- for instance embedded debugging information, or translations to other languages, etc. I haven't figured it out, but I intend to.

Another problem with Qt is that it is commercial, and licensing must be bought if Qt is used to make commercial products. I wouldn't mind paying for it, so long as I was being paid for my work, too. That gets harder and harder as time goes on in today's world.

There may be questions like, "Why don't I also have a .NET version of this if I'm going to have 2 or 3 versions of things anyway?" Because the .NET or even MFC environment makes things very difficult for getting down to the nitty gritty and incorporating random C or C++ stuff into them. But I can overcome those difficulties. It is 99% because they are non-portable, and all the considerable work I would expend for them would need to be re-engineered for another machine or operating system.

I will say that I like the Vc++ compiler and DevEnv debugger the best of all, but even those fail in some places where g++ and gdb survive. My nastiest bugs took both worlds of debugging tools to cross laser beams on the problem. Besides, I can still use those tools mixed in with wxWidgets anyway.

One More Thing...

I have recently tried using a few web based tools (in addition to many that I already used...), and have experimented with MySQL, controlled from a webpage with PHP. It works pretty good, really, although the combinations of Apache2.2, PHP and MySQL all at once on my Xp system seems to have jumped memory usage up a good notch -- like several hundred megabytes.

Here is the web page screenshot. (There is no real link... only on private network.)

No comments: