Machine Vision Experiments
|
|
[Click here to show frames; very important]
IntroductionThe purpose of this web sub-site is to document a series of experiments I've undertaken in search of a practical form of machine vision.My name is Jim Carnicelli. I'm a programmer by profession. Most of my career has been focussed on business application development, but AI is one of my deepest interests. I've had little interest in machine vision to date largely because of my belief that I lacked the sophisticated equipment and understanding of the relevant algorithms. I recently decided to undertake it because I see a genuine need for machine vision in pursuance of my other AI goals and because I started realizing that a practical vision system might be within the reach of my existing skill set. The key event which sparked my sudden interest happened as such. I'm working on solving the problem of engendering conceptualization in software. I believe I need at least some "world" a subject entity can perceive and interact with. I'm not very good at the game programming skills needed to do sophisticated simulations, so I've been wondering about limited sensing of the real world. With that in mind, I was idlely scanning the web for literature on machine vision and came across some sites focussed on face recognition. Playing with an interactive software demonstration, I started realizing in principle how to go about reproducing the same results. I also was struck by the interesting false positive matches made by the cheap algorithm used. It got me thinking about contiguous textures and how to detect them, despite the intricacies presented by color gradients, shading, and repeating patterns such as bricks or leaves on a tree. That led directly to this line of experimentation. I knew that I would want to make public my experiments to help encourage others to learn from my experience or help to guide me further. After a bit of initial experimentation with the basic technology, I settled on making an ActiveX control in Visual Basic for pixel-level painting and using client-side JavaScript code for the demonstration applications. From an optimization perspective, this is blasphemous and generally nuts. From a rapid development and publication perspective, it seems a great idea. It's easy for readers to download all the relevant source code. How to UseThese are web demonstrations, but it would be imprudent to call it "pure" web. I didn't bother making this available to any web browser other than Internet Explorer, and I expect it won't work well with any version prior to 5.0. Also, you'll need to allow the ActiveX control to be installed and run, in addition to the JavaScript code that scripts it.The ActiveX control's only purpose is to provide a panel for painting on. It does little more than wrap up a Visual Basic PictureBox control and a few Windows API calls. One important thing to be aware of, though, is that it does create and manipulate a single file on your computer, called My general advice on ActiveX components on web pages, incidentally, is that they have the same access rights to your computer as any other executable you might run (e.g., Microsoft Word or McAffee VirusScan), and therefore the technology is inherently dangerous. Whether you should accept one or not is entirely a matter of whether you trust the source of it not to compromise your system. Such is surely not my goal and the code is entirely my own. Still, I think it wise to be honest about the potential risk. You are, incidentally, welcome to download the source code for the PaintPanel control. To do so, click here. You can also download any of the files in this system here ConclusionsThis series of experiments spanned about half a month and included spare moments here and there. I tell myself that because the modest amount of code I wrote in that time doesn't look so impressive. And I didn't really achieve my goal of being able to at least separate out contiguous regions of texture and ultimately objects composed of them. Given that people have been spending lifetimes studying this problem and don't seem to have done much better, I don't feel so bad.I avoided doing machine vision research previously because of the difficulty of the problem. I'm quitting again for the same reason. Ultimately, I still don't need this sort of capability to pursue my conceptualization research. I would have been nice, though. I'm leaving this here in the hope that other researchers might be able to learn some things from it. Each of the techniques shown here has potential application elsewhere. Feel free to download the source code and experiment for yourself. Also, the graphics library and paint panel control are valuable to developers looking for a way to do pixel-level graphics on the web, how to do RGB-to-HSB translations and manipulation, how to draw primitives like lines, circles, etc. from the pixel level, and so forth. Hope it helps you. If you have some thoughts about all this, feel free to send me an email at: |