Giter VIP home page Giter VIP logo

mkalten / reactivision Goto Github PK

View Code? Open in Web Editor NEW
303.0 40.0 62.0 32.21 MB

computer vision framework for tangible interactive surfaces

License: Other

C++ 27.09% C 71.53% Objective-C 0.41% Objective-C++ 0.71% Makefile 0.13% Processing 0.12% Batchfile 0.01% Rich Text Format 0.01%
reactivision fiducial-markers camera tuio blob-tracking multi-touch fiducial-symbols cross-platform open-sound-control tuio-tracker

reactivision's Introduction

reacTIVision 1.6

© 2005-2022 by Martin Kaltenbrunner [email protected] https://github.com/mkalten/reacTIVision

reacTIVision is an open source, cross-platform computer vision framework for the fast and robust tracking of fiducial markers attached onto physical objects, as well as for multi-touch finger tracking. It was mainly designed as a toolkit for the rapid development of table-based tangible user interfaces (TUI) and multi-touch interactive surfaces. This framework has been developed by Martin Kaltenbrunner and Ross Bencina as part of the Reactable project, a tangible modular synthesizer.

reacTIVision is a standalone application, which sends Open Sound Control (OSC) messages via a UDP network socket to any connected client application. It implements the TUIO protocol, which has been specially designed for transmitting the state of tangible objects and multi-touch events from a tabletop surface.

The TUIO framework includes a set of example client projects for various programming languages, which serve as a base for the easy development of tangible user interface or multi-touch applications. Example projects are available for languages such as:

The reacTIVision application currently runs under the following operating systems: Windows, Mac OS X and Linux.

Under Windows it supports any camera with a proper WDM driver, such as most USB, FireWire and DV cameras. Under Mac OS X most UVC compliant USB as well as Firewire cameras should work. Under Linux FireWire cameras are as well supported as many Video4Linux2 compliant USB cameras.


1. Fiducial Symbols 2. Finger Tracking 3. Blob Tracking 4. Application Handling 5. XML configuration file 6. Calibration and Distortion 7. Application Cheatsheet 8. Compilation

Fiducial Symbols

This application was designed to track specially designed fiducial markers. You will find the default amoeba set of 216 fiducials in the document ./symbols/default.pdf. Print this document and attach the labels to any object you want to track. This version also adds the new yamaarashi fiducials (currently in beta), which allow the detection of more than one million different symbols within a smaller and more uniform footprint.

reacTIVision detects the ID, position and rotation angle of fiducial markers in the realtime video and transmits these values to the client application via the TUIO protocol. TUIO also assigns a session ID to each object in the scene and transmits this session ID along with the actual fiducial ID. This allows the identification and tracking of several objects with the same marker ID.

Finger Tracking

reacTIVision also allows multi-touch finger tracking, which is basically interpreting any round white region of a given size as a finger that is touching the surface. Finger tracking is turned off by default and can be enabled by pressing the F key and adjusting the average finger size, which is given in pixels. The general recognition sensitivity can also be adjusted, where its value is given as a percentage. 75 would be less sensitive and 125 more sensitive, which means that also less probable regions are interpreted as a finger. The finger tracking should work with DI (diffuse illumination) as well as with FTIR illumination setups.

Blob Tracking

Since version 1.6 reacTIVision also can track untagged objects, sending the overall footprint size and orientation via the TUIO blob profile. You can activate this feature and configure the maximum blob size in ./reacTIVision.xml, where you can also choose to send optional blob messages for fingers and fiducials, in order to receive information about their overall size. These blobs will share the same session ID with the respective finger or fiducial to allow the proper assignment.

Application Handling

Before starting the reacTIVision application make sure you have a supported camera connected to your system, since the application obviously will not work at all without a camera. The application will show a single window with the B&W camera video in realtime.

Pressing the S key will show to the original camera image. Pressing T will show the binary tresholded image, pressing the N key will turn the display off, which reduces the CPU usage.

The thresholder gradient gate can be adjusted by hitting theG key. Lowering the value can improve the thresholder performance in low light conditions with insufficient finger contrast for example. You can gradually lower the value before noise appears in the image. Optionally you can also adjust the tile size of the thresholder.

The camera options can be adjusted by pressing the O key. On Windows and Mac OS this will show a system dialog that allows the adjustment of the available camera parameters. On Linux (Mac OS X when using Firewire cameras), the available camera settings can be adjusted with a simple on screen display. Pressing the K key allows to browse and select all available cameras and image formats.

In order to produce some more verbose debugging output, hitting the V will print the symbol and finger data to the console. Pressing the H key will display all these options on the screen. F1 will toggle the full screen mode, the P key pauses the image analysis completely, hitting ESC will quit the application.

XML configuration file

Common settings can be edited within the file ./reacTIVision.xml where all changes are stored automatically when closing the application.

Under Mac OS X this XML configuration file can be found within the application bundle's Resources folder. Select Show Package Contents" from the application's context menu in order to access and edit the file.

The reacTIVision application usually sends TUIO/UDP messages to port 3333 on localhost (127.0.0.1). Alternative transport types are

  • TUIO/TCP (TCP)
  • TUIO/WEB (Websocket)
  • TUIO/FLC (Flash Local Connection).

You can change this setting by editing or adding the XML tag <tuio type="udp" host="127.0.0.1" port="3333"> to the configuration. Multiple (up to 32) simultaneous TUIO transport options are allowed, the according type options are: udp, tcp, web and flc.

The <fiducial amoeba="default" yamaarashi="false" /> XML tag lets you select the default or alternative (small,tiny) amoeba fiducial set, or you can point to an alternative amoeba.trees file if available. You can also additionally enable the new (beta) Yamaarashi fiducal symbols for testing.

The display attribute defines the default screen upon startup. The <image display="dest" equalize="false" gradient="32" tile="10"/> lets you adjust the default gradient gate value and tile size. reacTIVision comes with an image equalization module, which in some cases can increase the recognition performance of both the finger and fiducial tracking. Within the running application you can toggle this with the E key or reset the equalizer by hitting the SPACE bar.

The overall camera and image settings can be configured within the ./camera.xml configuration file. On Mac OS X this file is located in the Resources folder within the application bundle. You can select the camera ID and specify its dimension and framerate, as well as the most relevant image adjustments. Optionally you can also crop the raw camera frames to reduce the final image size.

Please see the example options in the file for further information.

You can list all available cameras with the -l startup option.

Calibration and Distortion

Many tables, such as the reacTable are using wide-angle lenses to increase the area visible to the camera at a minimal distance. Since these lenses unfortunately distort the image, reacTIVision can correct this distortion as well as the alignment of the image.

For the calibration, print and place the provided calibration sheet on the table and adjust the grid points to the grid on the sheet. To calibrate reacTIVision switch to calibration mode hitting C.

Use the keys A,D,W,X to move within grid, moving with the cursor keys will adjust the position (center point) and size (lateral points) of the grid alignment. By pressing Q you can toggle into the precise calibration mode, which allows you to adjust each individual grid point.

J resets the whole calibration grid, U resets the selected point and L reverts to the saved grid.

To check if the distortion is working properly press R. This will show the fully distorted live video image in the target window. Of course the distortion algorithm only corrects the found fiducial positions instead of the full image.

Application Cheatsheet
Key Function
G Threshold gradient & tile size configuration
F Finger size and sensitivity configuration
B Blob size configuration & enable /tuio/2Dblb
Y enable/disable Yamaarashi symbol detection
I configure TUIO attribute inversion
E Turns image equalization on/off
SPACE Resets image equalization
O Camera configuration
K Camera selection
C Enter/Exit Calibration mode
Q Toggle quick/precise calibration mode
U Resets selected calibration grid point
J Resets all calibration grid points
L Reverts calibration to saved grid
S Shows original camera image
T Shows binary thresholded image
R Shows calibrated camera image
N Turns display off (saves CPU)
F1 Toggles full screen mode
P Pauses all processing
V Verbose output to console
H Shows help options
ESC Quits application

Compilation

The source distribution includes projects for all three supported platforms and their respective build systems: Linux, Windows, MacOS X.

Windows:

A Visual Studio 2012 project as well as the necessary SDL2 libraries and headers are included. The project should build right away for 32bit and 64bit targets without any additional configuration.

Mac OS X:

An Xcode project for Xcode version 9.3 or later is included. The build will require the SDL2 and VVUVCKit frameworks, in order to compile properly, just unzip the provided ./ext/portvideo/macosx/Frameworks.zip into the directory ./ext/portvideo/macosx/

Linux:

Call make to build the application, the distribution also includes configurations for the creation of RPM packages, as well as a project file for the Codeblocks IDE. Make sure you have the libSDL-2.0 and libdc1394-2.0 (or later) as well as libjpeg-turbo libraries and headers installed.

License

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

reactivision's People

Contributors

mkalten avatar segabor avatar sir0x1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

reactivision's Issues

Fiducial marker angle is inaccurate

The angle for a fiducial marker is seemingly only updated after a certain minimum angle delta is reached.
The verbose output suggests that reacTIVision is capable of detecting a more accurate angle as the angle values reported are not in fixed intervals. Sometimes after rotating a marker back and forth a few times, the angle values sometimes lie between previous values, suggesting marker recognition is able to determine a more accurate angle.

Is there any way to improve angle accuracy by myself or this an issue with reacTIVion/marker recognition itself?

Problems with external webcam

Hi
I have another problem:
I am on Mac OS X 13.3 and I use reacTIVision 1.5 (the last released version).

It works alright with the built in laptop webcam, but if I want to use an external logitech 1080p cam, I can't get a proper input image.

I tried to work with the camera.xml:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<portvideo>
    <camera id="0">
        <capture width="640" height="480" fps="max" compress="false" />
        <settings brightness="default" contrast="default" gain="default" shutter="default" exposure="default" sharpness="default" gamma="default" focus="default" />
        <frame width="max" height="max" xoff="0" yoff="0" />
    </camera>
</portvideo>

Results in this:
4* the camera input, squeezed in y-axis and leaving a lot of black space. (you can see my hand)
image

I tried the -l startup option to list all cameras:

./reacTIVision -l             
reacTIVision 1.5.1 (Oct 22 2016)

no DC1394 cameras found
no PS3Eye cameras found
3 AVFoundation cameras found:
	0: HD Pro Webcam C920
		format: YUYV (yuvs)
			160x90 30 fps
		format: YUV420 (420v)
			160x90 30 fps
		format: YUYV (yuvs)
			160x120 30 fps
		format: YUV420 (420v)
			160x120 30 fps
		format: YUYV (yuvs)
			176x144 30 fps
		format: YUV420 (420v)
			176x144 30 fps
		format: YUYV (yuvs)
			320x180 30 fps
		format: YUV420 (420v)
			320x180 30 fps
		format: YUYV (yuvs)
			320x240 30 fps
		format: YUV420 (420v)
			320x240 30 fps
		format: YUYV (yuvs)
			352x288 30 fps
		format: YUV420 (420v)
			352x288 30 fps
		format: YUYV (yuvs)
			432x240 30 fps
		format: YUV420 (420v)
			432x240 30 fps
			640x360 30 fps
		format: YUYV (yuvs)
			640x480 30 fps
		format: YUV420 (420v)
			640x480 30 fps
		format: YUYV (yuvs)
			800x448 30 fps
		format: YUV420 (420v)
			800x448 30 fps
			800x600 30 fps
		format: YUYV (yuvs)
			800x600 24 fps
		format: YUV420 (420v)
			864x480 30 fps
		format: YUYV (yuvs)
			864x480 24 fps
		format: YUV420 (420v)
			960x720 30 fps
		format: YUYV (yuvs)
			960x720 15 fps
		format: YUV420 (420v)
			1024x576 30 fps
		format: YUYV (yuvs)
			1024x576 15 fps
		format: YUV420 (420v)
			1280x720 30 fps
		format: YUYV (yuvs)
			1280x720 10 fps
		format: YUV420 (420v)
			1600x896 30 fps
		format: YUYV (yuvs)
			1600x896 7.5 fps
		format: YUV420 (420v)
			1920x1080 30 fps
		format: YUYV (yuvs)
			1920x1080 5 fps
	1: FaceTime HD Camera
		format: YUV420 (420v)
			1920x1080 30 fps
			1280x720 30 fps
			1080x1920 30 fps
			1760x1328 30 fps
			640x480 30 fps
			1328x1760 30 fps
			1552x1552 30 fps

But even if I adjust the settings to this:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<portvideo>
    <camera id="0">
        <capture width="1920" height="1080" fps="max" compress="false" />
        <settings brightness="default" contrast="default" gain="default" shutter="default" exposure="default" sharpness="default" gamma="default" focus="default" />
        <frame width="max" height="max" xoff="0" yoff="0" />
    </camera>
</portvideo>

I get an even weirder image:

image

When running hitting the o shortcut, which should bring up the camera options does not work either.

If there was anybody who has experience something similar or has another hint, I would be very glad to hear that.
Cheers

___ Edit: ____

Oh also I get this information when starting via Terminal:

$ cd reacTIVision.app/Contents/MacOS 
$ ./reacTIVision  

reacTIVision 1.5.1 (Oct 22 2016)

no DC1394 cameras found
no PS3Eye cameras found
3 AVFoundation cameras found
2023-11-20 15:41:06.590 reacTIVision[27942:8202306] CameraControl Error: IOCreatePlugInInterfaceForService returned 0xe00002be.
2023-11-20 15:41:06.591 reacTIVision[27942:8202306] 		ERR: couldn't create VVUVCController with locationID 288358400, 11300000
camera: HD Pro Webcam C920
format: 1920x1080, 5fps
render: opengl

But I don't understand this either...

feature request: Multi Camera input

as discussed at https://sourceforge.net/p/reactivision/discussion/user/thread/9504717b/#32be
it would be super to have a basic multi-cam input option.
i will start with the porting of the things mostly already done by cmayer0087 to the simpler approach based on the current master branch. Pull request will follow.

This Feature request is meant as discussion platform for 'what should work in which way'.

Current Approach from my side would be:

  • Getting v4l2loopback to work with portvideo to have a stable test-setup (more info)
  • port/copy MultiCamera Driver (mainly done)
  • document usage

configuration would be done in camera.xml something like this:

<portvideo>
    <camera driver="multicam" id="0">
        <capture format="mjpeg" width="600" height="360" fps="30" color="true" flip_h="false" flip_v="false"/>
        <settings/>
        <frame width="600" height="360" xoff="0" yoff="0" mode="-1"/>
        <childcamera driver="default" id="0">
            <capture format="mjpeg" width="320" height="240" fps="30" color="true" flip_h="false" flip_v="false"/>
            <settings/>
            <frame x="100" y="0" width="200" height="200" xoff="110" yoff="30" mode="-1"/>
        </childcamera>
        <childcamera driver="default" id="19">
            <capture format="mjpeg" width="320" height="240" fps="30" color="true" flip_h="false" flip_v="false"/>
            <settings exposure="auto"/>
            <frame x="300" y="0" width="300" height="200" xoff="10" yoff="30" mode="-1"/>
        </childcamera>
        <childcamera driver="default" id="20">
            <capture format="mjpeg" width="320" height="240" fps="30" color="true" flip_h="false" flip_v="false"/>
            <settings exposure="auto"/>
            <frame x="100" y="200" width="240" height="140" xoff="20" yoff="50" mode="-1"/>
        </childcamera>
    </camera>
</portvideo>

reactivision_multicam_configuration

the idea is you have a canvas defined by the first <capture width="600" height="360" /> tag (green border).
than for every camera you want to show you create one <childcamera> tag. in this element the <capture> tag defines the hardware camera config/format. then there is a <frame x="100" y="200" width="240" height="140" xoff="20" yoff="50" mode="-1" /> tag to define the position and visible portion of the camera image.

If you have ideas how to change this for easier understanding pleas let me know.

No object in Pure Data No connect no data

hello, i am on Linux, Manjaro, and use ReacTIVision (this works good).
And then i start Pd (Pd-L2ork)and when i load a sketch it says: couldn't create,
so Pd can not create the tuioclient object,
i used the 1.1.5 zip and the later 1.3 zip and still no succes.
I just load the things from the unpacked zip folder.
Can someone help me out here please, i searched a lot but still the same.
the tuioclient object will not create.
Do i miss something; a library or is it just a Pd thing, where do i have to put the files.
Many thanks, Dian

reactivision and pc webcam

Good evening at all. I need help for my processing project; i'll explain: when i start the sketch in processing the laptop's webcam works but how i open reactivision the laptop's webcam does not work anymore and reactivision tells me it does not find any webcam. i hope you can will help me.

Yamaarashi symbols giving 0, 0 coordinates

Testing the new Yamaarashi symbols, they are detected, but give 0, 0 position, so their numbers appear together at top left corner of the screen.

this is the verbose output:

set obj 0 (80) 0 0 3.89442 0 0 0.117961 0 3.3703
set obj 0 (80) 0 0 3.89442 0 0 0 0 -3.18812
set obj 0 (80) 0 0 3.91981 0 0 0.0985694 0 2.40413

Linux and Sur40

Hey Martin,

we wanted to use reacTIVision on a Samsung Sur40. The problem is that the touch screen (which is the current camera) ist not found by the application. Multitouch is working on Linux though. We disabled touch for the system enviroment so it was only possible to use mouse and not your actual hands and touches. This step didn't solve our problem. We know that because we used VLC Media Player to capture the grayscale video output of the touch surface when it was enabled and after disabling touch in Terminal it did not record anything at all. Do you have any idea how to enable the camera for reacTIVision?

SUR40 and Windows10

Hi, I'm currently working with a SUR40 with Windows 10. The objective is to develop a small Unity application where you can control virtual object using real ones with fiducial markers. I thought about using reacTIVision to get the TUIO informations to my application. So I downloaded reacTIVision 1.5.1 and try to get it running but everytime I start it, it quits without any message.
I also tried to make it work using the sources. But when trying to start the compiled program, it crashes with an error message saying (translated from french so maybe innacurate) "Application couldn't start properly (0xc000007b). Presse ok to quit.".
I've seen the issue #34 and tried to use SurfaceToTuio but I got to admit I may have not quite underestand how all of this works.
Has anyone any clues about why it won't work and how to run it ?

Crash on OSX 10.10

reacTIVision 1.5 (Nov 6 2014)

no DC1394 cameras found
1 AVFoundation camera found
2015-04-02 22:53:10.846 reacTIVision[2775:42460] CameraControl Error: IOCreatePlugInInterfaceForService returned 0xe00002be.
fish: Job 1, './reacTIVision' terminated by signal SIGSEGV (Address boundary error)

I tried building the application myself and this seems to be happening on line 468 of VVUVCController.m - EXC_BAD_ACCESS. I assume that the problem lies with https://github.com/mrRay/VVUVCKit? By the way, could you please add that dependency to the readme?

reactivision+Tuio with Processing.org

Hello, my first question here! I am a Student, new to programming I would like to use reactivision+ Tuio with Processing.org. I understand I need to use Processing 2.0 (is is correct?) but cannot get Processing to recognise the presence of the reactivision library. Would you please firstly walk me through the install process then the set up process, laypersons language please....appriciated

Custom fiducial markers?

Is there a way to include custom fiducial markers? How are they implemented and why do the current ones look like they do right now.
I know this project is kinda not maintained, but maybe somebody is still keen to answer.

linux v4l2 camera setting 'exposure_absolute' not restored correctly

system:

  • kubuntu 16.10 64bit
  • pulled repository at commit 10744ef; make all

expected behavior:

  1. if camera is set to absolute exposure (done with guvcview -device="/dev/video0" --control)
  2. this value should be written in the camera.xml config file
  3. on next start the values from camera.xml should be used to set the actual parameters.
  4. on exit save the same value as read - or if modified save new value.

current behavior:
1 + 2 same as expected
3 on restart of reacTIVision camera again start in exposure auto mode.
4 on next exit exposure is saved as auto

Swapping X and Y input

Is there a possibilty to swap X & Y Input? I want to use the Samsumg S40 in Portrait mode and therefore I need flipped coordinates

DoublePoint type define wrong ?

in floatpoint.h, DoublePoint define as follows:
typedef struct DoublePoint{ short x, y; }DoublePoint;

shouldn't it be double x,y? or there are some other considerations?

Visual Studio 2017 support

Hi everyone.

How about changing VisualStudo2017 to be the official compiler used to build the Windows version?
VisualStudio 2012 is old and there is no community version, which limits the number of people who can build it.

When compiling the master branch with VS2017, the following error occurs, but I was able to solve the error by rebuilding libusb with VS2017.

``''
Error LNK2001 unresolved external symbol ___iob_func reacTIVision reacTIVision\cTIVisionwindowslibusb-1.0.lib(core.obj) 1
Error LNK2001 unresolved external symbol _sscanf reacTIVision reacTIVision
Error LNK1120 2 unresolved externals reacTIVision reacTIVision reacTIVision reacTIVision Windows\blur32DebugreacTIVision.exe 1.

installation issues on raspbian/(raspi 3)

Hey,
I am currently trying to install the reactivision_1.5.1-1_armhf.deb on the raspberry pi 3 running the latest raspbian-lite. There are several packages missing, which I'd have to install. However libjpeg-turbo8 does not exist (anymore?) in raspbian to be installed. Installing, what I think is the replacement package, libjpeg62-turbo-dev does not resolve the issue when installing the .deb.

Do you have any idea how to fix this?

pi@tidreactivision1:~ $ sudo dpkg -i reactivision_1.5.1-1_armhf.deb 
(Reading database ... 43980 files and directories currently installed.)
Preparing to unpack reactivision_1.5.1-1_armhf.deb ...
Unpacking reactivision (1.5.1-1) over (1.5.1-1) ...
dpkg: dependency problems prevent configuration of reactivision:
 reactivision depends on libsdl2-2.0-0 (>= 2.0.4); however:
  Package libsdl2-2.0-0:armhf is not installed.
 reactivision depends on libstdc++6 (>= 5.2); however:
  Version of libstdc++6:armhf on system is 4.9.2-10.
 reactivision depends on libjpeg-turbo8 (>= 1.3); however:
  Package libjpeg-turbo8 is not installed.

dpkg: error processing package reactivision (--install):
 dependency problems - leaving unconfigured
Processing triggers for hicolor-icon-theme (0.13-1) ...
Processing triggers for mime-support (3.58) ...
Errors were encountered while processing:
 reactivision
pi@tidreactivision1:~ $ uname -a
Linux tidreactivision1 4.9.28-v7+ #999 SMP Tue May 16 14:03:19 BST 2017 armv7l GNU/Linux
pi@tidreactivision1:~ $ 

Android support

It would be awesome to use mobile devices for fast prototyping purposes. How difficult would it be to port it?

`tile size` default value for fullHD (1920x1080) gives artifacts

found that the default value for tile size is set to 10.
https://github.com/mkalten/reacTIVision/blob/master/common/Main.cpp#L92

this causes artifacts in the thresholder algorithm - visible as black or white horizontal stripes.
if i use the onscreen option (key g) and change the tile size it locks me to the value 2. i can't change this. but the strips are gone. if i use the xml configuration file and set other values (for example 20) this gives no visible artifacts. (but i don't know if such a high value can make sense... have to read more about how this all works...)

seems this is set / initalized at FrameThresholder.cpp#L144
if i understand this correct it is also dependent on much threads are used - i checked this with setting threads="1" and now i was able to choose 2,3,4,5,6,8,10,12,15,20,24,30,40,60,120.
so eventually at some point it would make sense to allow more threads for big pixel formats?

Calibration Grid

Hello,

I used the grid calibration option of Reactivision because I'm using a Fisheye camera and I also want to ignore some parts of the picture captured by it. However the positions of the blobs I receive in my client are the same before and after the calibration.

Am I missing an intermediate step?
Thanks in advance!

captura de pantalla 2016-04-18 a las 11 02 04

[linux] v4l2loopback support

i tried to use reacTIVision in combination with the v4l2loopback (https://github.com/umlaeute/v4l2loopback) module - (just to have more options to preprocess the camera image - for example stitching multiple streams / applying other prefiltering / feeding video files or static images...)

but currently reacTIVision fails to open the v4l2loopback stream.
could this be caused by the loopback-device does not offer controls for brightness and such?
is there any compile flag other option to enable more debugging output?
i found / changed the makefile to
reacTIVision/linux/Makefile

# CFLAGS = $(COPTS) $(SDL_CFLAGS) $(INCLUDES) -DLINUX -DOSC_HOST_LITTLE_ENDIAN -DNDEBUG
CFLAGS = $(CDEBUG) $(SDL_CFLAGS) $(INCLUDES) -DLINUX -DOSC_HOST_LITTLE_ENDIAN

but this does not give me more information in the terminal for 'what happens' and 'why it fails to use the cam'
(i asked this question first in the forum at https://sourceforge.net/p/reactivision/discussion/user/thread/db710c28/#)

how to compile without xcode ?

Hi all,
i've an old macbook pro on 10.12.6 and no xcode installed.
Is it possible to download somewhere an already compiled application ?
I don't have xcode and have no idea how it works...
thanks in advance

Grid result deforming

Hello MK! I have to tell you that i'm using reactivision since 2012 and i love it! Now, my problem is when I try to adjust the wide 16:9 grid the result is all deformed and it looks like a mess.

This is the grid adjusted:
20160419_125658.

And this is the result:
20160419_125705

Thanks for all bro! Have a nice week!

SUR40 and Windows

Hey everyone, i wanted to use reacTIVision on the SUR40 with Windows 7. Everytime i try to start it, i get an error. I know that there is SurfaceToTuio but it doesn't work. Anyone here using reacTIVision on the SUR40 with Windows?

SDLInterface not available

Hi !
I'm stuck on a strange error... I've installed reacTIVision and all the libs on a Raspberrry pi 3,
I'd clone your github repo and then execute make -d -j6 to compile. Then I got the reacTIVision executable and reacTIVision.desktop (wich doesn't work by the way)
I can run reacTIVision by typing ./reacTIVision
then I get that :

reacTIVision 1.6 (Sep 20 2017)

camera: UVC Camera (...) (...)
driver: default
codec: yuyv
format: 640x480, 30fps
TUIO/UDP ...
TUIO/TCP ...
TUIO/WEB ...
TUIO/FLC ...
tuio/src [email protected]
SDLInterface not available!

commands ...

So everything seems to work as charm but I can't have any GUI ...
Where this message comes from ? : "SDLInterface not available!"

Thanks for this great project and for your time
Best regards !

ReacTIvision not working because of Tangible Interaction Framework

For some weird reason, the program crashes because the Tangible Interaction Framework stops working, I geniunely have no clue what that even is, is it something related to the NET framework?

Also, I wanna point out that I am using Windows 7.

Would gladly appreciate help :)

20220612_204023

[linux] [portvideo] does not allow abitary /dev/video* numbers

if you have a cam that is fixed at a device name with an id higher than 'count' video devices - so the list
from $ ll /dev/video* has spaces in the numbering reacTIVision/portvideo fails to open it as it thinks the devices have to be in order.
i found this in #20.
from a short look there are multiple places in the code that need to be changed.
one point i think is
V4Linux2Camera.cpp#L261
sprintf(v4l2_device,"/dev/video%d",cfg->device);
if i understand it correct currently in the camera.xml the id attribute in <camera driver="default" id="0"> means the portvideo internal camera list id. (that makes sens so you can support other non v4l2 cams also..) but it is also used to generate the v4l2 device name.
i currently don't have a good idea how to fix this in an nice way.

V4Linux2Camera.cpp#L258 is one of the other points where the numbering is directly used that i found..
if ((dev_count == 0) || (cfg->device<0) || (cfg->device>=dev_count)) return false;

WebSocket support

I'm opening this issue as a kind of reminder for myself, since we are planning on implementing WebSocket support in a current project. Pull request hopefully coming soon :-)

camera.xml

Hello,

I've downloaded the latest (1.6) version and although it works, I can't change the camera settings in camera.xml like I could before. Any change I make (e.g. camera id, size) gets overwritten once I start reactivision. Any ideas on what the problem there could be?

mini set not working with reactivision 1.5 ?

Hi
I installed http://prdownloads.sourceforge.net/reactivision/reactivision_1.5.1-1_amd64.deb on a debian system.
It"s ok with the default fiducials: I can see the green numbers on each default fiducial when put under the cam, but I'ld like to use the mini set of fiducials.
I updated the reacTIVision.xml file with this line:

<fiducial engine="amoeba" tree="mini.trees" />`

or this one:

<fiducial amoeba="mini" />

But it seems reactivision can't detect these mini fiducials.
Is there a special trick to use these mini fiducials ?
Would reactivision 1.6 better work than 1.5 ? (Then I'ld have to compile it).
If 1.5 is really not working with the mini fiducials, can it work with the "small" set ?
Thanks in advance

Low fps on Raspberry Pi

Reactivision 1.5 armhf when installed on Raspberry Pi is giving 2 to 3 fps.
Reactivision 1.4 when compiled from source gives 30 fps which is good but gets crashed.

Visual Studio not compiling

Hello,

I need to run the reacTIVision server on windows, but Visual Studio gives me the following compile error:

Error C2371: 'int32_t': redefinition; different basic types

The error comes up in TcpSender.cpp in the first code lines:

#ifdef  WIN32
#ifndef int32_t
typedef DWORD int32_t;
#endif
#endif

Any help?

OSC structure unknown

Hi There,

can you please give some insight into how the OSC structure is built? Perhaps add this to the readme.

kind regards
Tony

wrong dimensions from camera

continuing the other issue:
sudo modprobe bcm2835-v4l2 on raspberry pi 3 with latest rasbian and picam2 worked. Tested it with the motion tool to capture frames via v4l2.

However when starting reactivision 1.5.1 I get a wrong camera resolution (848x32 with a framerate of 30FPS). Setting any manual width/height in the camera.xml results in this dimension. When doing capture width="max" height="max" it actually works sometimes, sometimes it crashes. It reports 3280x2462.
The maximum width/height might be much for the raspberrypi to handle.

I also tried reducing the framerate to 15fps but the option seems to be ignored and is set back to 90fps.

Is there something I might be missing?

No camera found on SUR40 with Ubuntu 20.04

Hi,
I try for a few days to setup reacTIVision with a SUR40 with a fresh installed Ubuntu 20.04 (Kernel: 5.13.0-41-generic
).
But reacTIVision does not find any camera. I figured out that /dev/video0 did not exist but /dev/v4l-touch0 , so I created /dev/video0 as a symlink so that it could be found as a camera by v4l2-ctl (see below).
Touch is working out of the box.

Output reacTIVision 1.5.1 (latest amd64 .deb release from http://reactivision.sourceforge.net/):

$ reacTIVision 
reacTIVision 1.5.1 (May 18 2016)

no DC1394 cameras found
Error loading camera configuration file: default
1 V4Linux2 device found
VIDIOC_REQBUFS: Cannot allocate memory
Error requesting buffers.
could not initialize camera
render: opengl

Output reacTIVision 1.6 (compiled from latest commit on master):

$ ./reacTIVision 
reacTIVision 1.6 (May 12 2022)

VIDIOC_REQBUFS: Cannot allocate memory
Error requesting buffers.
could not initialize selected camera
VIDIOC_REQBUFS: Cannot allocate memory
Error requesting buffers.
could not initialize default camera
TUIO/UDP messages to 127.0.0.1@3333
TUIO/TCP socket created on port 3333
TUIO/WEB socket created on port 8080
TUIO/FLC receiveOscData@_OscDataStream
tuio/src [email protected]
render: opengl

v4l2-ctl info:

$ v4l2-ctl --list-devices
Samsung SUR40 (usb-0000:00:13.2-1):
	/dev/v4l-touch0

Cannot open device /dev/video0, exiting.
$ v4l2-ctl --device=/dev/v4l-touch0 --all
Driver Info:
	Driver name      : sur40
	Card type        : Samsung SUR40
	Bus info         : usb-0000:00:13.2-1
	Driver version   : 5.13.19
	Capabilities     : 0x95200001
		Video Capture
		Touch Device
		Read/Write
		Streaming
		Extended Pix Format
		Device Capabilities
	Device Caps      : 0x15200001
		Video Capture
		Touch Device
		Read/Write
		Streaming
		Extended Pix Format
Priority: 2
Video input : 0 (In-Cell Sensor: ok)
Format Video Capture:
	Width/Height      : 960/540
	Pixel Format      : 'TU08' (8-bit Unsigned Touch Data)
	Field             : None
	Bytes per Line    : 960
	Size Image        : 518400
	Colorspace        : Raw
	Transfer Function : Default (maps to None)
	YCbCr/HSV Encoding: Default (maps to ITU-R 601)
	Quantization      : Default (maps to Full Range)
	Flags             :
Streaming Parameters Video Capture:
	Capabilities     : timeperframe
	Frames per second: 60.000 (60/1)
	Read buffers     : 3

User Controls

                     brightness 0x00980900 (int)    : min=0 max=255 step=1 default=255 value=255 flags=slider
                       contrast 0x00980901 (int)    : min=0 max=15 step=1 default=10 value=10 flags=slider
                           gain 0x00980913 (int)    : min=0 max=9 step=1 default=8 value=8
         backlight_compensation 0x0098091c (int)    : min=0 max=1 step=1 default=1 value=1

The sur40 kernel module is loaded but I'm worried about "Samsung SUR40: device removed":

May 12 17:56:13 livingplace-sur40 kernel: [ 6640.391458] mc: Linux media interface: v0.10
May 12 17:56:13 livingplace-sur40 kernel: [ 6640.400810] videodev: Linux video capture interface: v2.00
May 12 17:56:13 livingplace-sur40 kernel: [ 6640.417271] input: Samsung SUR40 as /devices/pci0000:00/0000:00:13.2/usb2/2-1/2-1:1.0/input/input14
May 12 17:56:14 livingplace-sur40 kernel: [ 6641.219959] usbcore: registered new interface driver sur40
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (II) config/udev: Adding input device Samsung SUR40 (/dev/input/mouse1)
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (II) No input driver specified, ignoring this device.
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (II) This device may have been added with another device file.
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (II) config/udev: Adding input device Samsung SUR40 (/dev/input/event6)
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (**) Samsung SUR40: Applying InputClass "libinput touchscreen catchall"
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (II) Using input driver 'libinput' for 'Samsung SUR40'
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (II) systemd-logind: got fd for /dev/input/event6 13:70 fd 57 paused 0
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (**) Samsung SUR40: always reports core events
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (**) Option "Device" "/dev/input/event6"
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (**) Option "_source" "server/udev"
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (II) event6  - Samsung SUR40: is tagged by udev as: Touchscreen
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (II) event6  - Samsung SUR40: device is a touch device
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (II) event6  - Samsung SUR40: device removed
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:13.2/usb2/2-1/2-1:1.0/input/input14/event6"
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (II) XINPUT: Adding extended input device "Samsung SUR40" (type: TOUCHSCREEN, id 12)
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (**) Option "AccelerationScheme" "none"
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (**) Samsung SUR40: (accel) selected scheme none/0
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (**) Samsung SUR40: (accel) acceleration factor: 2.000
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (**) Samsung SUR40: (accel) acceleration threshold: 4
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (II) event6  - Samsung SUR40: is tagged by udev as: Touchscreen
May 12 17:56:14 livingplace-sur40 /usr/lib/gdm3/gdm-x-session[735]: (II) event6  - Samsung SUR40: device is a touch device

Might the SUR40 support does not work anymore for a newer kernel?

support multiple reactivision terminals running in the same time in the platform WIN32

tdata[i].ghWriteEvent = CreateEvent(NULL, FALSE, FALSE, TEXT("ProcessEvent"+i));

The current thread identifier TEXT("ProcessEvent"+i) can not distinguish the threads who share the same number i in different reactivision terminals, which will leads to a kind of lock-like problem as described in https://sourceforge.net/p/reactivision/discussion/user/thread/9504717b/

Can not run version 1.6 in xcode

I am using the OSX with the M1 Chip with the version 14.4.1 (23E224).
For xcode: Version 15.3 (15E204a)

The build is successful, but the application stops running while getting the camera configurations.

int32_t codec = CMVideoFormatDescriptionGetCodecType((CMVideoFormatDescriptionRef)[format formatDescription]);

The Error is: Thread 1: EXC_BREAKPOINT (code=1, subcode=0x104d25124)

I would love to be able to run the newer version of reacTIVision. Has anybody an idea how to fix this?

Support for GS camera on raspberry pi

Hi,

I'd like to use the global shutter raspberry pi camera with reacTIVision.

I just managed to compile reacTIVision on latest bookworm raspberry pi OS. libcamera is able to open the video stream of the GS cam, but reacTIVision says "No camera found!".

Earlier I was trying on an older distro. We have an older raspberry pi IR camera which works well on it as long as the legacy support is enabled. I had to disable legacy support to be able to see the video stream of the GS cam with libcamera, but it was in no case recognized by reacTIVision.

So I guess that in order for it to work, the source code should be altered in some way ...

If anybody has any pointer reagrding where this should happen in the code, and which lib this should rely on, I'd be very grateful.

Thanks !
Joseph

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.