回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【教哈有方】二哈智控系列二——智控电脑 简单

头像 云天 2020.03.31 805 0

设计背景】久坐电脑前,肩膀酸,脖子痛,全身是不舒服。能不能又活动身体,又能操控电脑呢。我看了一眼身旁的“二哈”,就你了,该你上场作贡献了。

设计思路】利用“二哈”的人脸识别功能,识别人脸方框坐标,通过物联网发送至电脑Python程序,Python程序利用所获坐标来控制电脑鼠标。

解决问题】1、如何确认点击操作?解决思路:当鼠标指针停留在某处达到3秒以上,即进行点击操作。2、如何进行鼠标右键操作?当鼠标左右往复相同位置一次,即进行右键操作。3、如何进行滚动鼠标中轮操作?当鼠标上下往复相同位置一次,即进行滚动操作。

应用声明】因带有娱乐性质,不要期待以下程序能真正操控电脑,达到应用级别,我只是开个头,大家可以继续前行。

project-image

步骤1 环境配置

[项目]掌控板控制电脑鼠标 https://mc.dfrobot.com.cn/thread-303640-1-1.html相关环境配置请参考上面我的另一个帖子。

步骤2 二哈程序

使用掌控板+扩展板,二哈接在IIC口上。因电脑使用Siot物联网,所以掌控板与电脑需在一个局域网中。

project-image

程序中利用识别人脸方框的中心坐标计算与上一次坐标的变化区域,如果小于20,认为未移动,准备进行点击操作。(未对20这个数进行多次测试,不知是否趋于合理)

project-image

步骤3 Python程序

ControlMouse.py主程序

代码
# -*- coding: utf-8 -*-
 
import paho.mqtt.client as mqtt
import json
import urllib.request
import mouse,time,os
import string 
MQTTHOST = "192.168.31.142"
MQTTPORT = 1883
mqttClient = mqtt.Client()
 
space1=10
# 连接MQTT服务器
def on_mqtt_connect():
    mqttClient.connect(MQTTHOST, MQTTPORT, 60)
    mqttClient.loop_start()
 
 
# publish 消息
def on_publish(topic, payload, qos):
    mqttClient.publish(topic, payload, qos)
    #print(topic)
 
# 消息处理函数
def on_message_come(lient, userdata, msg):
   global space1
   print(msg.topic + " " + ":" +str(msg.payload,encoding='utf-8'))
  # if(msg.topic=="df/mouse"):  
   constr=str(msg.payload,encoding='utf-8')
   constr=constr.split(':')
   mouse.control(constr[0],constr[1],constr[2])
  
 
# subscribe 消息
def on_subscribe():
    mqttClient.subscribe("df/mouse", 1)
    mqttClient.subscribe("df/space", 1)
    mqttClient.on_message = on_message_come # 消息到来处理函数
    print("subscribe mouse OK")
 
 
def main():
    on_mqtt_connect()
    time.sleep(5)
    #on_publish("df/mouse", "Hello dfrobot!", 0)#0代表保存在服务器上
    on_subscribe()#订阅的是mouse主题
    while True:
        if(mqttClient.is_connected()):
          pass
        else:
          on_mqtt_connect()
          time.sleep(5)
          on_subscribe()#订阅的是mouse主题
        #pass
 
 
 
if __name__ == '__main__':
    main()

Mouse.py鼠标控制程序

代码
from pymouse import PyMouse
import time
def control(x,y,n):
 m = PyMouse()
 x_dim, y_dim = m.screen_size()

 x1= x_dim-int( float(x))
 y1= int( float(y))
 n1=int(n)
 #a = m.position()    #获取当前坐标的位置
 if(n1==1):
  m.click(x1,y1)
  m.click(x1,y1)
 if(n1==0):
  m.move(x1, y1)   #鼠标移动到(x,y)位置
 
 return

需要说明的是:int( float(x)),因从掌控板通过Siot物联网传来的数据是字符串,类似“888.01”,因有‘.’这个字符,直接用Int函数会出错。应先转成浮点型,再转成整型。(个人理解)

评论

user-avatar