Python+scrcpy+pyminitouch实现自动化(四)——实现语音识别自动打卡机器人

2023-05-16

首先要去网上下载一个想要实现自动化的软件,下载对应的apk后拖拉到虚拟器的页面即可实现自动下载。

 

 

以上是对于AS打开的模拟器进行的下载安装,由于我找不到关于x86的企业微信,所以我就换了逍遥模拟器,对于AS的模拟器只能是基于Google Play或者是Google APIS的。具体可参考这篇博客:android studio中AVD模拟器添加APK文件的方法_xuzhimolol的博客-CSDN博客_android studio 虚拟机安装apk。

  • 下载逍遥模拟器:【逍遥安卓模拟器】安卓模拟器电脑版_安卓模拟器哪个好用_逍遥安卓模拟器下载官网

  • 安装想要安装的软件

 

 

  • 打开上一次下载的platform-tools,将adb.exe进行复制到逍遥的安装目录中,覆盖掉原本的adb.exe:

  •  之后打开cmd执行
adb connect 127.0.0.1:21503

  •  查看是否与adb链接成功
adb devices

  •  可以按照以前调试真机的方式调试了

可以使用pyminitouch得到设备的x与y,也可以通过appium进行得知要点击的位置。为了方便我就使用的Appium。

要得到以下的密钥:具体如何获得可以参考以前的博客:Python + Appium 自动化测试(二):实战_Alkaid2000的博客-CSDN博客

 最后我得到的:

{
  "platformName": "Android",
  "platformVersion": "7.1.2",
  "deviceName": "TAS-AN00",
  "appPackage": " com.tencent.wework",
  "appActivity": ".launch.WwMainActivity",
  "noReset": "True"
}
  • 打开appium

  •  了解手机坐标

 

相当于是数学象限的第四象限,x为横轴,y为纵轴。为什么要以这样的坐标设计,其实也挺好理解的,从用户角度看,我们滑动都是向下翻阅(向上滑动),或者是向右翻阅(向左滑动)。那既然是向下和向右,那么自然原点设置在左上角了。

那回头看appium中的bounds元素:

我们可以从中得到我们所要点击的坐标为555~685,而y轴是685~529。从而可以给我们pyminitouch提供点击坐标。

  • 启动开发者模式!!

    使用模拟器也是需要打开开发者模式的,打开设置,点击关于平板电脑,连续单击版本号,开启开发者模式。

 

 

  • 编程

写了一个测试案例,但是也是出现了一个服务器被占用的错误:

from pyminitouch import safe_connection, safe_device, MNTDevice, CommandBuilder

_DEVICE_ID = '127.0.0.1:21503'

device = MNTDevice(_DEVICE_ID)

# print the maximum x and Y coordinates
print("max x:", device.connection.max_x)
print("max y:", device.connection.max_y)

# single-tap
device.tap([(620, 570)])

Note: hard-limiting maximum number of contacts to 10
binding socket: Address already in use
Unable to start server on minitouch

解决问题:

在cmd中输入:

netstat -ano

 找到我们端口所在运行的程序:

 输入命令:

tasklist

找到对应占用的程序,直接使用任务管理器结束掉这个程序。

或者使用adb shell进行点击也是可行的:

adb shell input x y
from pyminitouch import safe_connection, safe_device, MNTDevice, CommandBuilder
import time

_DEVICE_ID = '127.0.0.1:21503'

device = MNTDevice(_DEVICE_ID)

# print the maximum x and Y coordinates
print("max x:", device.connection.max_x)
print("max y:", device.connection.max_y)

# single-tap
device.tap([(640, 300)])
time.sleep(10)

device.tap([(480, 1250)])
time.sleep(3)

device.tap([(150, 300)])
time.sleep(5)

device.stop()

 再融入百度的语音识别sdk:

import time
import speech_recognition as sr
import os
import pyttsx3
from aip import AipSpeech
from appium import webdriver
from pyminitouch import MNTDevice


_DEVICE_ID = '127.0.0.1:21503'

APP_ID = '25751234'
API_KEY = 'Ia1pGYSvwe3iWfOr012345'
SECRET_KEY = 'fUSMXOcnZZGtlv99ONIn7MAE12345'

device = MNTDevice(_DEVICE_ID)
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)


# 用于录音speech_recognition
def grow_audio(rate=16000):
    # 用于读取麦克风
    r = sr.Recognizer()
    with sr.Microphone(sample_rate=rate) as source:
        print("他在等你讲话...")
        # 动态调整能量阈值以解决环境噪音
        r.adjust_for_ambient_noise(source)
        # 限制录音时长位30s
        audio = r.listen(source, phrase_time_limit=30)
        print('okk!')
    # 将音频写入
    with open('voice.wav', 'wb') as f:
        f.write(audio.get_wav_data())


# 读取文件
def get_file_content(filePath):
    cmd_str = "ffmpeg -y  -i %s  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s.pcm" % (filePath, filePath)
    os.system(cmd_str)  # 调用系统命令ffmpeg,传入音频文件名
    with open(filePath + ".pcm", 'rb')as fp:
        return fp.read()


# 识别文件 使用百度API
def pcm2text():
    pcm_audio = get_file_content('voice.wav')
    text = client.asr(pcm_audio, 'pcm', 16000, {'dev_pid': 1537, })
    print(text['result'])
    return text['result']


def say_hi():
    engine.say('嘿,你来找我玩啦!')
    # 本句话是没有声音的,如果要调用say()函数,每次调用都要加上这句
    engine.runAndWait()


def headlth_update_2():
    engine.say('正在健康上报')
    engine.runAndWait()
    # single-tap
    device.tap([(640, 300)])
    time.sleep(10)

    device.tap([(480, 1250)])
    time.sleep(3)

    device.tap([(150, 300)])
    time.sleep(5)

    device.stop()
    engine.say('健康上报完成')


if __name__ == "__main__":
    # 初始化
    engine = pyttsx3.init()
    say_hi()
    while True:
        grow_audio()
        output = pcm2text()
        if '企业微信进行健康上报' or '打开' or '微信' or '健康上报' in output:
            engine.say('好的')
            engine.runAndWait()
            headlth_update_2()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python+scrcpy+pyminitouch实现自动化(四)——实现语音识别自动打卡机器人 的相关文章

  • Java -- 抽象类

    抽象类 xff1a 包含抽象方法类 xff0c 叫抽象类 没有方法体的方法 xff0c 叫抽象方法 关键字 abstract 抽象方法 xff1a 权限修饰符 abstract 返回值 方法名 形参列表 例如 xff1a public ab
  • 利用Winsock实现UDP通信

    UDP通信的C语言实现 UDP通信的定义Winsock用于通信的结构体服务端socket建立服务端程序源码用户端socket建立用户端程序源码信息的接收与发送UDP通信的特点 UDP通信的定义 Internet 协议集支持一个无连接的传输协
  • C++的string类型中关于append函数、push_back函数和+=运算符的区别

    append 43 61 push back全字符串 xff08 string xff09 部分字符串 xff08 substring xff09 字符数组 xff08 char array xff09 单个字符 xff08 char xf
  • 深度学习中查看显卡使用情况

    命令 xff1a nvidia smi 功能 xff1a 显示服务器上的GPU的情况 命令 xff1a nvidia smi l 功能 xff1a 定时更新显示服务器上的GPU的情况 命令 xff1a watch n 3 nvidia sm
  • Shell脚本入门(一)--- 变量赋值、调取、echo$计算

    Shell脚本入门 xff08 一 xff09 文章目录 Shell脚本入门 xff08 一 xff09 64 toc shell 脚本变量赋值echo 计算 作业 xff1a 获取主机基本信息及分区使用率 shell 脚本 shell 变
  • C和C++中 struct的区别

    1 xff1a C 43 43 中不需要加struct就可以定义变量 xff0c 而c需要加struct 2 xff1a C 43 43 结构体内部可以使用函数
  • C和C++的const

    1 C语言的const修饰的变量都有空间 xff0c 全局的在常量区 xff0c 局部的在栈区 xff1b 2 C语言的const修饰的全局变量具有外部链接属性 xff0c extern const int a xff1b 即可使用 xff
  • 连接SSH失败的原因以及方法

    一 检查用户名密码 连接失败时可以先检查验证信息 xff0c 步骤如下 xff1a 1 运行软件 xff0c 在会话管理中找到连接失败的会话 右键单击会话名 xff0c 点击属性 图1 xff1a 查看属性 2 在弹出的对话框点击用户身份验
  • 虚地址空间

  • tensorflow2.0 学习笔记-利用tf.data.Dataset API读取numpy array文件

    tensorflow2 0 学习笔记 数据读取1 利用tf data Dataset API读取numpy array文件读取numpy array数据 利用tf data Dataset API读取numpy array文件 读取nump
  • matplotlib绘图中文乱码问题--解决方案(Windows)

    最近使用python绘图时 xff0c 出现中文乱码问题 xff0c 结合在网上搜索理解后 xff0c 按照如下步骤 xff0c 成功解决 解决方案 xff1a 步骤一 xff1a 找到Mircosoft YaHei UI字体文件 一般 在
  • Python数据分析之--运动员数据揭秘(一)

    在网易云课堂看了城市数据团的课程 xff0c 对理解利用pytthon进行数据分析的基本流程很有帮助 xff0c 因此进行复盘总结 xff0c 加深自己的理解 xff0c 巩固相关操作 分析资料及工具 xff1a Spyder Python
  • 缓慢变化维

    一 什么是缓慢变化维 xff1f 缓慢变化维 xff08 Slowly Changing Dimensions SCD xff09 它的提出是因为在现实世界中 xff0c 维度的属性并不是静态的 xff0c 它会随着时间的流失发生缓慢的变化
  • 一个小例子带你入门-Tableau

    声明 xff1a 本文是学习W3Cschool教程整理所得 xff0c 非原创 xff0c 原文链接 xff1a W3Cschool 创建任何Tableau数据分析报告涉及三个基本步骤 连接到数据源 它涉及定位数据并使用适当类型的连接来读取
  • SQL 必知必会--函数篇

    对SQL的基础函数做复习回顾 xff0c 本篇涉及的函数知识如下 xff1a 好了 xff0c 下面开始复习 xff1a SQL Aggregate 函数计算从列中取得的值 xff0c 返回一个单一的 值 Max 函数 作用 xff1a 返
  • WPS的Linux Mint版(Ubuntu)提示“系统缺失字体”的解决方法

    wps的Linux Mint版 Ubuntu 版安装成功后 xff0c 可能每次启动的时候都会提示 xff1a 系统缺失字体 xff0c 如图 xff1a 解决方法 1 首先下载字体包并解压 链接 https pan baidu com s
  • SQL必知必会--中级篇(二)

    接上一篇SQL必知必会 中级篇 xff08 一 xff09 xff0c 继续对sql知识进行整理复习 本篇包含知识点如图 xff1a 一 SQL 约束 用于规定表中的数据规 则 xff1b 如果存在违反约束的数据行为 xff0c 行为会被约
  • 静态网页个人简历

    程序员的简历是不用随身带的 首先 xff0c 作为程序员自己的简历是比别人特别的 xff1b 程序员应该是有思想 xff0c 有高情商的手工艺人 作为程序员简历是随身带的代码 xff0c 用代码书写的简历就像是一份随身携带着的简历 xff0
  • CMake之CMakeLists.txt编写入门

    自定义变量 主要有隐式定义和显式定义两种 隐式定义的一个例子是PROJECT指令 xff0c 它会隐式的定义 lt projectname gt BINARY DIR和 lt projectname gt SOURCE DIR两个变量 xf
  • 照相机成像原理 数码相机的成像原理

    照相机成像原理 数码相机的成像原理 1 1 数码相机 的成像原理 当打开相机的电源开关后 xff0c 主控程序芯片开始检查整个相机 xff0c 确定各个部件是否处于可工作状态 如果一切正常 xff0c 相机将处于待命状态 xff1b 若某一

随机推荐

  • MySQL 单表查询

    创建数据库并插入数据 创建表 xff0c 数据类型请自行查询 CREATE TABLE fruits id INT NOT NULL sid INT NOT NULL NAME CHAR 255 NOT NULL price DECIMAL
  • react ant Design pro Umi 项目左上角icon不显示

    今天本地运行项目没有问题 xff0c 打包发到远端发现logo icon不显示了 然后找了找资料说 LayoutSettings 哪里logo用链接图片可以本地图片有时候会加载异常 解决方法 xff1a 找到 app tsx 加个logo
  • ZeroMQ发布-订阅模式的应用(C++)

    我使用的ZeroMQ版本是4 2 0 xff0c 应用的是其发布 订阅模式 应该知道的细节 xff1a PUB SUB套接字是慢连接 xff0c 你无法得知SUB是何时开始接收消息的 就算你先打开了SUB套接字 xff0c 后打开PUB发送
  • Ubuntu 问题记录(1)| 关于卸载以源码方式安装的库

    Ubuntu 使用源码安装 lib 后 xff0c 如果要卸载 xff0c 则在 lib build 路径下使用 sudo make uninstall 之后再用 sudo updatedb 更新一下 lib 库 xff0c 再使用 loc
  • 注意字符数组最后会自动加\0

    今天做了一道考研题 规定数组大小为200 但是我没注意到后尾需要加 0 后来果断没有A过去 很伤心 反复不断地尝试怎么都不行 后来经一位仁兄点拨 瞬间豁然 include lt iostream gt include lt cstdio g
  • 在TypeScript中使用parseInt()

    在使用angular写一些东西的时候 xff0c 需要用到parseInt 方法来将时间戳转换成时分秒 xx时 xx分 xx秒 的格式 xff0c 但是因为angular所使用的是Typescript xff0c 而 parseInt st
  • CAS6.2.x ~ 准备(1)

    前言 CAS 企业单点登录 xff0c 目前最新版本是6 2 x Apereo 的 Central Authentication Service xff0c 通常称为CAS CAS是用于web的企业多语言单点登录解决方案 xff0c 并试图
  • MySql 安装,root初始化密码设置

    MySQL下载地址 xff1a https dev mysql com downloads mysql 2 解压MySQL压缩包 将以下载的MySQL压缩包解压到自定义目录下 我的解压目录是 C mysql 8 0 12 winx64 34
  • Python游戏项目--外星人入侵(一)

    一 安装Pygame 在终端输入 xff1a pip install user pygame 二 开始游戏项目 xff08 1 xff09 创建Pygame窗口及响应用户输入 创建一个名为alien invasion py 的文件 xff0
  • SpringSecurity OAuth2 获取Token端点TokenEndpoint、Token授权TokenGranter接口 详解

    1 前言 在 授权服务器是如何实现授权的呢 xff1f 中 xff0c 我们可以了解到服务端实现授权的流程 xff0c 同时知道 xff0c 当授权端点AuthorizationEndpoint生成授权码时 xff0c 就会重定向到客户端的
  • Make文件中赋值等号的几种类型(:=,?=,=)

    今天有一位以前仅做过Android APP开发的同学突然间问我 xff0c 说Makefile中经常可以看见 xff1a 冒号等号 61 问号等号 61 和直接等号 61 这究竟有什么区别呢 xff1f 欢迎转载 xff0c 但是请注明原出
  • 支持nvidia GPU 的硬件编解码的ffmpeg编译记要

    支持nvidia GPU 的硬件编解码的ffmpeg编译记要 中间目录 xff1a out 1 x264 下载x264 stable zip unzip x264 stable zip cd x264 stable configure en
  • 软件工程学习笔记——第三周:结构化分析方法-1

    结构化分析方法的概念 结构化分析模型 结构化分析过程
  • GBK编码表

    说明 xff1a 比如第一个 34 顿号 34 的编码就是A1A2 GBK 汉字内码扩展规范 编码表 二 全国信息技术标准化技术委员会 汉字内码扩展规范 GBK Chinese Internal Code Specification 1 0
  • SSH 使用过程中,出现的问题以及解决办法

    1 ssh登陆提示 server unexpectedly closed network connection 在使用ssh登入Linux時 xff0c 卻發生了serverunexpectedly closed network conne
  • CentOS7安装vncserver

    1 关闭防火墙和selinux systemctl stop firewalld service setenforce 0 2 安装图形支持 yum groups install 34 GNOME Desktop 34 或yum group
  • Echarts tooltip加上单位并带着图例颜色

    模仿腾讯疫情地图 xff0c Y轴有个百分比 xff0c 也就是Y轴有单位 xff0c 使用JS代码如下 xff1a tooltip trigger 39 axis 39 formatter function params var relV
  • xv6调试

    窗口1作为xv6的运行窗口 make CPUS 61 1 qemu gdb 窗口2作为gdb调试窗口 gdb multiarch kernel kernel 进入gdb后执行 set confirm off set architecture
  • mit6.s081-21-Lab1/ Xv6 and Unix utilities

    sleep Implement the UNIX program sleep for xv6 your sleep should pause for a user specified number of ticks A tick is a
  • Python+scrcpy+pyminitouch实现自动化(四)——实现语音识别自动打卡机器人

    首先要去网上下载一个想要实现自动化的软件 xff0c 下载对应的apk后拖拉到虚拟器的页面即可实现自动下载 以上是对于AS打开的模拟器进行的下载安装 xff0c 由于我找不到关于x86的企业微信 xff0c 所以我就换了逍遥模拟器 xff0