I've never formally tested the max throughput of the IP camera module. The low level code for this is coming from an external library, there might be a couple of extra buffer copies that could be factored out by rewriting it. I don't know if that's the culprit though.

Once the buffers are captured they go through a pipeline that is shared with the other camera types and this is known to support this kind of speed so the issue is probably somewhere before that.

If you film a high precision stopwatch, can you figure if the lost frames are happening at random intervals or if they are bunched together, like a whole chunk missing at once?

As an experiment you could have the server on the same machine and capture through the loopback, see if you still get the limit.

Updated calibration dialog.

https://www.kinovea.org/screencaps/2023.2/2023.2-calibration.png

- New: flipping and rotating axes, pixel size hint, coordinates offset.
- Improved: using numeric box instead of text box to support mouse scroll to change the numbers.
- Plus: added a menu in the coordinate system drawing to re-align it with the grid.

Pixel size can be thought of as the error bar at the center of the grid. If the digitization is off by one pixel this is how much it is off in real world units. (in pixels of the original video, not screen pixels, always good to zoom in).

No special treatment for tracking. The offset is just added at the end so it should work as before. I don't think tracking both the coordinate system and the calibration grid is a realistic scenario so until someone comes with a real use-case it will just keep giving precedence to the grid. We'll see later how that works with camera motion compensation.

Known limitation: The scatter plot diagram is showing the axes un-flipped.

Another feature of the Distance grid tool is that it lets you reverse the X axis direction and anchor the origin at the bottom-right. This can be useful for measuring things going right-to-left. I'll try to get all of this in the normal grid.

edit: actually this can be done by manually flipping the grid.

199

(1 replies, posted in Bug reports)

Which version of Kinovea? Is this Windows 11 on a desktop/laptop or on a tablet computer? Do you have NVidia Broadcast virtual webcam enabled?

Another way is to have a second way of entering the calibration grid dimensions, instead of entering the sizes of the sides, to enter the coordinates of the bottom-left and the top-right corners. If the user chooses this way we calculate the sides and the offset from the entered values. (In theory this could be an aribitrary quad but it makes things simpler to force a rectangle).

That was kind of the direction the Distance grid tool experiment was going. But now I think this tool won't be necessary anymore, if the offset can be set up on the normal grid. Then the distance line can become a display option (and it can have a vertical distance as well).

The link to meta ai tracking project is super interesting. When the basic camera motion integration is done I want to look into connecting machine learning algorithms more easily. There is so much to leverage, super-slow-motion, pose estimation, background/foreground segmentation, image stabilization…

To be clear, you can track the grid, but you can also track the coordinate system origin, independently. If you first move the coordinate system out of the grid corner, then you can right click > Tracking > Start tracking. If both the coordinate system origin and the calibration grid are tracked, then the priority is given to the grid.

To be honest I think the only real use-case of tracking the calibration grid itself is when the camera is moving. I've been working on camera motion compensation for a while and it should be in the next version, although I'm not yet sure if the first version will interact correctly with measurements (it's working for placing drawings that "stick" on world objects despite camera motion, this is already useful for visualizing trajectories and drawing in world space).

Tracking the system's origin has a use case outside camera motion, it's for example when you want to measure something relatively to something else (moving coordinate system). It's not very common in my experience though.

Yeah I think having a configurable "offset" to the coordinate system would be nice. The two options aren't mutually exclusive. This might be useful in the context of camera tracking actually. To set up your calibration in the middle of the sequence but still get meaningful values. Although I'm not sure if camera tracking will be precise enough for making measurements.

202

(1 replies, posted in Français)

Bonjour,
Dans ce cas le plus simple est d'avoir deux instances de Kinovea séparées, une pour la capture et l'autre pour le replay. Le mécanisme de replay est complètement indépendant de la fenêtre de capture, il va juste guetter l'arrivée des nouveaux fichiers dans le dossier cible et lancer la vidéo automatiquement. (Théoriquement ça peut même être sur une machine différente sur le réseau local).

OK but it needs to interact nicely with changing the origin manually from dragging the Coordinate system object around by the axes or the origin. If we change manually on screen and we come back in this dialog it needs to show a correct value.

And we can also activate tracking on the coordinate system. In this case the value we would show here would be a bit tricky, maybe in this case it should be grayed out.

There are two ways to think about this I think. Option 1: this defines where the origin of the coordinate system is in relation to the calibration grid, this is what you wrote. When we activate the display of the coordinate system it will be moved to this new origin. If the origin is far enough it could be outside the image.

Option 2: it could define the coordinate at the origin, that is, a fixed offset applied to the coordinate system such that the intersection of the axes is not {0, 0} but something else.

This is sort of what I do in the new "Distance grid" object (on horizontal axis only though, but it could be done on two axes). In the calibration of this grid you set two distances, for example 6m and 10m, and then even a coordinate on the main axis is already at 6m. This was designed as an experiment for long jump measurements. The important advantage of doing it this way is when the true origin of your coordinate system is way outside the image. So we have a camera looking at the end of the long jump pit with markers at known distance. The coordinate system is still aligned with the grid but the values are pre-transformed. (edit: it doesn't really work fully with the coordinate system at the moment though, only for the distance line inside the grid).

Can you tell if your use case is more amenable to one way or the other? I wonder if people that want to change the origin numerically are actually looking for option 2.

204

(6 replies, posted in General)

ExpTreeLib.CShItem..ctor

So ExpTreeLib is the component responsible for the file explorer on the left hand side panel and it's a VERY old piece of code and it has a bunch of references to Windows special directories via COM. I imagine one of these might not exist under Wine maybe? Not sure. I've been meaning to replace this component entirely for a while because it's not as flexible as I want it to be, but lacking time for this specific task and it can't be done progressively.

A follow up on this, the culprit was apparently Nvidia Broadcast and its virtual webcam. Will try to get this fixed but in the meantime if you have a similar problem try to deactivate Nvidia Broadcast to see if it fixes the issue.

So the way to do that right now is to activate the display of the coordinate system, then you can drag the axes to move the origin to the point you want. It saves this origin separately from the calibration. You can't set it numerically at the moment, maybe this would be good to have.

207

(28 replies, posted in General)

Regarding the label, I've been wondering if this should be extended to all options in all tools. Like if you change the color of a line the next created line starts with this color. And then hide the whole color profile thing. I also want to have the style options of the current object directly available in the new right-side panel at some point.

208

(28 replies, posted in General)

I like this idea. And there is a related UX issue with trajectories, when there are several of them crossing paths it can be difficult to manipulate one without inadvertently grabbing a point from another, and this could use a similar approach of "disable all the others and make this one special". 

I wish to make the menu phrasing more explicit though, maybe something like "Disable shortcuts for other stopwatches" or something along these lines.

209

(28 replies, posted in General)

Right now the way to prevent the shortcuts to be applied to a particular stopwatch is to use the menu Options > Locked on that stopwatch. It's the only thing this menu does (you can still start/stop/split manually). I admit it's still not perfect though, it has already happened to me a few times to forget to set it and mess up the times. If you show the label above the stopwatch, it also has a little square icon which represent the "locked" state.

edit: Maybe another idea would be to check if the stopwatch already has data points in the future and in that case ignore the shortcuts. I think in most cases it should be the right thing to do. If we really want to accept shortcuts in the middle of the existing times maybe *this* can be the explicit option to activate. The only issue with this approach is that it will still potentially add unwanted time points at the end.

210

(28 replies, posted in General)

Thanks.

There are two ways to export the stopwatch data now. The traditional way using Calc or Excel as a target and the dedicated Chronometer CSV export.

The traditional way should export the data as in your suggested format. Each stopwatch will have its own separate small table with the split times and cumulative times, and also start and stop.

Now the second way is more advanced, and the reason it's organized like this is because it will try to match different time sections from multiple stopwatches, by their names (I have a video coming up explaining the new options more in detail).

This is interesting when you have several of these multi-time stopwatches overlapping. To give an idea, the first use-case this was developed for is a hurdle race where you are timing both the time intervals between the hurdles and the jump time above the hurdles, and then you want to export a table where you collate all the data for each interval. So you have a column for say the 4th interval and then you have rows for all the things you have timed during this interval.

I guess it could still be transposed, but I know at least one user that is really interested in having it in this shape, so it would have to be an option like a checkbox on a dialog before the final export.

A third way to export is through the JSON export, in this case the data is a bit more structured and it could be shaped differently, this is intended for consumption by another programming language.