Many of these things started as projects for small clients. Others
are things I'm interested in and have been working on -- usually for
several years on & off. :) Any IP
embodied in them has been removed. The results are now generally free
for the taking.
Optimising f90 compiler for GPU-based clusters
I've reprised an old sse2 x86-only
f90 compiler
for the modern breed of
GPU-based machines. It's early days yet, but a simple hack of
selecting CAL instructions and trying to optimise inner loop speed
based on simple metrics produced by the AMD CAL samples is enough to
get many BLAS routines going with CPU/GPU shared memory.
As at Jun 2010 basic daxpy/ddot runs at .1-.2 TF on a cheap Radeon
48xx card in an old core2 system.
Download source here.
CAPTCHA breaker
Basic OpenCV library can be tuned to warp and filter typical CAPTCHA
systems that implement web security.
Download here.
Mobile camera platform/truckbot
Commercial project to make a hefty 1x.5 m (approx 1 m off the ground)
mobile stable platform with top speed of around 4 kph, capable of carrying 10 kg.
Project complated with simple RC controls, but have subsequently
played around with autonomous version based on "Robby" the robot O/S (see below).
Crypto-secure invisible video watermark
This package introduces an invisible stream of "noise" into a video
stream that is extremely difficult to remove without the "key". A
utility is provided to add the watermark, display a video stream with
the watermark shown, and remove the watermark. While the watermark
can't be removed even by large-scale "redaction" (e.g. clipping and/or
obscuring the majority of each frame), a limitation of the method is
the watermark can't be entirely removed from a sequence that has been
significantly tampered with.
Sample still images with watermarks added. The TL image is the
original. The others have been watermarked and then tinkered with in
various ways. They still verify as marked with the original
information, however.
Download here.
"Robby" is not yet another robot operating system -- it supports features so far unique in either hobby or commercial s/w. The system is oriented to problem solving -- not device or interrupt handling.
Underlaying the planner is a standard mobile linux platform (i.e. "buildroot"). Some consideration has been given to mobile platforms with GPU-based graphics processors; the modified OpenCV included in the s/w makes significant use of parallelism provided by CUDA-type chipsets.
A problem domain consists of a set of "operators" that can operate on the robot's model of the world, as well as make changes in the real world. Unlike many other problem-solving systems, operators may be completely opaque to the solver; no pre-conditions or post-conditions need be visible to the system so it can thread operators together in a consistent way to reach desired goal states.
"Programming" is largely eliminated for the naive user -- it's outcomes and goals that are described; not volumes of code needed to achieve those goals.
A pre-written library of operators provide convenient toolboxes for solving basic motion and vision problems. A toolbox to recognise commands in constrained natural language is also included. Speech recognition is yet to be supported.
A face recognition solution that will find a matching face quickly. Can be used to implement a web service. When looking for a match among many images (over 1000) in a specific folder, it takes only a second or 2 even on slow processors (e.g. iphone).
Example:
Leverages some tricks from the face recognition lib developed as contract work.
Several methods available, including colour profiling and component parsing.
Recognisers trainable from sets of images.
The package is "light weight", meaning it was designed for use on under-powered
processors (e.g. iphone).
Some work has been done to move the s/w to Intel atom mobos supporting a GPU-based graphics card.
Example:
Download here.
Update Apr 2010: I'm presently running the "learn and recognise"
core over the Caltech 101 and 256 benchmarks. Looks comparable with
only published benchmark.
Numberplate Recognition/tracking
This s/w is adpated from a few commercial projects I've worked on.
It aims to return high-accuracy numberplates given a variety of cameras
(B&W or color), changing lighting, changing orientation, unspecified distance from camera, distorted or partially obscured plates, etc. The basic s/w operates in 2 modes -- returning a token for each distinct plate seen; or returning
the characters seen on each plate. Either way, a MySQL interface is provided to
qutomatically track incoming/outgoing vehicles or weighbridge operations.
Download here.
Video Processing Library
Tracks input from upto 20 webcams, and compares frames with stored screen shots. If any live picture is the same as one of the stored screenshot, than an event is triggered.
Alternatively the web cam can be replaced by a stored image or mpeg stream.
The s/w has to a learning mode, where the "match" screenshots can be stored and pre-processed. In the running mode the webcams are tracked at 10-30 fps, depending on h/w.
The package is "light weight", meaning it was designed for use on under-powered
processors (e.g. iphone).
Download here.
Prolog to Yacc compiler
This is a pretty old package and -- as usual -- pretty rough. I've
only included it here (it still lives elsewhere c2010) because of
the "that is impossible" argument:
Dear,
The problem with Yacc is that he make only finite state automata,
and don't make a gramar.The raly good idea is to use a SQL
as assembly language,but the problem is how to translate,
a big heap of programs(FORMS and REPORTS) writen in
PL/SQL(ORACLE) or INFORMIX 4GL, or(I don't know
what of development tools DB2 uses....
If you know any of people working around this idea ginve mee
a conntact with them....
Thanks in advance, Robert !
robert.bralic@xxxxxxxxxxx
(aka Bore Biko)