当前位置: 首页 > news >正文

python+智谱AI-实现钉钉消息自动回复

python+智谱AI-实现钉钉消息自动回复

  • 实现了电脑窗口切换,截图识别未读消息,与语言模型交互后,将答案带入到钉钉窗口中。
    • 偷个懒,直接贴代码了,后续不断完善注释,如果遇到读不懂的地方,欢迎交流。

实现了电脑窗口切换,截图识别未读消息,与语言模型交互后,将答案带入到钉钉窗口中。

偷个懒,直接贴代码了,后续不断完善注释,如果遇到读不懂的地方,欢迎交流。

# -*- coding: UTF-8 -*-
import time
# 必备的注释文件
import pygetwindow
from PIL import ImageGrab,Image
import time
import cv2
import numpy as np
import pyautogui
import easyocr
import  os
import pytesseract
import zhipuai
from zhipuai import ZhipuAI
import pyperclip
# from win10toast import ToastNotifier
import tkinter as tk
# def toastmsg(msg):
#
#     toaster = ToastNotifier()
#     toaster.show_toast("钉钉回复工具", msg, duration=10)
# 打开对话框
def openchat(xm,ym):# # 显示结果# cv2.imshow('Detected Red Points', image)# cv2.waitKey(0)# cv2.destroyAllWindows()# 要点击屏幕上的那个点# 移动鼠标到图标位置pyautogui.moveTo(xm, ym, duration=1)time.sleep(2)# 点击图标pyautogui.click(xm, ym)
# 识别对话框中的文字
def watchtext(imgurl):print('识别图片')# 读取图片image = cv2.imread(imgurl)# 图片预处理,例如灰度化、二值化等gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]# 使用pytesseract识别文字pytesseract.pytesseract.tesseract_cmd = r'D:\Program Files\Tesseract-OCR\tesseract.exe'text = pytesseract.image_to_string(thresh, lang='chi_sim')print(text)# 另外一个工具# 设为中英文混合识别:ch_sim enreader = easyocr.Reader(['ch_sim', 'en'], gpu=False)# 识别图片## print(str(os.path) + '/' + imgurl)# result = reader.readtext(imgurl, detail=0)# for i in result:#     # 输出识别出的信息#     # 输出识别出的信息#     # print('输出识别出的信息')#     print(i, end='')#     做一下图片的裁剪再识别:ch_sim enimg = Image.open(imgurl)# 获取图片大小img_size = img.size# h = img_size[1] #图片高度# w = img_size[0] #图片宽度# 设置截取部分相对位置x = 0.20 * img_size[0]+200y = 0.1 * img_size[1]# y = 350w = 1 * img_size[0]-400h = 1* img_size[1]-720# 截取图片cropped = img.crop((x, y, x + w, y + h))  # (x1,y1,x2,y2)# 保存截图图片,命名为test.pngcropped.save('test01.png')# 设为中英文混合识别:ch_sim enreader = easyocr.Reader(['ch_sim', 'en'], gpu=False, verbose=False)# 路径改为用户需要识别的图片的路径result = reader.readtext('test01.png', detail=0)for i in result:# 输出识别出的信息# 输出识别出的信息# print('输出识别出的信息')print(i, end='')return result
# 截图保存
def getmscreen():windowsjiantou  = pygetwindow.getWindowsWithTitle('XXXX')windowsjiantou[0].show()w = windowsjiantou[0]w.activate()# 获取桌面窗口的坐标和尺寸left, top, width, height = w.left, w.top, w.width, w.heightw.activate()w.show()# 将窗口最大化w.maximize()# 下面的单位是5秒time.sleep(0.5)print('运行到了这里')# 使用ImageGrab.grab()方法截取桌面screenshot = ImageGrab.grab(bbox=(left, top, left + width, top + height))# 获取当前时间的时间戳timestamp = time.time()print("当前时间戳:", timestamp)imgurl =  str(timestamp)+'desktop_screenshot.png'# 保存截图# screenshot.save(imgurl)img = pyautogui.screenshot()img.save(str(timestamp)+'desktop_screenshot.png')return imgurl
def getchat(questiontext):print(questiontext)# 接入质谱AI的APIclient = ZhipuAI(api_key=" . ")  # 请填写您自己的APIKeyresponse = client.chat.completions.create(model="glm-4",  # 填写需要调用的模型名称  OA表单中选不到项目的添加方法messages=[{"role": "user", "content": questiontext},],tools=[{"type": "retrieval","retrieval": {"knowledge_id": " ","prompt_template": "从文档\n\"\"\"\n{{knowledge}}\n\"\"\"\n中找问题\n\"\"\"\n{{question}}\n\"\"\"\n的答案,找到答案就仅使用文档语句回答问题,找不到答案就用自身知识回答并且告诉用户该信息不是来自文档。\n不要复述问题,直接开始回答。"}}],stream=True,)resstr = ""for chunk in response:# print(chunk.choices[0].delta)resstr = resstr + str(chunk.choices[0].delta.content)# print(chunk.choices[0].delta.content)print(resstr)# 做一个data,把数据返回去return resstr
def pasttext(text):windowsjiantou  = pygetwindow.getWindowsWithTitle('XXXX')windowsjiantou[0].show()w = windowsjiantou[0]w.activate()# 移动鼠标到目标位置(这里以屏幕坐标为例)pyautogui.moveTo(600, 900)# 模拟鼠标点击pyautogui.click()# 模拟键盘输入# pyautogui.typewrite('你好www', interval=0.2)# # 模拟按下Win键# pyautogui.press("win")# # 输入中文输入法的名称,例如“微软拼音输入法”# pyautogui.typewrite("微软拼音输入法")# # 模拟按下回车键# pyautogui.press("enter")# # 等待中文输入法启动# pyautogui.sleep(1)# # 输入中文字符# pyautogui.typewrite("你好,世界!")pyperclip.copy(text)time.sleep(0.5)pyautogui.hotkey('ctrl', 'v')# pyperclip.paste()
def capture():# toastmsg('程序运行中')# 获取桌面窗口# desktop_window = pygetwindow.getDesktopWindow()desktop_window = pygetwindow.getAllWindows()desktop_window_title = pygetwindow.getAllTitles()for window in desktop_window_title:print(window)windowsjiantou  = pygetwindow.getWindowsWithTitle('XXXX')windowsjiantou[0].show()w = windowsjiantou[0]w.activate()# 获取桌面窗口的坐标和尺寸left, top, width, height = w.left, w.top, w.width, w.heightw.activate()w.show()# 将窗口最大化w.maximize()# 下面的单位是5秒time.sleep(0.5)print('运行到了这里')# 使用ImageGrab.grab()方法截取桌面screenshot = ImageGrab.grab(bbox=(left, top, left + width, top + height))# 获取当前时间的时间戳timestamp = time.time()print("当前时间戳:", timestamp)# 保存截图screenshot.save(str(timestamp)+'desktop_screenshot.png')# 读取图片上的红点# 识别图片imgs =str(timestamp)+'desktop_screenshot.png'# 读取图像image = cv2.imread(imgs)# 读取图像# 将图像从BGR转换为HSV颜色空间hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)# 定义红色的HSV范围lower_red1 = np.array([0, 120, 70])upper_red1 = np.array([10, 255, 255])lower_red2 = np.array([170, 120, 70])upper_red2 = np.array([180, 255, 255])# 创建掩码mask1 = cv2.inRange(hsv, lower_red1, upper_red1)mask2 = cv2.inRange(hsv, lower_red2, upper_red2)mask = cv2.bitwise_or(mask1, mask2)# 形态学操作以去除噪声kernel = np.ones((5, 5), np.uint8)mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)mask = cv2.dilate(mask, kernel, iterations=1)# 寻找轮廓  这里满足要求的轮廓已经放到这里数组里了contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)myusecolours = []# 绘制轮廓for contour in contours:# 计算轮廓的面积# 先留下面积大于100的轮廓area = cv2.contourArea(contour)if area > 50:  # 可以根据实际情况调整这个阈值print('面积大于50')# 计算轮廓的周长perimeter = cv2.arcLength(contour, True)# 计算轮廓的近似形状# approxPolyDP 函数用于计算轮廓的近似形状# approxPolyDPapprox = cv2.approxPolyDP(contour, 0.04 * perimeter, True)# 如果轮廓是圆形,那么近似形状的顶点数量应该接近于0# 但是这里我直接用半径来判断if len(approx) < 10:(x, y), radius = cv2.minEnclosingCircle(contour)center = (int(x), int(y))radius = int(radius)if radius > 5:  # 可以根据实际情况调整这个阈值  圆角值改小了一点# 使用cv2.circle() 在原图上绘制筛选后的圆形轮廓。print('绘制了一个图形print')cv2.circle(image, center, radius, (0, 255, 0), 2)# 这里是通过考验的contour# 获取contour 的坐标print(contour)myusecolours.append(contour)# 显示结果# cv2.imshow('Contours', image)# cv2.waitKey(0)# cv2.destroyAllWindows()print('----')myusecolours02 =myusecoloursmyusecolours02.reverse()print(len(myusecolours02))print(len(myusecolours02))if len(myusecolours02) == 0:returncontoursmsg = myusecolours02[-1]# if len(myusecolours02) < 3:#     contoursmsg = myusecolours02[2]### # 获取第一条未读消息# if len(myusecolours02) < 2:#     contoursmsg = myusecolours02[1]## if len(myusecolours02) < 1:#     contoursmsg = myusecolours02[0]# 获取坐标x, y, w, h = cv2.boundingRect(contoursmsg)# 打印边界框坐标print(f"Bounding box coordinates: x={x}, y={y}, w={w}, h={h}")# 得到中心点的位置(xm, ym), radius = cv2.minEnclosingCircle(contoursmsg)print(f"Bounding box coordinates: ----------------------------  x={xm}, y={ym}")# 打开对话框openchat(xm,ym)# 截图imgurl = getmscreen()# 识别对话框中的文字textcontent = watchtext(imgurl)# print(textcontent)textcontent02 = ''for item in textcontent:print(item+'\n')textcontent02= textcontent02+item+''# 获取最后一条消息# textcontent.reverse()# lasttext = textcontent[0]# print('最新的一条消息')# print(lasttext)# 调用API开始聊天--最后一条消息textcontent.reverse()textcontent01 = textcontent[0]answer = getchat(textcontent01)# 调用API开始聊天--所有识别的内容# answer = getchat(textcontent02)# 将内容粘贴到钉钉窗口中pasttext(answer)# toastmsg('程序运完毕')# print(desktop_window)# print(desktop_window_title)# # 获取桌面窗口的坐标和尺寸# left, top, width, height = desktop_window.left, desktop_window.top, desktop_window.width, desktop_window.height## # 使用ImageGrab.grab()方法截取桌面# screenshot = ImageGrab.grab(bbox=(left, top, left + width, top + height))## # 保存截图# screenshot.save('desktop_screenshot.png')
def say_hello():capture()
if __name__ == '__main__':# 先来屏幕截图capture()# root = tk.Tk()# root.geometry("400x500")# # 禁止用户调整窗口大小# root.resizable(False, False)## label = tk.Label(root, text=" ", font=("Microsoft YaHei", 16))# label.pack(pady=20)### label = tk.Label(root, text="点击 接管电脑 后,程序会识别未读消息并到知识库中进行检索填充回复。对信息修改勾,可以进行发送,或者设置自动发送",wraplength=300, font=("Microsoft YaHei", 16))# label.pack(pady=20)#### button = tk.Button(root, text="接管电脑", command=say_hello)# button.pack(pady=20)## root.mainloop()

相关文章:

python+智谱AI-实现钉钉消息自动回复

python智谱AI-实现钉钉消息自动回复 实现了电脑窗口切换&#xff0c;截图识别未读消息&#xff0c;与语言模型交互后&#xff0c;将答案带入到钉钉窗口中。偷个懒&#xff0c;直接贴代码了&#xff0c;后续不断完善注释&#xff0c;如果遇到读不懂的地方&#xff0c;欢迎交流。…...

Kafka-Eagle的配置——kafka可视化界面

通过百度网盘分享的文件&#xff1a;kafka-eagle-bin-2.0.8.tar.gz 链接&#xff1a;https://pan.baidu.com/s/1H3YONkL97uXbLTPMZHrfdg?pwdsltu 提取码&#xff1a;sltu 一、界面展示 二、软件配置 1、关闭kafka集群 kf.sh stop 2、将该软件上传到/opt/modules下 cd /opt…...

【命令操作】Linux上带宽流量监控nethogs命令详解 _ 统信 _ 麒麟 _ 方德

原文链接&#xff1a;【命令操作】Linux上带宽流量监控nethogs命令详解 | 统信 | 麒麟 | 方德 Hello&#xff0c;大家好啊&#xff01;今天带来一篇关于Linux上nethogs命令详解的文章。nethogs是一款非常实用的网络流量监控工具&#xff0c;帮助用户实时查看系统中每个进程的网…...

【入门篇】数字统计——多语言版

题目跳转&#xff1a;数字统计 题目解析&#xff1a; 这道题目要求统计在给定范围 [L, R] 内所有整数中数字 2 出现的次数。例如&#xff0c;在范围 [2, 22] 中&#xff0c;数字 2 分别在数 2、12、20、21、22 中出现的次数&#xff0c;最终出现了6次。 题目的输入为两个正…...

探索那些现代C++语法糖

本文来聊聊现代C的一些语法糖。 1.Auto auto x 10; // 推导为 int auto y 3.14; // 推导为 double2.范围-based for 循环 std::vector<int> v {1, 2, 3, 4, 5}; for (auto val : v) {std::cout << val << " "; }3.nullptr int* ptr nullpt…...

【LeetCode】【算法】33. 搜索旋转排序数组

LeetCode 33. 搜索旋转排序数组 题目描述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k…...

Python小游戏25——黄金矿工

首先&#xff0c;你需要安装Pygame库。 如果你还没有安装&#xff0c;可以使用以下命令进行安装&#xff1a; 【bash】 pip install pygame 【python】代码展示 import pygame import random # 初始化Pygame pygame.init() # 设置屏幕尺寸 screen_width 800 screen_height 60…...

WPF中Prism框架中 IContainerExtension 和 IRegionManager的作用

在Prism框架中&#xff0c;IContainerExtension和IRegionManager扮演着重要的角色&#xff0c;具体作用如下&#xff1a; IContainerExtension IContainerExtension接口是Prism 7中引入的&#xff0c;用于抽象依赖注入容器的操作。它实现了IContainerProvider和IContainerReg…...

C++实现用户分组--学习

第一步实现&#xff1a;ETL的设计分三部分&#xff1a;数据抽取(Data Extraction)、数据的清洗转换(Data Transformation)、数据的加载(Data Loading). 构建一个数据容器类&#xff0c;其中包含转换后的MNIST手写数据。还实现了一个数据处理程序&#xff0c;该数据处理程序将提…...

鸿蒙华为商城APP案例

模拟器运行效果如下&#xff1a; 鸿蒙版APP-华为商城-演示视频...

回首遥望-C++内存对齐的思考

这一章节主要巩固一下学习C/C时内存对齐相关的内容&#xff01; 文章目录 什么是内存对齐&#xff1f;为什么要有内存对齐&#xff1f;如何进行内存对齐&#xff1f;致谢&#xff1a; 什么是内存对齐&#xff1f; 这里不提及一堆啰嗦概念&#xff0c;就结合实际出发&#xff0…...

力扣 LeetCode 704. 二分查找(Day1:数组)

解题思路&#xff1a; 二分查找主要分为[ left , right ]左闭右闭和[ left , right )左闭右开两种 此处采取[ left , right ]左闭右闭写法 注意&#xff1a; 1. right的初始化取值 2. while中取等 3. right mid -1 ; class Solution {public int search(int[] nums, i…...

【Mode Management】AUTOSAR架构下唤醒源检测函数EcuM_CheckWakeup详解

目录 前言 正文 1.AUTOSAR标准描述 1.1 EcuM_CheckWakeup用来干什么 1.2 EcuM_CheckWakeup在哪里被调用 1.3 EcuM_CheckWakeup的使用场景 1.3.1 GPT中断检测唤醒源 1.3.2 EcuM轮询GPT检测唤醒源 1.3.3 ICU中断检测唤醒源 1.3.4 其他 2.AUTOSR工具相关配置 3.唤醒源…...

Zabbix基础信息概述

1.Zabbix概述 Zabbix 是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix 使用灵活的通知机制&#xff0c;允许用户为几乎任何事件配置基于邮件的告警&#xff0c;这样可以快速反馈服务器的问题。基于已存储的数据&#xff0c;Zabbix 提供了出色的报告和数据可…...

SpringBoot(十二)SpringBoot配置redis

接下来我要实现的webscoket即时聊天中需要使用到redis,我先在项目中配置一下redis。 我这里再windows中做测试,关于redis的安装请移步《Redis(三)Windows系统安装redis》 一:在pom.xml中添加依赖 <!-- springboot redis start --><dependency><grou…...

Pycharm安装

Pycharm安装 返回主目录Pycharm安装1. Pycharm下载PyCharm官网下载地址下载安装包 2. Pycharm安装第一步&#xff1a;双击安装包第二步&#xff1a;进入安装程序第三步&#xff1a;选择安装路径第四步&#xff1a;选择安装选项第五步&#xff1a;安装第六步&#xff1a;完成安装…...

OpenAI大改下代大模型方向,scaling law撞墙?AI社区炸锅了

有研究预计&#xff0c;如果 LLM 保持现在的发展势头&#xff0c;预计在 2028 年左右&#xff0c;已有的数据储量将被全部利用完。届时&#xff0c;基于大数据的大模型的发展将可能放缓甚至陷入停滞。 来自论文《Will we run out of data? Limits of LLM scaling based on hum…...

技术整合与生态构建:Lyft与Mobileye引领自动驾驶新纪元

在科技日新月异的今天&#xff0c;自动驾驶技术正逐渐从科幻电影走进现实生活&#xff0c;成为出行服务领域的一股不可忽视的力量。近日&#xff0c;北美网约车巨头Lyft与自动驾驶技术领先者Mobileye宣布联手合作&#xff0c;共同推动自动驾驶汽车出行服务的广泛商业化进程。此…...

利用huffman树实现对文件A先编码后解码

利用huffman树实现对文件A先编码后解码&#xff0c;范围为ASCII码0-255的值&#xff0c;如何解决特殊符号问题是一个难点&#xff0c;注意应使用unsigned char存储数据&#xff0c;否则ASCII码128-255的值可能会出问题&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #includ…...

第三十九章 基于VueCli自定义创建项目

目录 1. 选择创建模式 2. 选择需要的功能 3. 选择历史模式还是哈希模式 ​4.CSS预处理器 5. 选择ESLint规则 6. 开始创建项目 ​7. 自定义项目最终结构 1. 选择创建模式 输入创建的项目名&#xff0c;创建项目&#xff1a; 这里选择自定义模式&#xff1a; 2. 选择需要…...

大数据领域数据预处理:优化数据分析结果的关键环节

大数据领域数据预处理:优化数据分析结果的关键环节 关键词:大数据、数据预处理、数据分析、优化、关键环节 摘要:本文深入探讨了大数据领域中数据预处理这一优化数据分析结果的关键环节。详细介绍了数据预处理的背景知识,包括目的、范围、预期读者等。通过生动形象的比喻解…...

Qwen3.5-2B保姆级教程:20亿参数模型端侧部署与图文对话实操

Qwen3.5-2B保姆级教程&#xff1a;20亿参数模型端侧部署与图文对话实操 1. 模型简介 Qwen3.5-2B是阿里云推出的轻量化多模态基础模型&#xff0c;属于Qwen3.5系列的小参数版本(20亿参数)。这个模型专为低功耗、低门槛部署场景设计&#xff0c;特别适合在端侧和边缘设备上运行…...

2025平航杯电子取证实战:从木马溯源到服务器渗透的完整链条分析

1. 木马溯源&#xff1a;从可疑流量到攻击者定位 2025年4月&#xff0c;杭州滨江警方接到一起特殊报案。市民刘晓倩&#xff08;化名倩倩&#xff09;发现自己的手机出现异常发热、电量消耗过快等现象&#xff0c;怀疑设备被人监控。这个看似普通的个人隐私案件&#xff0c;最终…...

Graphormer入门指南:无需编程基础,通过Web界面完成专业级分子建模

Graphormer入门指南&#xff1a;无需编程基础&#xff0c;通过Web界面完成专业级分子建模 1. 什么是Graphormer&#xff1f; Graphormer是微软研究院开发的一款基于纯Transformer架构的图神经网络模型&#xff0c;专门用于分子属性预测。它能够直接处理分子图结构&#xff08…...

基于CIEDE2000标准的AI图像分层技术:从像素聚类到设计效率革命

基于CIEDE2000标准的AI图像分层技术&#xff1a;从像素聚类到设计效率革命 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 在数字设计领域&#xff0c;将…...

别再手动记数据了!用MATLAB脚本自动读取串口,5分钟搞定数据采集

别再手动记数据了&#xff01;用MATLAB脚本自动读取串口&#xff0c;5分钟搞定数据采集 还在用串口助手手动记录数据&#xff1f;每次实验都要盯着屏幕抄写数值&#xff0c;不仅效率低下&#xff0c;还容易出错。想象一下&#xff1a;当你正在进行长达数小时的温度监测实验&…...

中文医学知识图谱构建指南:从技术痛点到价值落地

中文医学知识图谱构建指南&#xff1a;从技术痛点到价值落地 【免费下载链接】CMeKG_tools 项目地址: https://gitcode.com/gh_mirrors/cm/CMeKG_tools 破解医学文本处理的三重困境 当前医学NLP领域面临着专业术语识别难、实体边界模糊、关系抽取准确率低的三重挑战。…...

广州邮科如何为你的系统选择合适的在线式充电机?

设备运行最怕断电。在线式充电机&#xff0c;就是那个能让设备“永不断电”的充电神器。今天咱们用大白话&#xff0c;把它讲清楚。它到底是什么&#xff1f;简单说&#xff0c;就是能一边给设备供电&#xff0c;一边给电池充电的智能设备。设备不用停机&#xff0c;电池也能充…...

Wan2.2-I2V-A14B企业应用:合规可控的AI视频生成私有云部署方案

Wan2.2-I2V-A14B企业应用&#xff1a;合规可控的AI视频生成私有云部署方案 1. 企业级视频生成解决方案概述 在当今内容创作需求爆炸式增长的环境下&#xff0c;企业面临着视频制作成本高、周期长的挑战。Wan2.2-I2V-A14B私有部署镜像提供了一套完整的解决方案&#xff0c;让企…...

港科夜闻 | 香港科大“长者护脑社区计划“为6,000名长者提供阿尔兹海默症早筛

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科技大学3月23日宣布推出为期五年的 “长者护脑社区计划”。这项开创性计划以社区为本&#xff0c;旨在为香港基层长者提供阿尔兹海默症及轻度认知障碍的早期检测。香港科大将联同东华学院及十多间社福机构&#xff0c;…...