Yes this behavior is intriguing I'm very interested in understanding exactly what is going on. You can send it by email: joan at kinovea dot org.
Thanks.

Loading a KVA created for one video into another video should work, could you share with me one or more files that cause a crash? (joan at kinovea dot org). A crash is always a bug. Even if the videos have different sizes or frame rate there is code that works it out and adapt everything so if it doesn't work in some cases please help me reproduce the context so I can fix it. It may also have generated a number of "Unhandled Exception" files in the application data folder, if you can share those as well it will be helpful, thanks.

Are you loading them manually or via the "default annotations file" option (shouldn't make much difference but will help reproduce)?

I agree, yeah this difference is a long standing issue, but not easy to fix. Attempted the refactoring a few times.

The other aspect where this is limiting is that you can't have drawings go outside the video rectangle in the player, whereas in the capture screen you can, for example a corner of a perspective grid may be out of view.

Thanks. Yes this sounds like a bug. I'll look into it.

Oh I see, you are using a single instance of Kinovea and alternating between a capture screen and a playback screen, correct?

It does save the capture folder, even between sessions, but when you open a new capture screen in the instance it starts from the default state (actually even this should work but I think it's because of opening a player screen in between that it lose the capture screen info).

The new workflow is that you would use a dedicated window for capture, and a different one for replay. Doing this it will remember everything, the camera, the capture folder, the position of the window, etc. It will be ready to go as soon as you start.

Same for the replay, the window will remember the observed folder, the playback speed, etc. Typically if you have two cameras and two replay you would have 3 windows, two capture and one dual replay. It's better to save to different directories otherwise the automatic replay can't tell which file to load. The replay window will also automatically bring itself to the foreground when it loads a new file.

This seems very difficult. If it's around the world vertical axis you might attach a camera to the ceiling, if it's the player vertical axis, aka the longitudinal axis then I don't really see how you can measure this from 2D video, the camera would need to be somewhere along this axis.

If you are using version 2025.1 you now need to manually enable the debug logs from the help menu in order for it to produce all the logs.

Apart from that I don't know. The fact that it can get the thumbnail sounds encouraging, it means it managed to connect to the camera and grab a frame. When it opens the capture screen it does more stuff to get the current values of the properties like stream format, image size, etc. maybe something happens there that causes the failure, but that should be caught by exception handlers. 

One issue I have seen with GigE cameras is when a VPN is installed on the computer, sometimes that trips the driver when it enumerates the interfaces.

38

(3 replies, posted in General)

Some spambot posted an answer to this which made me realize I hadn't responsed. Is it still a problem in 2025.1? If yes can you identify which version is working and which version is not working? Which output format are you using?

39

(1 replies, posted in Bug reports)

By flickering do you mean that the frames are rendered out of order? there are black frames? something else?
If you re-open the exported video in Kinovea does it also do this or only the other media player?
Does it do it in VLC media player? What is the other player?

Unfortunately this option was lost at some point during a refactoring. I will try to bring it back. Essentially you have long-running trajectories and you only want to see it focused on a few frames around the current frame and hide the rest, correct?

You should be able to change the color and re-export.

You save the analysis itself to a KVA file which is text based and has the style information. If you reload this file onto the original video (File > Load annotations…) you can continue the analysis, change the existing positions, color, name of the trajectories or any other object. Normally the KVA file is saved with the same name as the original video, only the extension change, in that case it will be loaded automatically when you open the video.

The images and videos exported have the drawings baked in so they can't be modified afterwards. But if you still have the annotation file (.kva) and the original video, you should be able to make some changes and redo the export.

42

(2 replies, posted in General)

We've set the signed clockwise angles because it's more familiar for us.

That is pretty much the reason why the different options exist. When you first place the angle object you may find that its default configuration is not measuring what you expect, because of the ambiguity around which leg is the base leg and in which direction the angle is measured. So these options let you tell the program how the angle should be measured.

The dashed leg is always the base leg from which the angle is measured, in other words the angle is the one that spans from the dashed leg to the other one. In the latest version I added a small arrow to make this clearer.

The default direction is counter-clockwise as in trigonometry, but depending on whether the person is facing left or right you will need to change this. It's just a default.

Since we rarely measure angles above 180° when measuring human range of motion the default is "signed" which means any angle between 180 and 360° is converted to be in the 0 to -180° range instead. So let's say your anatomical reference position has 0° as the full extension, but that person has hyper extension and can actually go further, bending the joint backwards, then it would measure as negative, maybe -5°, instead of measuring 355° which wouldn't really make sense in this context. But it's an option for when it might make sense.

For measuring joints range of motion it's probably better to use the goniometer and set the reference axis.

The first measurements you need to figure what configuration corresponds to what makes sense compared to what you know the value should look like when you progress from flexion to extension or vice versa. This is similar to what you would do with a physical goniometer, you place it as you know it should be placed but then you check that the measured value makes sense because it's easy to mix things up. There is no way the program can know in advance in which direction the motion goes or how you want to measure it.

Hmm, I don't think it's in the scope of the project to tell you where to place the markers, it really depends on what you want to study. This should normally be based on the specific domain's literature.

Placing markers in one place or another doesn't really change how they are tracked inside the software, the only caveat is to be aware that cloth or even the skin can "swim" a bit above the actual point you want to track, and that occlusions are not well handled so you may have to manually correct the track position during the frames they are occluded.

There is no built-in function for this at the moment.

Maybe you could have a post-recording command that goes in the target directory and removes the X oldest files or any file that's older than the current date or something like that.

edit: well it turns out the message above was posted by a spam bot, they are becoming impossible to detect manually… I'll leave the topic up anyway.

45

(17 replies, posted in General)

It sounds like a bug but I haven't experienced it so it might happen in a context I haven't tested. This behavior of decreasing the playback speed automatically happens when the player starts the playback loop but can't keep up the pace, typically because it doesn't have enough resources. First it skips frames, then skips multiple frames at once, if skipping frames is not enough it starts lowering the frame rate.

Normally it settles down to whatever it can manage. Since you say that manually changing the speed works, it seems there is something that makes the system busy specifically when the file is opened for some reason.

What is your window/screen setup? Try with one window for the capture and a separate window for replay, this should better spread the load over different CPU cores. If you have two cameras and a dual replay, make sure the files don't go to the same folder.

Do you have a default annotation file that is being loaded in the player?

Another idea, are the files saved to a folder that is synchronized to cloud storage, like OneDrive or Google Drive?