搭一套截图识别通知机器人:OCR、飞书Webhook与远程触发实战

前言

很多团队仍然通过截图或照片提交考勤、巡检和任务完成凭证。员工把图片发到群里后,还需要有人逐张查看时间、姓名和状态,再手动整理结果。数量一多,不仅重复劳动明显,也容易出现漏看或记录错误。

这类流程很适合先从"识别和通知"两个环节开始自动化。程序读取指定文件夹中的截图,调用PaddleOCR提取图片文字,再把识别结果通过飞书Webhook发送到指定群聊,负责人员只需要进行最后确认。

本文会从Windows环境开始,完成Python、PaddleOCR和网络请求库的安装,再创建飞书自定义机器人,并通过关键词验证测试Webhook是否能够正常接收消息。

基础流程跑通后,还会使用Flask为脚本增加一个/clockin触发接口。访问该接口时,服务器会执行OCR识别和飞书通知流程,页面同时返回脚本的运行结果,方便查看是否处理成功。

最后再通过 cpolar 将本地5000端口映射到公网,并配置固定二级子域名。这样不在同一局域网时,也能在获得授权的前提下触发凭证识别和消息推送。

1.准备工作

下面是在Windows系统(Win10/Win11)上从零开始 搭建一个OCR + 飞书 + Python自动打卡机器人 的完整、详细、新手友好的操作指南。

目标:

你把打卡截图(如钉钉、企业微信)放入一个文件夹 → Python自动识别图中文字 → 通过飞书机器人发送"打卡成功"消息到群聊。

你需要准备:

  • 一台 Windows 10/11 电脑
  • 一个飞书账号(免费)
  • 一部手机(用于拍照打卡截图)
  • 网络畅通

2.安装Python

打开浏览器,访问 https://www.python.org/downloads/

点击 "Download Python 3.11.x"(推荐 3.11,稳定且兼容性好)

下载完成后,双击安装包。

务必勾选:

  • Add Python to PATH(关键!)
  • Install launcher for all users

点击 "Install Now"

安装完成后,按 Win + R,输入cmd回车,运行:

shell 复制代码
python --version

如果显示Python版本,说明安装成功!

3.创建飞书群机器人

3.1 创建机器人

打开 飞书 App(或网页版 https://www.feishu.cn

创建一个新群聊,点击右上角 设置→ 「群机器人」 → 「添加机器人」

选择 「自定义机器人」

名称填:打卡

安全设置:选择 「自定义关键词」,输入关键词:打卡成功

点击「添加」,复制 Webhook 地址(一长串 URL,以 https://open.feishu.cn/open-apis/bot/v2/hook/ 开头)

重要:后面发的消息必须包含"打卡成功"这四个字,否则飞书会拒绝发送!

3.2 测试webhook时候可用

使用下面测试代码:

shell 复制代码
$webhook = "https://open.feishu.cn/open-apis/bot/v2/hook/你的完整hook地址"
$body = @{
    msg_type = "text"
    content = @{
        text = "打卡成功:手动测试消息"
    }
} | ConvertTo-Json

# 关键:设置编码为 UTF-8
Invoke-RestMethod -Uri $webhook -Method Post -Body $body -ContentType 'application/json; charset=utf-8'

飞书群接收成功:

4.创建项目文件夹

在桌面或任意位置新建一个文件夹,命名为:clock_in_bot

进入该文件夹

在这个目录下,在创建一个文件夹clock_in_images,用于后续识别图片:

上传一张图片,名为:test.py

5.安装Python依赖(OCR + 网络库)

进入你的项目文件夹:

shell 复制代码
cd C:\Users\admin\Desktop\clock_in_bot

安装所需库(使用清华源加速):

shell 复制代码
pip install paddlepaddle paddleocr requests pillow opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

安装成功后,测试OCR是否可用,如果输出OCR OK!,说明安装成功!:

shell 复制代码
python -c "from paddleocr import PaddleOCR; print('OCR OK!')"

6.编写Python脚本

在clock_in_bot文件夹中,新建一个文本文件

重命名为:test.py(注意后缀是 .py,不是 .txt)

右键 → "编辑"(用记事本打开),粘贴以下代码:

这段代码是我反复测试,最终成功的一版,这版会一步步验证,:

shell 复制代码
import os
import time
from paddleocr import PaddleOCR
import requests

# === 第 0 步:配置 ===
print("第 0 步:加载配置...")
FEISHU_WEBHOOK = "替换成你的飞书Webhook地址"
IMAGE_FOLDER = "./clock_in_images"
TEST_IMAGE = os.path.join(IMAGE_FOLDER, "test.png")  # 放一张叫 test.png 的图进去

print(f"  Webhook: {FEISHU_WEBHOOK}")
print(f"  图片路径: {TEST_IMAGE}")
print("-" * 50)

# === 第 1 步:确保文件夹存在 ===
print("第 1 步:创建图片文件夹...")
os.makedirs(IMAGE_FOLDER, exist_ok=True)
print("✅ 文件夹已准备好")
print("-" * 50)

# === 第 2 步:初始化 OCR ===
print("第 2 步:初始化 PaddleOCR(可能需要1-2分钟)...")
try:
    ocr = PaddleOCR(lang="ch", use_gpu=False, show_log=False)
    print("✅ OCR 初始化成功")
except Exception as e:
    print(f"❌ OCR 初始化失败: {e}")
    exit(1)
print("-" * 50)

# === 第 3 步:检查图片是否存在 ===
print("第 3 步:检查测试图片是否存在...")
if not os.path.isfile(TEST_IMAGE):
    print(f"❌ 图片不存在!请放一张截图并命名为: {TEST_IMAGE}")
    exit(1)
else:
    print("✅ 图片存在")
print("-" * 50)

# === 第 4 步:执行 OCR 识别 ===
print("第 4 步:开始 OCR 识别...")
try:
    result = ocr.ocr(TEST_IMAGE, cls=True)
    text = ""
    if result and result[0]:
        for line in result[0]:
            if line and len(line) > 1:
                word = line[1][0]
                if isinstance(word, str):
                    text += word + " "
    text = text.strip() or "[未识别到文字]"
except Exception as e:
    print(f"💥 OCR 异常详细信息: {e}")
    text = "[OCR 异常]"
print("-" * 50)

# === 第 5 步:构造消息(强制包含关键词)===
print("第 5 步:构造飞书消息...")
message = f"打卡成功\n【OCR结果】\n{text}"
print(f"📤 消息内容:\n{message}")
print("-" * 50)

# === 第 6 步:发送到飞书 ===
print("第 6 步:发送消息到飞书...")
try:
    resp = requests.post(
        FEISHU_WEBHOOK,
        json={"msg_type": "text", "content": {"text": message}},
        timeout=10,
        headers={"Content-Type": "application/json; charset=utf-8"}
    )
    result = resp.json()
    print(f"📡 飞书返回: {result}")

    if result.get("code") == 0:
        print("✅ 成功!请去飞书群查看消息")
    else:
        print(f"❌ 失败!原因: {result.get('msg', '未知错误')}")
        print("⚠️ 常见原因:关键词不匹配(必须包含"打卡成功")")
except Exception as e:
    print(f"💥 网络或请求异常: {e}")
print("-" * 50)

print("🔚 测试结束。按回车退出...")
input()

关键修改!

找到这一行:

shell 复制代码
FEISHU_WEBHOOK = "替换成你的飞书Webhook地址"

保留双引号!不要删除!

7. 运行程序

进入你的项目文件夹:

shell 复制代码
cd C:\Users\admin\Desktop\clock_in_bot

运行脚本:

shell 复制代码
python auto_clock_in.py

首次运行会自动下载OCR模型(约 100MB),请等待 1~2 分钟,直到出现监听提示。

运行成功后,飞牛群聊自动发送消息成功:

程序会立即识别打卡截图文字,并向你的飞书群发送消息!

推荐:python脚本使用vscode测试:

因为测试效果更加直观:

😘恭喜你!你已经拥有了一个全自动打卡通知机器人!

8.扩展

在Windows上用Flask/FastAPI写一个简单的Web服务,暴露一个/clockin接口。

调用这个接口就执行打卡逻辑(PaddleOCR + 打卡)。

  • 实际自动打卡路径:C:\Users\admin\Desktop\clock_in_bot\test.py
shell 复制代码
# 1.py
from flask import Flask
import subprocess
import os

app = Flask(__name__)

# 主页(可选,用于测试服务是否在线)
@app.route('/')
def home():
    return "✅ 打卡机器人在线!访问 /clockin 触发打卡。"

# 核心打卡接口
@app.route('/clockin')
def clock_in():
    try:
        # 替换为你的实际打卡脚本路径(建议用绝对路径)
        script_path = r"C:\Users\admin\Desktop\clock_in_bot\test.py"
        result = subprocess.run(
            ["python", script_path],
            cwd=os.path.dirname(script_path),  # 设置工作目录
            capture_output=True,
            text=True,
            timeout=60  # 防止卡死
        )
        output = result.stdout + "\n" + result.stderr
        return f"<pre>✅ 打卡执行完成:\n{output}</pre>"
    except Exception as e:
        return f"<pre>❌ 打卡失败: {str(e)}</pre>"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=False)

执行成功后,访问ip+5000,就可以查看打卡状态:

访问/clockin触发打卡。

将你的Flask打卡服务与cpolar结合,只需在本地运行 Flask 应用(如 http://127.0.0.1:5000 ),然后通过cpolar创建一条HTTP隧道,将其映射到公网地址(例如 https://xxxx.cpolar.cn);这样,无论你身处何地,只要访问该公网链接的**/clockin**路径,就能远程触发打卡脚本,实现自动化操作------整个过程无需公网IP、无需复杂配置,cpolar会安全地将外部请求转发到你的本地服务。

9.安装cpolar实现随时随地开发

9.1 什么是cpolar?

cpolar是一款安全高效的内网穿透工具,无需公网IP或复杂配置,只需一条命令,即可将本地服务器、Web服务或任意端口映射到公网,让你随时随地远程访问内网应用,特别适合开发调试、远程运维和应急部署等场景。

9.2 部署cpolar

cpolar可以将你本地电脑中的服务(如SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

❤️以下是安装cpolar步骤:

使用一键脚本安装命令:

shell 复制代码
sudo curl https://get.cpolar.sh | sh

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

shell 复制代码
sudo systemctl status cpolar

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

10.配置公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理------创建隧道:

  • 隧道名称:可自定义,本例使用了:daka,注意不要与已有的隧道名称重复
  • 协议:http
  • 本地地址:5000
  • 域名类型:随机域名
  • 地区:选择China Top

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用地址访问。

访问成功。

11.保留固定公网地址

使用cpolar为其配置二级子域名,该地址为固定地址,不会随机变化。

点击左侧的预留,选择保留二级子域名,地区选择china Top,然后设置一个二级子域名名称,我使用的是daka,大家可以自定义。填写备注信息,点击保留。

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理------隧道列表,找到所要配置的隧道,点击右侧的编辑

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名
  • 地区: China Top

点击更新

更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。

最后,我们使用固定的公网地址在任意设备的浏览器中访问,可以看到成功访问的页面,这样一个永久不会变化的二级子域名公网网址即设置好了。

总结

完成部署以后,这套程序可以把原本分散的截图检查、文字识别和群消息通知串成一条连续流程。图片放入指定目录后,脚本会读取文件、提取文字,并将结果发送到飞书群中。

PaddleOCR适合识别时间、姓名、状态和简单页面文字,但识别结果并不能天然等同于真实有效的考勤记录。图片清晰度、字体大小、页面遮挡和截图裁切都可能影响结果,因此正式使用时仍应保留人工复核环节。

Flask接口解决了脚本只能在本机命令行执行的问题,但示例中的GET接口只适合测试。正式环境中应增加身份验证、请求签名、执行频率限制和操作日志,避免任何人拿到地址后都能重复触发任务。

通过 cpolar 映射5000端口后,本地服务可以从外部网络访问。固定域名虽然方便收藏,但也更容易被长期扫描,因此公网地址不能随意传播,不使用时应及时关闭隧道。

飞书Webhook同样属于敏感凭据,不能直接写进公开文章、截图或共享代码仓库。建议通过环境变量保存Webhook地址,并定期检查机器人权限和群聊中的推送记录。

这套方案更适合作为经过单位授权的凭证识别、结果通知和流程辅助工具,而不应被用于伪造考勤、绕过审批或替代正式考勤系统。自动化负责减少重复操作,最终记录仍需要遵循所在组织的真实考勤和审计规则。

相关推荐
胡琦博客3 小时前
HarmonyOS 智能工具箱(二):OCR 文字识别工具
华为·ocr·harmonyos
gtstore4 小时前
飞书仓库管理系统技术选型:从手工台账到系统化管理的演进路径
飞书·仓库管理系统·飞书仓库管理·saas选型·飞书仓库管理系统选型
chase。4 小时前
【学习笔记】PointWorld:迈向通用机器人操控的3D世界模型
笔记·学习·机器人
TsingtaoAI5 小时前
脑控机器人项目交付|用意念指挥机器人,情绪交互与抓取功能全面实现
人工智能·ai·机器人·具身智能
AI_Auto6 小时前
工业与AI融合应用 | 四个实战用例!机械装备行业AI+数字孪生+机器人落地全景
大数据·人工智能·机器人·制造
蓝创工坊Blue Foundry7 小时前
PDF 批量提取指定内容到 Excel:按字段整理多个 PDF 的方法
pdf·ocr·excel·文心一言·paddlepaddle·paddle
数智工坊8 小时前
RehearseVLA深度解析:基于物理一致世界模型的VLA强化学习后训练框架
人工智能·深度学习·3d·机器人
雪岭飞花8 小时前
Zoox驶入火灾现场召回,特斯拉Robotaxi清洁机器人,享道上汽定制车明年发布 | Robotaxi周报
机器人
zyplayer-doc9 小时前
研发接口文档怎么长期维护:zyplayer-doc把API、Markdown和变更记录放进同一个知识库
大数据·数据库·人工智能·笔记·pdf·ocr