💻 software-dev


user-82e7ab 03 September, 2018, 07:45:19

hi, is it possible to remotely trigger Reset 3D model ? (like it is possible to eye_process.should_start or to set detection_mapping_mode to 2d/3d)

mpk 03 September, 2018, 07:46:48

@user-82e7ab yes just set detection mapping mode to 2d and then again to 3d it will reset the model.

user-82e7ab 03 September, 2018, 08:03:58

perfect, thx

user-82e7ab 06 September, 2018, 07:56:01

hi again, is it possible to cancel an HMD_Calibration (remotely), i.e. stopping without Pupil (Capture) calling finish_calibration()?

papr 06 September, 2018, 07:57:44

This is currently not implemented

user-82e7ab 06 September, 2018, 08:06:21

ok

user-ef4737 06 September, 2018, 11:27:15

marketplace demo seems to be broken? I can start the calibration but never see anything using l,g keys. anyone with the same experience?

user-ba85a3 12 September, 2018, 10:55:21

Hi, i've installed the lastest version of pupil capture v1.8.26 in windows. Then i performed calibration and a recording test, which lasted about 15 seconds. The question is, why when i play videos .mp4 ( i.e. eye0, eye1, and world) by using VLC i see them speeded up? i meant they last less than 15 seconds, except for audio.mp4, that one seems to be right. Could you suggest something, please?

papr 12 September, 2018, 10:59:53

@user-ba85a3 because we store the videos with evenly distributed timestamps and store the original timestamps externally. After exporting the video should play back normally

user-ba85a3 12 September, 2018, 11:06:24

@papr thanks. but does it happen due to different sampling rate for eyes and world camera?

papr 12 September, 2018, 11:16:03

@user-ba85a3 no this happens due to how we store the video. This is one of the design decisions that let player work better.

user-ec5b50 12 September, 2018, 12:23:58

Hi. I am using the DK2-add-on. I control it with a C++ program which works fine, except that I cannot send annotations.

user-ec5b50 12 September, 2018, 12:27:23

When I call the Annotation_Capture the Pupil Capture crashes

mpk 12 September, 2018, 13:39:50

@user-ec5b50 what message do you see in the log after the crash? My guess is that the message you are sending is mal-formatted.

user-ec5b50 12 September, 2018, 13:43:47

seems you are right. I'm getting this:

Traceback (most recent call last): File "launchables/world.py", line 425, in world File "launchables/world.py", line 275, in handle_notifications File "shared_modules/plugin.py", line 318, in add TypeError: type object argument after ** must be a mapping, not str

mpk 12 September, 2018, 13:44:15

Can you share what annotation you are sending?

mpk 12 September, 2018, 13:44:25

the payload should look like this:

user-ec5b50 12 September, 2018, 13:45:11

Yes. I have written a C++ - function to mimic what you do in python. It works for all other notifications as calibration_should_start...

eyeTracker.sendSerialized({"subject","start_plugin","name","Annotation_Capture","args","{}"});

mpk 12 September, 2018, 13:45:59

I think it should be:

mpk 12 September, 2018, 13:46:18

({"subject":"start_plugin","name":"Annotation_Capture","args":"{}"}

mpk 12 September, 2018, 13:47:01

you need a send a mapping/dict

user-ad8e2d 12 September, 2018, 13:47:57

@user-ec5b50 I had that problem try leaving out args

user-ec5b50 12 September, 2018, 13:47:58

yes, the function is doing that. It works for other mappings, like: eyeTracker.sendSerialized({"subject","calibration.should_start","hmd_video_frame_size","(1000,1000)","outlier_threshold","35"});

user-ec5b50 12 September, 2018, 13:51:17

@user-ad8e2d, many thanks! I guess that was it. It doesn't crash anymore!

user-ad8e2d 12 September, 2018, 13:52:20

No bother! Glad I could help. I only use args when I have something to add and it works fine then.

user-ba85a3 12 September, 2018, 14:10:07

Hi, does anyone know if there's the possibility to extract world camera stream and gaze, while pupil capture is running? thanks for you help.

papr 12 September, 2018, 15:13:31

@user-ec5b50 The exact issue is that you put the {} after args in quotes.

user-ba85a3 12 September, 2018, 15:16:27

thanks @papr, i don't want to bother you anymore, but i'm stucked on PyAV. How can i install it? thanks.

papr 12 September, 2018, 15:20:18

@user-ba85a3 Am I guessing right that you are trying to run Pupil from source on Windows? Is there a specific reason why you need to run from source?

user-ba85a3 12 September, 2018, 15:26:14

@papr No, actually i'm running Pupil Capture on Linux (Ubuntu 16.04) and it's working fine. Then, i'm trying to run the (https://github.com/jesseweisberg/pupil) jesseweisberg's work, but when i try to lunch main.py from terminal iget an error " no module named uvc".

papr 12 September, 2018, 15:28:11

Ah, I understand. This issue is not related to PyAV but pyuvc. Make sure that pyuvc was correctly installed via pip. The installation might fail if libuvc was not installed correctly.

user-ba85a3 12 September, 2018, 15:38:23

i get this error now: what could it be? /usr/bin/ld: //usr/local/lib/libceres.a(problem.cc.o): relocation R_X86_64_32 against `gxx_personality_v0' can not be used when making a shared object; recompile with -fPIC //usr/local/lib/libceres.a: error adding symbols: Bad value collect2: error: ld returned 1 exit status error: command 'x86_64-linux-gnu-g++' failed with exit status 1 world - [ERROR] launchables.world: Process Capture crashed with trace: Traceback (most recent call last): File "/home/optolab/Pupil_Notte/pupil/pupil_src/launchables/world.py", line 113, in world import pupil_detectors File "/home/optolab/Pupil_Notte/pupil/pupil_src/shared_modules/pupil_detectors/__init.py", line 16, in <module> build_cpp_extension() File "/home/optolab/Pupil_Notte/pupil/pupil_src/shared_modules/pupil_detectors/build.py", line 25, in build_cpp_extension ret = sp.check_output(build_cmd).decode(sys.stdout.encoding) File "/usr/lib/python3.5/subprocess.py", line 626, in check_output **kwargs).stdout File "/usr/lib/python3.5/subprocess.py", line 708, in run output=stdout, stderr=stderr) subprocess.CalledProcessError: Command '['/usr/bin/python3', 'setup.py', 'install', '--install-lib=/home/optolab/Pupil_Notte/pupil/pupil_src/shared_modules']' returned non-zero exit status 1

world - [INFO] launchables.world: Process shutting down.

papr 12 September, 2018, 15:41:49

For some reason ceres has not been installed in a dynamic fashion. Make sure to run cmake .. -DBUILD_SHARED_LIBS=ON [before building and installing ceres]

user-ba85a3 12 September, 2018, 15:43:59

I don't understand why Ceres is needed. I've correctly installed pyuvc and so on, I go to the folder where the plugin I mentioned above is and try to run the main.py

user-ba85a3 12 September, 2018, 15:44:25

when this runs, I get that error. Why do I even need to install ceres?

papr 12 September, 2018, 15:46:42

Ceres is required for the pupil detectors. They are compiled [when you run Capture/Player for the first time].

user-bb47e7 13 September, 2018, 06:48:34

Hi, I'm using Pupil Capture from source on Linux MInt 18.2. I've been trying to extract gaze data. I've modified fixation plugin, with no effect. I tried to send some data to .txt file, but whatever I do, no effect. Then I tried to create offline data extractor, taking .npy and .pldata files after recording with Pupil Capture and read them, but I'm getting some unreadable data, encoded or something else I don't know. Can someone tell me more about this? And another question is how can I extract gaze pozition in world camera normalized coordinate system, online and offline using methods I mention?

papr 13 September, 2018, 07:14:57

@user-bb47e7 be aware that the fixation detector file has two different plugins, online and offline.

papr 13 September, 2018, 07:15:47

@user-bb47e7 I will send you examples and links to these things as soon as I am in the office

user-bb47e7 13 September, 2018, 07:17:26

I didn't know that. Thank you.

user-ec5b50 13 September, 2018, 07:18:40

Hi, I have a c++ function that correctly starts the annotation plug-in. But when I want send an annotation the annotation in the pupil_data file is malformatted. I send the annotation like this: eyeTracker.sendSerialized({"subject","annotation","label","new annotation","timestamp","1235.56","duration","1.0","record","True"});.

Does anyone know why this is malformatted?

papr 13 September, 2018, 07:33:07

@user-ec5b50 the numbers should not be encapsulated in quotes

user-ec5b50 13 September, 2018, 07:34:14

but can I send integers with msg pack?

mpk 13 September, 2018, 07:36:55

@user-ec5b50 yes you can send ints and floats.

user-ec5b50 13 September, 2018, 07:37:27

OK, thanks!!

papr 13 September, 2018, 07:39:54

This is the full msgpack spec for reference: https://github.com/msgpack/msgpack/blob/master/spec.md

papr 13 September, 2018, 07:45:29

@user-bb47e7

Intermediate recording format: https://docs.pupil-labs.com/#recording-format Exported data format: https://docs.pupil-labs.com/#detailed-data-format Online data access example: https://github.com/pupil-labs/pupil-helpers/blob/master/python/filter_messages.py

user-bb47e7 13 September, 2018, 07:48:16

Thank you very much. I was so focused on Pupil Capture that I forger about Pupil Player.

user-ba85a3 13 September, 2018, 14:47:06

Hi, i'm attempting to test Pupil capture 1.8.26 and Matlab R2018a running on windows 10. I followed the guide line on https://github.com/pupil-labs/pupil-helpers/tree/master/matlab. First of all, i've installed ZeroMQ 4.0.4 on win, then matlab-zmq and matlab-msgpack packages, but i'm not pretty sure they are well installed. Is there a way to check it? Documentation combined with my poor software experience in most of the times not enough. Anyway i went on through steps described, launching Pupil and running pupil_remote_control.m, but i get this Matlab's error: Undefined variable "zmq" or class "zmq.core.ctx_new".

Error in pupil_remote_control (line 15) ctx = zmq.core.ctx_new();

user-ba85a3 13 September, 2018, 14:47:20

Anyone can help me? thanks

user-3f0708 14 September, 2018, 13:17:36

Can someone explain me the purpose of this command? Because I did not understand the importance in the file 'mouse'

def move_mouse (x, y):      if system () == "Darwin":          sp.Popen (["/ mac_os_helpers / mouse", "-x", str (x), "-y", str (y), "-click", str (click)      else:          m.move (x, y)

papr 14 September, 2018, 13:30:43

@user-ba85a3 looks like the zmq Matlab lib is not in your Matlab path

papr 14 September, 2018, 13:31:34

@user-3f0708 in macos it is not possible to move the mouse using the python module. Therefore we had to create a small utility binary that does that instead.

user-3f0708 14 September, 2018, 13:36:10

@papr I was using the mouse_controll script normally, but now the mouse movements are not very faithful to the look tracking. The mouse is only moving in one direction, does it have something like a calibration process?

papr 14 September, 2018, 13:37:14

@user-3f0708 the mouse movement depends on a lot of factors. Pupil detection, calibration accuracy and surface tracking quality

user-3f0708 14 September, 2018, 13:39:30

@papr I'm guessing it could be surface tracking

user-3f0708 14 September, 2018, 13:41:18

@papr I'm doing a job where I use the pupil so the user can type words with a virtual keyboard, because this problem is making it difficult to perform my work. And I do not know how to solve

papr 14 September, 2018, 15:19:27

@user-3f0708 Could you make an example recording and send it to [email removed] It is difficult to judge what is going wrong exactly without it.

user-ff6db6 17 September, 2018, 14:04:06

Hello, I'm trying to extract some of the pupil detection source into a standalone package for testing. The test script in pupil_src/shared_modules/pupil_detectors/Tests/DetectorTests/test_detectors.py imports the class autoCreateCapture, but this doesn't seem to exist anywhere in the repo. What is this class and is it still being used

papr 17 September, 2018, 15:09:01

This is deprecated code sorry

user-ff6db6 18 September, 2018, 11:27:05

@papr Sounds good thanks!

user-ff6db6 18 September, 2018, 13:20:17

I've got a different problem with detector_3d now: Seems cython can't link against google/glog: detector_3d.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN6google21kLogSiteUninitializedE

However, I can't see anywhere in the source code that actually calls for google log? I've both installed glog from the ubuntu repo and from source, and added it as a library inside the setup.py but still no luck

papr 18 September, 2018, 13:26:59

Could be that ceres tries to link against it, but not sure

user-ff6db6 18 September, 2018, 13:33:26

@papr Thanks. I did figure out that issue, you have a good suggestion for checking that ceres is being linked properly.

user-ff6db6 18 September, 2018, 17:52:21

Is there any documentation on how your detector_2d/detector_3d classes operate? I think the pupil labs papers I've seen were mostly focused on the total hardware/software package instead of the specific techniques

user-eb5882 20 September, 2018, 08:21:03

Hello every dev here I'm building a eye tracking Android app using phone front cam. I can detect the pupil. Now I want to map the eye gaze into real world. Does anyone have any idea?

papr 20 September, 2018, 09:08:58

@user-eb5882 Hey, this type of eye tracking is called "remote eye tracking" and is different from "head mounted eye tracking". The Pupil software does "head mounted eye tracking" only.

user-eb5882 20 September, 2018, 09:26:39

@papr I see. So do you have any ideas or paper related to this

papr 20 September, 2018, 09:29:54

I cannot reference any specific papers but I would search for something like "webcam remote eye tracking". Or simply looking for remote eye tracking should yield a lot of information already

papr 20 September, 2018, 09:30:32

You will find that there is much more to do than just detecting the pupils. 🙂

user-eb5882 20 September, 2018, 09:34:35

🤗 thank you @papr

user-29e10a 20 September, 2018, 11:46:34

@papr is it possible to send notifications with another topic (not "notify.") , maybe "other."? I changed the sending code to the new prefix, but I get the error that no additional request can be sent. So I get no "acknowledging" as a response.

papr 20 September, 2018, 12:02:05

Are you sending the data via pupil remote?

user-29e10a 20 September, 2018, 12:03:58

yes

papr 20 September, 2018, 12:04:43

Pupil remote can only accept notify topics, yes

papr 20 September, 2018, 12:05:18

But what you should do is request PUB_PORT and create a PUB socket for that port. You can send any data on that

user-29e10a 20 September, 2018, 12:06:48

ok I'll try, thanks

papr 20 September, 2018, 12:06:50

If you use annotations. instead of notify. the data will be stored in annotations.pldata instead of notifications.pldata.

user-29e10a 20 September, 2018, 12:07:15

interesting!

papr 20 September, 2018, 12:07:28

The offline annoations plugin will not be able to detect the recorded annoations in v1.8

papr 20 September, 2018, 12:07:44

but we will change that for the upcoming version.

papr 20 September, 2018, 12:08:19

I might even be able to provide a temporaly fixed version that you can use with v1.8

papr 20 September, 2018, 12:29:06

@user-29e10a Actually, I was wrong. The offline annotations plugin already loads annotations from the annotations.pldata file!

papr 20 September, 2018, 12:48:29

@user-29e10a "But what you should do is request PUB_PORT and create a PUB socket for that port. You can send any data on that" - Even though this is technically possible, this data will not be recorded yet!

papr 20 September, 2018, 12:48:54

Sorry for the confusion. I am working an a fix for that

user-29e10a 20 September, 2018, 12:59:57

ok, the recording is not urgent, because I want to react on another way to this ... I created a socket with a PUB_PORT and sending something on this, but how can I subsribe to "other." for example? I get no data on the other side

user-29e10a 20 September, 2018, 13:00:16

maybe it's obvious, but I'm not into the PUB-SUB thing yet

papr 20 September, 2018, 13:01:03

To receive the data you will need a SUB socket that connects to the SUB_PORT

papr 20 September, 2018, 13:01:24

And then you subscribe to "other."

user-29e10a 20 September, 2018, 13:03:56

how do I get the sub_port from the new pub_port? I cannot subsribe on the same sub_port than the one on "notify."?

papr 20 September, 2018, 13:04:17

There are three different ports: - pupil remote, REQ: 50020 - subscription, SUB: request from pupil remote using SUB_PORT - publish, PUB: request from pupil remote using PUB_PORT

user-29e10a 20 September, 2018, 14:11:00

I am definitely doing something wrong. If I register my req socket normally and getting the PUB_PORT, I'm unable to "sub.recv_string()" with "sub = context.socket(zmq.SUB)" and "sub.connect("tcp://{}:{}".format(addr, pub_port))" .... no failure, but it breaks in a while loop with no exception... it hangs.

user-29e10a 20 September, 2018, 14:12:02

I subscribe with sub.setsockopt_string(zmq.SUBSCRIBE, 'other.')

user-29e10a 20 September, 2018, 14:13:29

it hangs even if nothing is sent

papr 20 September, 2018, 21:32:57

@user-29e10a Keep in mind that the subscription messages have two frames, one with the topic, one with the msgpack encoded payload

papr 20 September, 2018, 21:33:25

and be aware that calling recv() is a blocking function that only returns if something was actually received

user-ff6db6 21 September, 2018, 12:42:40

@papr Thanks for the references and the great work

user-29e10a 21 September, 2018, 14:21:12

@papr Thanks, I got it, at least I have the feeling to understand zmq. The trick was, NOT to subscribe to the PUB_PORT 😉

user-b91aa6 24 September, 2018, 08:49:37

May I ask that why the 2D pupil ellipase in 3D eye detection mode is not that stable compared with the 2D pupil ellipase in 2D eye detection mode?

user-b91aa6 24 September, 2018, 08:50:27

There are some eye image frames 2D pupil is not detected correctly in 3D eye detection mode but correct in 2D eye detection mode.

user-b91aa6 24 September, 2018, 09:14:28

What's the reason behind this? Is it because you are using different pupil detection methods in 2D and 3D eye detection mode?

mpk 24 September, 2018, 09:39:55

@user-b91aa6 we would need to see an example video. Otherwise it is hard to tell.

user-29e10a 24 September, 2018, 09:53:26

@user-cd5907 Is the eye ball detection working correctly? It's the big green ellipse. You can turn on the debug window in 3D detection to overlay the eye model with the real eye. If the eye ball is not fitted correctly, the 2D ellipse is not stable

user-b91aa6 24 September, 2018, 10:31:20

Here is what I don't understand. Why the 2D ellipse is not stable when 3D eye model is not fitted well?

user-b91aa6 24 September, 2018, 10:31:25

@user-29e10a

user-29e10a 24 September, 2018, 11:17:24

because the location of 2D ellipse is fitted onto the 3d eye model. Understand this as a sort of "sanity check". it the headset position relative to the eye changes ("slippage") the model should be recalculated (or re-positioned). The only way to know this is to project the 2d ellipse onto the sphere and check for sanity (angle, size etc) ... correct me if I'm wrong but additionally there is a Kalman Filter which predicts the movement of the ellipse as a secondary step. The whole 2d detection is single-frame based, so the ellipse is not referenced by movement or eye model and therefore more stable, BUT has other limitations such as missing angle information or slippage detection

user-29e10a 24 September, 2018, 11:18:18

in fact, the 3d detection starts with the bare 2d detection and performs other steps on top

user-b91aa6 24 September, 2018, 12:47:13

@papr Is what @user-29e10a says correct?

papr 24 September, 2018, 16:13:10

@user-b91aa6 Yes, @user-29e10a is correct. I was not aware of the Kalman filtering - I do not have a deep insight into the 3d detector code. I can ask my colleague tomorrow about details though!

user-b91aa6 25 September, 2018, 16:17:40

Thank you very much. Wish to hear the details.@papr

End of September archive