| Simple Remote Camera Server/Client | |||||||||
|
Ruigang Yang, Jan 2002 |
|||||||||
| What It Can do | |||||||||
|
New July 2002: A new version using the generic camera control interface is available now. No FireI API is necessary The project contains two parts, a camera server and a receiving client. The camera server captures live frames from a local capture device, a 1394 camera, for example. The client software can receive frames from the camera server through TCP/IP links. The server software uses Microsoft's DirectShow architecture, a brief introduction can be found here. In the current implementation, the server is streaming the video to all of its connected clients (could be more than one) without any flow control mechanism. The images can be optionally JPEG compressed and distortion corrected (provided the camera has been calibrated and its intrinsic parameters are known). The compression ratio is user selectable. |
|||||||||
| Requirements | |||||||||
| Server: MS Windows family with
DirectX 8.0a or above, Intel's JPEG Library and Intel's imaging
processing library (all freely available from Intel's website),
unibrain's Fire-I API (This is used for automatic camera
parameter control, it is possible to remove unibrain related code in
videoCap.cpp. In particular, comment out the setCameraProfile function
in videoCap.cpp.) Client: MS Windows, Intel's JPEG Library and Intel's Imaging Processing Library, vlgrfmts.lib (in OpenCV/otherlibs) |
|||||||||
| Usage | |||||||||
| The entire software package can be downloaded here
(148 KB).
Please refer to my DirectShow introduction page
about how to set up compiler path etc. Server: dxcamserver cam_index cam_config port_number [ptions]
To quit the server, press 'Q' (shift + 'q'). As an example, we also provide a receiving client (camRecv):
|
|||||||||
| Calibrated image samples (UNC access only) | |||||||||
| I have calibrated five cameras and captured
some images for research purposes. The images are at \\lookout17a\calibration,
under directory data2, data3, and dummy. They are captured at 320x240 at
about 10 fps, all the images are synchronized and radial
distortion removed. The photo (below left) shows the camera setup.
Only the middle five cameras , numbered from 0 to 4, are used. Images
are named by its camera number followed by the frame number. For example
c02f0054.jpg means that it is frame 54 from camera 2 (the
middle one). A set of sample images are shown here (below right). The camera's
projection matrices are here. Each is presented as a 3x4 row matrix
(assume the non-linear distortions have been corrected, as these samples
are) mapping a point in world coordinate (WC) to the camera image
coordinate. WC is defined as a right hand system, with positive y up,
positive z towards the camera (coming out of the image), and positive x
towards the right. The z = 0 plane is roughly at the edge of the lower
desk (where the dummy's hand touches). The unit in the matrices is
millimeter.
|
|||||||||