使用Java或Python捕获行为生物特征识别工具的按键时间?

使用Java或Python捕获行为生物特征识别工具的按键时间?,java,python,biometrics,Java,Python,Biometrics,我正在尝试创建一个行为生物识别工具,它使用键盘使用模式来识别用户。这样做的目的是捕捉用户的类型,而不是什么。我考虑捕获用户按下和释放一个键所需的时间,以及从一个键按下到另一个键的时间 我一直在研究,但我只发现“键盘记录器”类型的程序和教程,与之相同,我认为不可能使用我描述的方式有人能给我一个提示或指导来做这样的事情吗谢谢。pynput可以在按下时运行一个函数,在释放时运行另一个函数,两个函数都可以在两个变量中保持当前时间。若你们在一个函数中减去它们,那个么你们应该得到按下的时间,若你们在另一个函

我正在尝试创建一个行为生物识别工具,它使用键盘使用模式来识别用户。这样做的目的是捕捉用户的类型,而不是什么。我考虑捕获用户按下和释放一个键所需的时间,以及从一个键按下到另一个键的时间

我一直在研究,但我只发现“键盘记录器”类型的程序和教程,与之相同,我认为不可能使用我描述的方式
有人能给我一个提示或指导来做这样的事情吗
谢谢。

pynput
可以在按下时运行一个函数
,在释放时运行另一个函数
,两个函数都可以在两个变量中保持当前时间。若你们在一个函数中减去它们,那个么你们应该得到按下的时间,若你们在另一个函数中减去它们,那个么你们应该得到释放的时间

在代码中,我检查任意键之间的时间,也检查每个键的时间

from pynput import keyboard
import datetime

# --- data ---

press_time = None
release_time = None

keys_press_time = {}
keys_release_time = {}

# --- functions ---

def press(key):
    global press_time

    press_time = datetime.datetime.now()

    if release_time:
        print('how long was released:', press_time - release_time, 'key: ANY')

    # --- individual keys ---

    keys_press_time[key] = press_time

    if key in keys_release_time:
        print('how long was released:', keys_press_time[key] - keys_release_time[key], 'key:', str(key))

def release(key):
    global release_time

    release_time = datetime.datetime.now()

    if press_time:
        print('how long was pressed :', release_time - press_time, 'key: ANY')

    # --- individual keys ---

    keys_release_time[key] = release_time

    if key in keys_press_time:
        print('how long was pressed :', keys_release_time[key] - keys_press_time[key], 'key:', str(key))

# --- main ---

with keyboard.Listener(on_press=press, on_release=release) as listener:
    # ... other code ...
    listener.join()
唯一的问题是,当您将某个键保留更长时间,系统开始重复该键(它会生成
release
事件),然后给出更短的时间。它需要关闭系统中的“重复”,或者需要更复杂的代码来减少这个问题



顺便说一句:我想你可以用非常类似的方式用
jnativehook
做同样的事情。

为什么你认为用
pynput
做不到?您是否尝试使用
pynput
?它可以在按下时执行一个功能
,在释放时执行另一个功能
,您可以在这两个功能中使用
time
datetime
来获取当前时间-当您减去两个
datetime
值时,您就可以得到所需的值
timedelta
。我想你可以用
jnativehook
做同样的事情。但是你必须尝试这样做。好主意,但是关于涉及的环境有一个重要问题:Java和Python的虚拟机可能不在实时环境中,无法获得足够可靠和快速的响应,因此作为生物识别标记的“presstime”的预期小变化不够健壮。当按键时,我们可以期望的是80-100毫秒以下的任何东西,从人类的感知上看不出任何区别,因此驱动程序及其自身的中断就是围绕这一事实设计的。这正是我所寻找的!非常感谢你的帮助!我现在可以更好地理解听众是如何工作的了,非常感谢!我使用set()解决了重复按键的问题,在第一次按下按键时保存按键,在释放按键时删除按键,以防有人需要。