当前位置:   article > 正文

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

python scrcpy client

首先要去网上下载一个想要实现自动化的软件,下载对应的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博客

 最后我得到的:

  1. {
  2. "platformName": "Android",
  3. "platformVersion": "7.1.2",
  4. "deviceName": "TAS-AN00",
  5. "appPackage": " com.tencent.wework",
  6. "appActivity": ".launch.WwMainActivity",
  7. "noReset": "True"
  8. }
  • 打开appium

  •  了解手机坐标

 

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

那回头看appium中的bounds元素:

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

  • 启动开发者模式!!

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

 

 

  • 编程

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

  1. from pyminitouch import safe_connection, safe_device, MNTDevice, CommandBuilder
  2. _DEVICE_ID = '127.0.0.1:21503'
  3. device = MNTDevice(_DEVICE_ID)
  4. # print the maximum x and Y coordinates
  5. print("max x:", device.connection.max_x)
  6. print("max y:", device.connection.max_y)
  7. # single-tap
  8. 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
  1. from pyminitouch import safe_connection, safe_device, MNTDevice, CommandBuilder
  2. import time
  3. _DEVICE_ID = '127.0.0.1:21503'
  4. device = MNTDevice(_DEVICE_ID)
  5. # print the maximum x and Y coordinates
  6. print("max x:", device.connection.max_x)
  7. print("max y:", device.connection.max_y)
  8. # single-tap
  9. device.tap([(640, 300)])
  10. time.sleep(10)
  11. device.tap([(480, 1250)])
  12. time.sleep(3)
  13. device.tap([(150, 300)])
  14. time.sleep(5)
  15. device.stop()

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

  1. import time
  2. import speech_recognition as sr
  3. import os
  4. import pyttsx3
  5. from aip import AipSpeech
  6. from appium import webdriver
  7. from pyminitouch import MNTDevice
  8. _DEVICE_ID = '127.0.0.1:21503'
  9. APP_ID = '25751234'
  10. API_KEY = 'Ia1pGYSvwe3iWfOr012345'
  11. SECRET_KEY = 'fUSMXOcnZZGtlv99ONIn7MAE12345'
  12. device = MNTDevice(_DEVICE_ID)
  13. client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
  14. # 用于录音speech_recognition
  15. def grow_audio(rate=16000):
  16. # 用于读取麦克风
  17. r = sr.Recognizer()
  18. with sr.Microphone(sample_rate=rate) as source:
  19. print("他在等你讲话...")
  20. # 动态调整能量阈值以解决环境噪音
  21. r.adjust_for_ambient_noise(source)
  22. # 限制录音时长位30s
  23. audio = r.listen(source, phrase_time_limit=30)
  24. print('okk!')
  25. # 将音频写入
  26. with open('voice.wav', 'wb') as f:
  27. f.write(audio.get_wav_data())
  28. # 读取文件
  29. def get_file_content(filePath):
  30. cmd_str = "ffmpeg -y -i %s -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s.pcm" % (filePath, filePath)
  31. os.system(cmd_str) # 调用系统命令ffmpeg,传入音频文件名
  32. with open(filePath + ".pcm", 'rb')as fp:
  33. return fp.read()
  34. # 识别文件 使用百度API
  35. def pcm2text():
  36. pcm_audio = get_file_content('voice.wav')
  37. text = client.asr(pcm_audio, 'pcm', 16000, {'dev_pid': 1537, })
  38. print(text['result'])
  39. return text['result']
  40. def say_hi():
  41. engine.say('嘿,你来找我玩啦!')
  42. # 本句话是没有声音的,如果要调用say()函数,每次调用都要加上这句
  43. engine.runAndWait()
  44. def headlth_update_2():
  45. engine.say('正在健康上报')
  46. engine.runAndWait()
  47. # single-tap
  48. device.tap([(640, 300)])
  49. time.sleep(10)
  50. device.tap([(480, 1250)])
  51. time.sleep(3)
  52. device.tap([(150, 300)])
  53. time.sleep(5)
  54. device.stop()
  55. engine.say('健康上报完成')
  56. if __name__ == "__main__":
  57. # 初始化
  58. engine = pyttsx3.init()
  59. say_hi()
  60. while True:
  61. grow_audio()
  62. output = pcm2text()
  63. if '企业微信进行健康上报' or '打开' or '微信' or '健康上报' in output:
  64. engine.say('好的')
  65. engine.runAndWait()
  66. headlth_update_2()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/556628
推荐阅读
相关标签
  

闽ICP备14008679号