最近疫情有所反复,很多高校开始使用钉钉进行线上教学
有的时候老师会在钉钉群里进行签到,这可关乎平时成绩
但是这耽误考研复习【开摆划水】啊
于是,几个中午的时间,开发出来这个东西【主要是使用了OCR技术】
OCR技术就是对图像里面的文字进行识别的项目地址:https://github.com/CEllmemichael/orc_project
如果能帮到大家,希望大家多多点星,球球了
下面介绍一下我的思路
·········
整体的思路呢是对钉钉群的聊天框进行定时的截屏,然后对截屏的图片进行简单的处理之后使用ORC技术识别出来文字。通过识别出来的文字来看看现在聊天框里面有没有钉钉签到的消息,如果有通过发送消息的方式来让我知道
-
版本1
整个任务分为两部分:
(1)对钉钉群的消息进行识别
(2)根据识别结果来给我发出提醒首先介绍任务1:对钉钉群的消息进行识别
我先将电脑打开钉钉,然后将他全屏,测算出来整个聊天框的四个角的位置坐标,然后使用opencv进行每一秒截取这个地方的屏幕为图片的操作一次。对这个图片进行简单的灰度处理(因为灰度处理后的图像更好识别一点),调用文字识别(OCR)的云服务器API对这个图像进行识别。
while 1:
time.sleep(1)
img = pyautogui.screenshot(region=[370,300, 800, 570]) # 分别代表:左上角坐标,宽高
# 对获取的图片转换成二维矩阵形式,后再将RGB转成BGR
# 因为imshow,默认通道顺序是BGR,而pyautogui默认是RGB所以要转换一下,不然会有点问题
img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#cv2.imshow("截屏", gray)
gray2 = cv2.cvtColor(cv2.imread('dashen_compressed.png'), cv2.COLOR_BGR2GRAY)
这个过程中调用的是腾讯云的api这个各个服务器厂商都有免费的,这个过程主要是需要创建一个云服务器的账户,申请一下文字识别的的免费额度,然后下载平台提过的api的包就可以了。
最后通过对返回的文字中的关键字进行遍历便得到了结果。
然后介绍任务2:根据识别结果来给我发出提醒
我使用的是开启邮箱的STMP服务的方法,有使用过手机自带的电子邮箱的同学知道,在使用这个软件的时候需要把把你邮箱的STMP密钥拷贝出来,其实手机自带的这个软件也是使用的这个STMP服务来接受你的邮箱信息的。STMP就像是你邮箱的除了你的账户密码以外的第二把备用钥匙,使用这个钥匙可以不登陆你的邮箱就能接管你的邮箱。除非你主动设置过,这个东西才会开启,一般来讲是不会开的,大家也可以放心。
我使用这个方法接管了我的邮箱然后使用我的邮箱给我发送提示消息这个问题便解决了。
- 版本2
这个版本一开始使用的挺好的,不过,遇到了以下几个问题
- 当识别到关键词之后,报警次数太多
- 腾讯云每天只提供300次的识别,识别次数过多,免费额度不足
- 每秒访问一次云服务器api经常被认作DOS攻击
于是升级了版本2
上述是通过变换检测方法和设计待机功能解决的
变换检测方法是:
通过将截屏的图像和上一次的做比对,进行矩阵减法然后计算矩阵均值
通过对得到的均值取阈值,对大于阈值的情况才进行识别,这样只有在聊天框发生变化的时候才会进行检测。
这样的好处是降低了检测的次数,而且不会多次报警。这样还不会形成周期型的调用API 不会被认作DOS攻击。
设计待机
因为老师一般不会在一节课内设计两次签到,
所以在签到完成之后进行对程序进行半个小时的待机处理可以节省API调用次数
- 版本3
我将这个程序分享给朋友使用的时候发现,他们更希望我能满足以下的需求
- 使用QQ发送消息
- 自动签到
这里使用的的是pyautogui工具使用代码模拟鼠标的点击来完成上述的任务。
ALL IN ALL,还是希望同学们能够好好线上听课,我已经恢复线下上课了,希望疫情能够早日结束!!!!!