Point your laptop web cam (or any streaming webcam) at a piece of paper (or an actual whiteboard) and the program will stretch the writable area over the whole screen.
Video demonstrating some of the new features available here.
- python 3
- opencv (with the
aruco
module), numpy - to use a streaming webcam URL as the camera source (see help for example), opencv must be compiled with ffmpeg or gstreamer support
For camera aspect ratio 16:9 print:
- to_print/a4_16_by_9.pdf or to_print/a4_16_by_9.svg on A4 paper
- to_print/letter_16_by_9.pdf or to_print/letter_16_by_9.svg on letter paper
For camera aspect ratio 4:3 print:
- to_print/a4_4_by_3.pdf or to_print/a4_4_by_3.svg on A4 paper
- to_print/letter_4_by_3.pdf or to_print/letter_4_by_3.svg on letter paper
The small circle marks the top left part of the page. If the aspect ratio of your web cam is different from 16:9 or you want to use paper with a different size see custom page
Tilt your web cam so that all 4 ARUCO markers are in it's field of view.
IMPORTANT: To use the script with Zoom, Skype, MS Teams, ... Disable the camera in these programs first, before running the script. Otherwise a "camera busy" error will be thrown.
In the terminal navigate to the cam_board directory.
- To launch the script:
<USER> $ ./cam_board
- To display command line options:
<USER> $ ./cam_board -h
- "q" - quit
- "s" - save screen to PNG files to create slide show
- the names are chosen automatically 0001.png, 0002.png, ...
- by default the files are saved in the current working directory
- "a" - smooth the image by calculating an average of recent frames on / off
- "i" - invert image on / off
- "d" - de-noise on / off
- "l" - de-noise with colors on / off
- "w" - warp camera image to ARUCO markers on / off
- "k" - apply sharpening kernel on / off
- "f" - full screen mode / windowed mode
Edit aruco_cam_config to change settings.
You can make your own marker page with the markers from to_print/symbols. They should be placed in corners of a rectangle that matches the aspect ratio of your web cam. Careful: the orientation of the symbols is important and they might require rotation - see a4.svg for reference.
- tape one printout with the 4 markers to desk surface (make sure the circle is positioned correctly and use tape that can later be removed from the desk surface without damaging it)
- once the script recognizes the 4 ARUCO markers and stretches them to the whole screen place a blank sheet of paper over the taped printout
- if the camera moves, remove any paper covering the printout and the program will recalculate how to warp the camera image
- laptop stands that allow tilting might help position the camera more perpendicular to the printout with markers resulting in better resolution at the bottom of the printable area
- manipulating the position of the laptop might damage it, be careful :-)
In some linux distributions python 3 is the default. If that is not the case on your system you can:
- adjust the first, hashbang, line of cam_board or ...
- ... run through python 3:
<user> $ python3 ./cam_board