On this page you will find the latest facts about the company Midi-Formatique, ideas and eventual modifications of Xlisp or Qlisp, advice, etc.. If you have a contribution for this page (a question, an application, an interesting link), contact us!
We wish you a Merry Christmas and a good year 2016. Sorry for not updating this site regularly... too much work in 2015.
We have completed our installation “e-liquid bottle control” by image analysis. Please find here a description of this project.
A client asked us to analyse e-liquid vials by computer vision, the bottles rotating on a conveyor. The key point in this project was the exact synchronisation of image acquisition.
On the right hand our solution: an Arduino Ethernet card with a small electronic extension. A synchronisation signal (3 pulses) is sent to the camera, one bottle captured every120°.
The result on the left side: the 3 images allow to check the slope of the cap. Other measures are realised in the middle image: the height of the cap, the position of the ring and the correct bonding of the label.
An advantage of the Arduino board is the speed due to programming in C language: in this project, we got a polling frequency which allows acquisition with 0.1 mm of precision.
The Arduino board pilots also the vials' ejection located 500mm behind the camera.
You can download a new version of Qlisp. It contains an interface to the new Vimba library from Allied Visions and some corrections and new functions.
To realize applications in image analysis, we have developed an innovative product.
- Reduction of equipment: the installation consists of a GigE-Vision camera powered by the Ethernet cable (PoE), a switch and an industrial computer (Panel Pc).
- Flexibility: only standard hardware is needed without any preference to a constructor. The only constraint is a computer that has enough power for the application (depending on the complexity of the algorithm and the needed performance). The program in C++ is usable with different tools and compilers.
- Reduction of development time: the system includes Qlisp 5.0 for the image analysis (article 29/03/2014) and a Rapid Application Development tool (RAD) for the GUI. We can now develop powerful applications in a minimum of time.
A first installation was already realized and delivered. If you are interested in details, see here.
The extraordinary General Assembly has decided to transfer the headquarters of our company. The new address is: Midi-Formatique SARL, 13A, rue Justi Pepratx, 66750 Saint-Cyprien. For a fast contact, please use this form.
A common problem: measurements on distant machines in order to trace production, to see parameters in real time, to detect malfunctions, etc..
The equipment must have a reasonable price... and be resistant against electromagnetic noise that is typical for an industrial environment.
For our latest realisation, we have chosen an architecture based on Arduino Ethernet cards with PoE technology (Power over Ethernet).
You will find further information in this article.
Many of our industrial applications are based on C/C++ using a rapid development tool. Until now, we have integrated in this environment the library of image analysis functions of Qlisp. Unfortunately a compiled language is not very well adapted for programming image analysis applications, every tiny modification requires a recompilation of the project.
We just finished another approach: integration not only of the image analysis functions, but also of Xlisp. This language runs in a thread, communication with the industrial application (C++ Builder) is realized with messages and shared memory.
If you be interested in this realization, please contact us!
We have just discovered that Qlisp has a bug with the new Fedora 19 distribution: the keyboard does not work. Without really understanding the problem (it is apparently an incompatibility between TclTk and IBus), here a “solution”: run unset XMODIFIERS before launching Qlisp, best by adding a line directly in the "bin/qlisp" script.
The engineering school IMERIR has dismissed Tilman Jochems for contractual breach and improper attitude. The cited reasons are amazing. But we are especially sad that 18 years of Tilman's work have been ended in such a way.
1000 downloads of our free software. At the top: Xlisp and Qlisp for Windows (31.1% and 31.0%). Thank you for your trust.
OfficeLite is an off-line programming software for Kuka robots. The current version is 5.6. We regret that you can no longer download the demo version 4.1.7 that was limited to 30 days.
You can download a new version of Qlisp. It contains the management of serial ports, improved queue based skeleton algorithms (pruning by a given size), fast geodesic dilations and correction of a few small bugs.
The integration project of the Engineering School IMERIR/France has finished.
Students had worked on a mini-project for a period of 40 hours:
The video on the right hand shows the results.
Thank you to the students for the good ambiance during
One of our clients had imported a prototype from Germany. We were charged to improve the automation part of the machine, completely realized with components from Beckhoff. Our impression: the components are very powerful, especially we like EtherCat, but the documentation is sometimes too succinct. Thank you to the support from Beckhoff Germany who helped us a lot.
Today, the machine is manufacturing and satisfies our customer.
For learning the manipulation of a robot, you should have a tool and a workpiece. We have offered both to our virtual KR6.
The tool has its TCP (tool center point) at x=28.66 and z=156.96 with an inclination of 30°. The work piece is a cuboid with the dimension of 1000x500x500, placed at x=-1100 and rotated by 15 degrees around z.
You can download our new version, including the tool and the
piece, of SimuKr6 here and see the
"manufacturing" of the piece in this video.
The German manufacturer Kuka sells a software called "OfficeLite" (a demo version can be downloaded on their site) that enables offline programming. OfficeLite simulates the real software installed on the robots. But there is no arm. And indeed, a robot without an arm is like a fish without a bike!
That's is why we have developed a virtual arm that is controlled by OfficeLite. This realization consists of:
- Kuka OfficeLite v4.1.7 or 5.5
- a server that reads permanently the position of the axes. The studies of Paul Chavent / IMERIR helped us to realize this program
- Instant Viewer from Fraunhofer IGD, which is a high quality 3d-viewer
- the model of the robot. Here, we were inspired by the work of Martin Rohrmeier / DLR
- a virtual arm server written in Java using the "External Authoring Interface" of VRML
There is a video that shows our program. If you want to play like us with your robot at home, you can download our realization (with full source-code in C++, JAVA and VRML). Have fun!
Urssaf (French service for social security payments) has checked the documents of our management. Result: "No irregularities found ...". In this context, we warmly thank Plein Sud Entreprises, and specially Jacqueline LEY, for their good advices since the creation in 1998 of our company.
One of our customers had a little problem. His supplier SA PIV / VILLEURBANNE, seemed to have ceased trading. But how to construct or repair a machine that uses a mechanical speed variator from this company?
Together with our client, we have developed an alternative: the synchronization is realized with a brushless motor from Emerson. This solution works today, our client is completely satisfied. Indeed, this solution is even cheaper!
GigE Vision is a camera interface that uses the IP protocol with 1000mbits/s. It represents an industrial standard and allows image acquisition over large distances (100m) with a high frame rate (the GC1290C provides, for example, 33 fp/s at full resolution). Another advantage is the compatibility of interfaces between different camera manufacturers.
We have used the SDK of Prosilica (now Allied Vision Technologies) which is very well done: It is freely available for customers, it offers utilities to setup the camera, there are DLLs (Windows and Linux, 32bit and 64bit), headers files ".h" and even examples that demonstrate the use of the camera. Perfect!
Our integration into Qlisp was easy. Now, GigE Vision cameras can be used under Windows and Linux. If you are interested by this interface, please download the latest version of Qlisp.
As part of a modernization of a machine, we have replaced FX/PCM15 servo motors by Emersons EN208/FM4 modules. In this context, we have developed a new phase shifting method by applying an index with slightly changed speed. This process requests numerical solving of a third-order equation. The result is remarkable: we have obtained a precision with a maximum deviation of 0.01%.
In a recent integration project in robotics, students of IMERIR have developed a packing station: cakes arriving on a conveyor are detected using a camera. The size, orientation and nature of the products are then sent to a robot that packs them into boxes. The photos show the main steps of the algorithm in image analysis realized with Qlisp.
1) Cakes on conveyor
2) Contour extraction
3) Product recognition
We adapted Xlisp and Qlisp to be compatible with GCC under MinGW (Minimalist GNU for Windows): only the Makefiles and the resources had to be modified. If you are interested in this improvement, download the latest version.
It was the eigth machine that we equipped with our individual braking system. This time, we replaced an old system with a less powerful technology, which became difficult to maintain. In collaboration with the customer's Maintenance Team, the modification was carried out in only one day. We thank our customer for his loyalty and the Maintenance Team for his assistance.
We are developing a mobile robot and want to use Qlisp for the vision part. How can we communicate the results of the image analysis to our main application, which is written in C for Linux?
The easiest way are the "named pipes" that are created with $mkfifo name. In Qlisp, you open the pipe with (setq fp (open "name" :direction :output)). For a first test, I propose to read the pipe in a shell: $cat name. Now you can write into the pipe with (format fp "hello world~%"), "hello world" will now be transferred to the other process (the shell). Pipes are closed with (close fp); this is the moment where "cat" will print the string. It is also possible to communicate in the other sense, of course.
Since Qlisp comes with its sources, you can use other communication mechanisms (sockets, DDE, shared memory, etc.) by integrating these functions in Qlisp. The module "distcam" gives an example of socket communication with a camera installed on another computer (distcamserver).
How to explain the "watershed"? This transformation calculates the "more or less high crests separating two catchment basins" [Petit Larousse Illustré, 1998] by a flooding mechanism. In order to understand this, you should imagine yourself an image as a relief.
But examine the image on your right. You can see the basins and the crests, the valleys and the mountains?
A visual treatment can help, you just add shadows to the objects. The slopes in the direction of the illumination will be lightened, the others darkened. To allow a perfect imagination, the valleys are then colored in green and the mountains in white (by applying a look-up-table).
We use two different methods to calculate shadows: by convolution and by morphological transformations. The images below show the results, the illumination source being situated in the northwest of the image.
Visit also the site of the School of Mines of Paris for a marvelous demonstration of the
2) Relief by convolution
3) Relief by morphological transformations
;computation by convolution
(conv grad '((2 1 0) (1 1 -1) (0 -1 -2)) 2 2)
;computation by erosion/dilatation
(setq t1 (sub grad (erosion grad 65 3)))
(setq t2 (sub (dilation grad 65 3) grad))
(subl (addl (div grad 2) 128 t1) t2)
We have tested the programs Xlisp4.3 and Qlisp4.3 on a SUN server (operating system: solaris, architecture: sun4v). This was very instructive because SPARC processors store data in big-endian format (an address points on the byte with the highest weight). Result: our programs work also on this architecture (compiling with gcc). We publish from now on the binaries for this configuration.
Since more than one year, we develop a distribution automat for gas bottles. This month we finished our first functional prototype. The installation allows self-service gas bottle purchase. Please read the detailed presentation of this project.
You can now compile Xlisp and Qlisp on a 64bit distribution of Linux. The main advantage is the compatibility with the libraries and modules that are installed on your computer. However, we did not yet optimize the code for this kind of processor.
The source code and Makefiles were customized. The statement "ARCH=i386 or ARCH=x86_64" at the beginning of the Makefiles informs about the goal architecture. The new version that you can download includes also the 64bit versions of Tcl/Tk 8.4.9.
We have tested the programs on the Fedora's Core 4 with an AMD X2 3800+ processor. The 32bit versions will be maintained in order to assure compatibility of the binaries with i386 processors. The Windows versions are usable without any modification.
We have optimized image acquisition under Microsoft Windows: while constructing the filter graph, we detect an eventual tuner card and add the options "Crossbar" and "Tuner" to the menu. You can now capture images not only from television but also from analogical input devices. Images will have the RGB24 format. We obtain a frequency of 25 images/s for an image size of 320x240.
We have tested the module with the cards "Asus Europa II" et "Terratec Cinergy 400" with DirectX 9 under Windows 98, 2000 and XP. Acquisition with usb and firewire cameras rests identically.
You can download the new version of Qlisp4.3 that contains the module and other improvements.
<< …when I download the files and try to extract them, the directory rests empty? I use Winace as decompress utility. >>
We group and compress the files for Xlisp4 and Qlisp4 under Linux with the tools tar and gzip. This is why we named them "*.tar.gz". WinZip understands this extension, Winace apparently not. To solve this problem, the files have to be renamed in "*.tgz". We do this from now on directly on our download page.
Thank you for your contribution.
The program font.lsp adds an important feature to our image analysis system Qlisp: writing strings.
We have right away modified our movement detection program (see also the article 02/05/03). The string saved on the images allows now the posterior identification of the events' time and date.
Controlling appliances by a computer, for example lowering the volume of your audio rack in the living room while you are working in your office, is certainly an essential application :->. Our realization: the picture of a remote control is exposed on the computer's screen. A mouse click on a button... and the command is executed.
The left figure shows the graphical interface of our program, up to 5 remote controls can be handled. We use a database to stock the images of the remote controls, the positions and the shapes of the buttons, the associated codes, etc.. A small circuit (on the right) amplifies the signals of the serial port. An infrared diode (LD274) emits impulses of 5us length with a frequency of 36kHz.
If you are interested in this program, please download its sources (C++Builder) and the complete scheme of the electrical circuit. If you use WindowsNT/2000/XP, you also have to install the driver giveio.sys. We recommend you the site Linux Infrared Remote Control, which includes a library of frequently used codes.
You don't like the color of your car any more? Right now, you can change it easily with Qlisp!
|1) Before||2) After|
We have programmed this example in order to demonstrate the IHS (intensity, hue, saturation) representation of a color image: The function (rgb-ihs ima) transforms the original RGB image into IHS. We add then a constant value to the hue channel. Finely, this image is transformed back with the call of the function (ihs-rgb ima).
L'application is called "changecol.lsp". Start the principal function (main). A menu will let you choose the original image, find the contours of your car, choose a new color and apply finally the algorithm described above.
We thank Mr. Julien DUJIN who had the idea for this program.
DirectShow is a component of DirectX of MS-Windows. Its architecture is based on the COM technology (Component Object Model) and allows applications to capture and to render images and sound. DirectShow is compatible with the "Windows Driver Model" (WDM) and the older "Video for Windows" (VFW). Qlisp has until now been employing VFW and its bridge towards WDM in the module "videocap.dll". The use of DirectShow allows more powerful capturing.
The following diagram shows the principle of DirectShow. The application communicates with the "Filter Graph Manager" to build a flow graph. Existing filters allow the connection with cameras, the capture of isolated images, the conversion of formats and visualization.
We integrated DirectShow into Qlisp. The module is loaded dynamically if you call up the function (caminit "dshow"). You can acquire a color image (24 bits) with the instruction (camsnap nr), "nr" represents the identification of the source. The function (camread) serves for transferring the acquired image.
Please allow us some remarks about the realization of this module:
"... I would like to treat a color image; in particular I would like to make it a little sharper! After having sought for a long time on the Net, I did not find anything except super complicated algorithms which I do not understand at all..."
We propose the convolution by a filter that amplifies the middle frequencies of the image. This filter has the following impulse response:
-1 -1 -1 -1 -1
-1 0 0 0 -1
-1 0 25 0 -1
-1 0 0 0 -1
-1 -1 -1 -1 -1
A smaller central value increases the filter effect, a larger value decreases it. To apply this filter to a color image, there are two possibilities:
You treat identically each channel red, green and blue of the image. Here is the corresponding code for Qlisp:
(defun filter1(ima &optional (val 25) &aux rgb res)
(setq rgb (col-grey ima)) ;extraction of the channels RGB
(dolist(x rgb) ;treat each channel
(setq res (cons
(conv x (middlepass val) 1) ;convolution
(grey-col (reverse res))) ;form the result
This method works well with linear filters. When using morphological filters, however, false colors on the edges of objects may be introduced.
This solution transforms initially the image into the IHS space. "I" is the intensity of each pixel, "H" (hue) the index of a color and "S" the saturation of this color. In order to sharpen the image, only the "I" channel should be modified. The algorithm is 1,5 times faster than the first one.
(defun filter2(ima &optional (val 25) &aux ihs i_filtered)
(setq ihs (col-grey (rgb-ihs ima))) ;create IHS channels
(setq i_filtered ;filter the intensity
(conv (car ihs) (middlepass val) 1))
(ihs-rgb (grey-col ;form the result
(cons i_filtered (cdr ihs)))))
In order to analyze images, it is often more interesting to work in the IHS space. The movement-detecting algorithm, which will be described further down, uses this format.
| 1) Original:
The baker arrives in a
small village in the Pyrenees...
|2) Filtering the RGB channels||3) Working in IHS space|
|The code on the image is recognized. The call (EanRead) provides the list (3 2 9 5 4 9 1 5 0 0 0 3 1)|
An extension of the program "barcode.lsp" allows you from now on to read UPC/EAN-13 barcodes. This product identification could be the first stage of a quality control.
Barcodes require 100 pixels to be visualized without faults. The resolution of a webcam (VGA: 640x480) is high enough to recognize the code.
Our program corrects automatically the brightness and the geometrical faults of the camera. The checksum of the barcode allows controlling the result.
For additional information on UPC/EAN, visit Russ Adams' site.
The program "barcode.lsp" (included in the distribution of Qlisp) enables you to create images that correspond to the UPC/EAN-13 barcode standard. Here is the result, which you can obtain by calling the function (EanDraw ' (5 3 9 1 5 0 3 6 4 0 9 2 9)).
In this image, each bar has a width from 1 to 4 pixels. You can record the image under BMP or EPS format, in order to integrate it later as a graphic into your word processor application.
In order to rationalize the provision of vocational training, the government has modified the activity declaration by French law n°2002-73 of January 17, 2002. The new conditions will prevent providers of training from working independently for the account of another training organization. The objective is to decrease the number of declared providers. In this context, the registration number of the company Midi-Formatique has been cancelled.
If you are interested with what cynicism our government (Raffarin) acts, read the circular DGEFP/GNC n° 2002-47 of October 31, 2002.
The program takes an image every 250ms. This image is compared with the images last acquired. If there is a significant modification (an object which has moved), the image will be recorded under jpg format. In this way, you can supervise your garden or the entry of your house without being present.
Here is an example of the results of this program:
If you want to test the program, load the file "tomato.lsp", create a directory for the results ("~/images"), initialize the camera (init 0) and start the observation with the instruction (tomato). The results can be displayed with the function (show).
PS: The use of the program is strictly reserved for private use. Midi-Formatique can in no case be held responsible for lawsuits with your neighbors!
Download Top Contact