一次失败且无聊的尝试

阅读: 评论:0

一次失败且无聊的尝试

一次失败且无聊的尝试

之前有个想法,想看下一天下来鼠标都在哪些点停留了,再通过鼠标位移,反推手移动看下右手腕扭动情况。

为了实现这样的目标,我做了如下尝试,希望能够给各位读者一定的启发,做到抛转引玉的效果。

鼠标轨迹和点击位置分析

首先我们需要监控鼠标,如果监控鼠标操作呢?答案是使用pynput库(可使用pip直接安装)。

下面是监控鼠标操作的测试代码:

监控鼠标操作

from pynput import mousedef on_move(x, y):print(f'({x}, {y})', end=",")def on_click(x, y, button, pressed):if pressed:print(f"n在坐标({x},{y})处点击鼠标,释放鼠标时将结束任务")else:return Falsedef on_scroll(x, y, dx, dy):print(f"n在坐标({x},{y})处, 滚动滑轮dx={dx},dy={dy}")with mouse.Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:listener.join()

上面三个函数分别监听了鼠标的移动点击和滑轮滚动,任意一个函数返回False时,pynput将停止鼠标监听。

基于此,我们就可以基于鼠标位置:

from collections import Counter# 记录鼠标移动轨迹坐标
p = Counter()
# 记录鼠标点击点坐标
clicks = []

记录函数:

from pynput import mouse
from PIL import ImageGrab
import numpy as npdef on_move(x, y):p[(x, y)] += 1def on_click(x, y, button, pressed):if pressed:clicks.append((x, y))return Falsewith mouse.Listener(on_move=on_move, on_click=on_click) as listener:listener.join()

绘制鼠标轨迹

在反复执行以上函数后,我们可以开始绘制轨迹图像了:

import pandas as pd
from PIL import ImageGrab
import matplotlib.pyplot as plt
%matplotlib inline
Params['font.sans-serif'] = ['SimHei']
Params['axes.unicode_minus'] = Falsefig, ax = plt.subplots(figsize=(18, 8))
img = ab()
ax.imshow(img)# 绘制移动位置
xys = pd.DataFrame(p.keys())
xys[2] = p.values()
ax.scatter(xys[0], xys[1], c=xys[2],cmap&#jet, edgecolors='none', alpha=0.1, s=10)# 绘制点击点
xys = pd.DataFrame(clicks)
ax.scatter(xys[0], xys[1], c='red', s=30, alpha=0.3)plt.show()

红色代表了鼠标点击点,蓝色表示鼠标运行轨迹。

目前我感觉结果可行。

现在我们设计一个web服务器,当我们访问的时候,可以实时反馈当前的轨迹图像:

web服务器设计

这次使用的框架为Flask,pip也可以直接安装。

首先测试一个web服务器实时反馈当前屏幕的使用情况:

from io import BytesIOfrom PIL import ImageGrab
from flask import Flask, make_responseapp = Flask(__name__)&#ute('/hot', methods=['GET'])
def hot():img = ab()out = BytesIO()img.save(out, 'JPEG', quality=70)response = make_value())response.headers["Content-Type"] = "image/png"return responseif __name__ == '__main__':app.run(host="0.0.0.0", port=80)

此时如果游览器不停的刷新,就能产生不停延展的镜像效果:

下面尝试启动一个线程去监控鼠标轨迹和点击位置,并启动web服务:

import _thread
import os
from collections import Counterfrom pynput import mousep = Counter()
# 记录鼠标点击点坐标
clicks = set()def on_move(x, y):p[(x, y)] += 1def on_click(x, y, button, pressed):if pressed:clicks.add((x, y))return Falsedef listening_mouse():while True:with mouse.Listener(on_move=on_move, on_click=on_click) as listener:listener.join()_thread.start_new_thread(listening_mouse, ())from flask import Flask, make_response, send_from_directoryapp = Flask(__name__)import pandas as pd
from PIL import ImageGrab
import matplotlib.pyplot Params['font.sans-serif'] = ['SimHei']
Params['axes.unicode_minus'] = False&#ute('/hot', methods=['GET'])
def hot():fig, ax = plt.subplots(figsize=(18, 8))img = ab()ax.imshow(img)# 绘制移动位置tmp = p.copy()xys = pd.DataFrame(tmp.keys())xys[2] = tmp.values()ax.scatter(xys[0], xys[1], c=xys[2],cmap&#jet, edgecolors='none', alpha=0.1, s=10)# 绘制点击点xys = pd.DataFrame(clicks)ax.scatter(xys[0], xys[1], c='red', s=50, alpha=0.3)plt.savefig('a.jpg', format='jpg', bbox_inches='tight', pad_inches=0)basedir = os.path.abspath(os.path.dirname(__file__))response = make_response(send_from_directory(basedir, 'tmp.jpg', as_attachment=True))response.headers["Content-Type"] = "image/png"del response.headers["Content-Disposition"]return responseif __name__ == '__main__':app.run(host="0.0.0.0", port=80)

在干了半小时别的之后,再次回来刷新页面查看:得到了如下轨迹图:

总结

个人感觉这是一次非常失败的尝试,一开始的想法很美好,然而现实很骨感,实际做起来效果很差,我个人是看不出有啥价值,也不打算继续做了。

不过还是希望本次尝试能够给读者们一些启发,做到抛砖引玉的作用。

利用本文涉及的技术能实现可能有价值的事情有:

  1. 监控置顶窗口分别截图,分析对于不同的软件的鼠标热点轨迹
  2. 给画板APP增加轨迹录制、线稿录制功能,回放画画过程

最终,本文图片准备上传前的鼠标热点图:

本文发布于:2024-02-03 23:54:16,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170697977651869.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:swagger
标签:无聊
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23