Linux 上的视线跟踪与头部跟踪解决方案

Linux 上的视线跟踪与头部跟踪解决方案

背景:

多年来,我一直在应对慢性 RSI,并且正在研究各种不用手控制计算机的选项。 Linux 已经成为我的操作系统几年了,如果可以的话我真的不想回到 Windows,但如果我很快找不到任何东西,我将不得不数我的筹码,因为我已经花了看了好几个小时。

这肉:

特别是,我正在寻找带有头部跟踪的眼睛注视跟踪(最好在同一程序中),但我会考虑将手势技术作为补充程序。任何价格都可以,但免费和开源总是好的。如果您有任何推荐的跟踪硬件,请提供您的建议。由于当您注视固定点时,眼睛会自然地抖动(或扫视),因此该技术的优点是眼睛注视跟踪的速度和头部跟踪的单像素精度。我将使用它和语音识别堆栈来控制我的计算机甚至代码。

我发现 Precision Gaze Mouse 可与 Eviacam 配合使用,但不幸的是 Precison Gaze Mouse 目前仅适用于 Windows。我正在寻找类似这样的组合。下面链接中的 Precision Gaze Mouse 视频演示了其工作原理。以下是参考链接:

https:// Precisiongazemouse.org/

https://eviacam.crea-si.com/

答案1

别抱太大希望,但希望你一切都好。我想为 Linux 上的 Tobii 眼动仪(Tobii 4C 和 Tobii 5)制作一个类似的免费软件。我还希望把它放在 Raspberry Pi 上,让 Raspberry Pi 假装成鼠标(Linux 小工具、USB On-The-Go)。但在发了很多封电子邮件后,他们说我只能将其设为专有,并且我需要购买许可证,因为他们只针对 WinDoWS 游戏玩家,我放弃了。

有一个叫做 Talon 的东西,它有 Tobii 支持:https://talonvoice.com 我没有使用过它,它是一个庞大的专有软件包,但它确实很重要。

我把希望寄托在 Tobii 上,因为它们价格实惠,而且大多数视线追踪器都是用于学术目的。这是一个比较:https://thume.ca/2016/03/24/eye-tracker-reviews-pupil-labs-tobii-eyex-eye-tribe-tobii-x2-30

我没有找到任何使用网络摄像头的良好视线跟踪实现,但我觉得这是可以做到的。我发现最好的是这样的:https://github.com/antoinelame/GazeTracking 但它更多地只是眼球追踪和“向左看”或“向右看”,没有目光指向屏幕投影。

我使用自己的设置使用语音而不是键盘:https://git.sr.ht/~geb/numen 我不使用鼠标,只使用以键盘为中心的程序,例如 Vim 文本编辑器和 qutebrowser 网络浏览器。我们的计划是让它在 Raspberry Pi 上运行,这样你就可以通过插入 Pi 来使用任何计算机。我只是想对需要指针设备的事情进行视线跟踪,例如绘制图表。

也许我在这里说的一些话会有帮助。

答案2

我也加入了 RSI,自 2022 年 3 月起我就将 talon 与 tobii 4c 一起使用。这是一个免费的含电池套餐,社区不断壮大。就我而言,我对此感到非常高兴,因为它的设置速度非常快,而且我可以再次使用我的 Linux 系统。我仍在调整我的设置,但肯定有一些我不喜欢的地方。但在我看来,它的用户体验(包括 python 脚本)超过了平均水平,并且是迄今为止我所知道的最好的开始。您也可以仅将 talon 用作 tobii 硬件的接口,仅此而已:

# this is beta-API, the free version differs a tiny bit in its naming; leave a comment if you're interested
import pickle
from talon.plugins.eye_mouse_2 import BaseControlMouse

class StreamingMouse(BaseControlMouse):
    def update(self, tracker, screen, frame):
        # ~70 Hz on my system
        socket.send(
            pickle.dumps(
                (
                    frame.gaze,
                    frame.head,
                    frame.gaze_frame.ts,
                    frame.gaze_frame.left.gaze.x,
                    frame.gaze_frame.left.gaze.y,
                    frame.gaze_frame.right.gaze.x,
                    frame.gaze_frame.right.gaze.y,
                )
            )
        )
streaming_mouse = StreamingMouse()
streaming_mouse.start()

https://github.com/adabru/speech/blob/main/adabru_talon/code/eyeput.py

相关内容