Computer and Machine Vision
I have recent experience (including as a commercial OpenCV programmer / contractor / consultant) in various areas of machine vision such as:
Data capture from files (still or video), webcams, IP cameras, etc
Morphing / deskewing / normalising scene objects
Thresholding, edge detection, template matching, etc
Much of my Computer Vision work is done using the OpenCV library. In addition to the above “functional” areas, I can provide specific help in the following features of the OpenCV library:
- OpenCV C and C++ interfaces
- Image capture, smoothing, etc
- Edge detection (optimisation of Canny parameters)
- Colour space conversation
- Contour finding – and subsequent management and processing of contours
- Face detection
- Machine Learning framework
Examples of my work
My work is for clients ranging from individual hobbyists, through start-up companies, to large national organisations. Much of the work is commercially sensitive, a matter I take very seriously, and in some cases the clients are applying for patents on some aspects of the work I have undertaken. But in broad terms, I have worked recently on:
- Two projects processing images of very small components (micrometer scale, and in one case down to near-atomic scale).
- A system (patents pending) dealing with very complex, noisy and diverse images such as would be found in a high-street environment.
- A program processing images from an underwater (marine) environment, watching for specific events.
- Some work with the open source Tesseract OCR tool which needs lots of pre and post-processing work to get it up to a usable standard for ‘real world’ images.
- A system analysing images of buildings from aerial photography (such as Google Earth images).
- Preparatory work on analysing images from software programs to automate testing, including Optical Character Recognition and image detection.
- Preparatory work on analysing images from a production line to automate quality control inspection.
In addition to the computer vision work, I am a general “all round” programmer, used to interfacing with other parts of wider systems using, for example, HTTP or other comms, XML, JSON. I have written both clients and servers (and used tools such as cURL to help speed this work, where necessary). I have my own development environment for Windows, Linux and Mac OS X development, and can also develop for Android (including Google Glass) and Raspberry Pi.