专栏首页相约机器人如何使用机器学习来检测手机上的聊天屏幕截图

如何使用机器学习来检测手机上的聊天屏幕截图

作者 | Sujan Dutta

来源 | Medium

编辑 | 代码医生团队

对某些即时通讯应用的朋友,最终采取这一聊天的截图,然后将其发送给他们。如果发送或接收了大量这些屏幕截图,那么最终手机的大部分内存都将被阻塞。在保留重要图像安全的同时查找和删除这些屏幕快照是一项非常耗时的任务。因此想用机器学习来完成这项工作

理念

从普通图像中检测聊天屏幕截图的任务可以表述为经典的二进制图像分类问题!可以使用卷积神经网络(CNN)来完成这项工作。CNN的输入层将是一幅图像,输出层将仅包含一个神经元,告诉输入图像是正常图像还是聊天屏幕截图。在接下来的部分中,将介绍构建模型的所有细节。

数据采集

在机器学习中,一切都始于数据。在此分类问题中,有两个类:'聊天'和'不聊天'。第一个表示聊天屏幕截图,另一个表示普通图像。因此从不同的消息传递应用程序(如WhatsApp,Messenger,Instagram等)中收集了与朋友聊天的屏幕截图。从手机和互联网上收集了一些人,地点,风景的随机图像。总共拍摄了660张图像。请注意对于许多更棘手的问题,这不是足够的数据量。

训练测试拆分

将80%的数据用于训练,其余的用于测试。为了能够在Keras中使用flow_from_directory函数,将数据整理成如下:

数据文件夹树

建立模型

每个CNN都由两个主要部分组成:卷积基础和完全连接网络。在卷积基础中,使用了两个卷积块,每个包含32个过滤器。内核大小为3 * 3。第一卷积层的输入尺寸为64 * 64 * 3(大小为64 px * 64 px的 RGB图像)。每个卷积块后跟一个大小为2 * 2的max_pooling层。Relu激活功能用于卷积层。卷积块的输出被展平为一个向量,以将其传递到完全连接的网络。隐藏层由128个组成神经元。该层的激活功能再次是Relu。输出层(即最后一层)仅包含一个神经元,它将告诉我们结果。由于这是一个二进制分类问题,因此我在这一层中使用了S形函数,该函数输出介于0到1之间的数字(p),表示输入图像属于“聊天”类别的概率(如果p≤0.5,则聊天否则为“否”聊天”)。

classifier = Sequential()
classifier.add(Convolution2D(32, 3, 3, input_shape = (64, 64, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Convolution2D(32, 3, 3, activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Flatten())
classifier.add(Dense(output_dim = 128, activation = 'relu'))
classifier.add(Dense(output_dim = 1, activation = 'sigmoid'))

模型的架构

馈送数据

由于数据是以上述特定方式组织的,因此现在可以使用ImageDataGenerator类和Keras的flow_from_directory方法来扩充数据并将其输入模型。首先创建一个ImageDataGenerator对象。在这个对象的帮助下,使用了缩放,剪切,翻转转换来增强数据。为了规范化像素值,应将图像重新缩放为1 / 255.0倍。现在目录路径,class_mode和target_size作为flow_from_directory方法的参数传递,该方法有助于将数据馈送到模型。必须执行两次此过程(一次用于训练数据,另一次用于测试数据)。这里要记住的重要一点是,仅应扩充训练数据,而不应扩充测试数据。

train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.2,
                                   horizontal_flip = True)
 
test_datagen = ImageDataGenerator(rescale=1./255)
 
training_set = train_datagen.flow_from_directory('training_set', target_size=(64, 64),
                                                 batch_size=32, class_mode='binary')
 
test_set = test_datagen.flow_from_directory('test_set', target_size=(64, 64),
                                            batch_size=32, class_mode='binary')

训练

现在是模型学习的部分。这里需要一个优化器,因为学习无非就是通过更新模型的权重和偏差来优化成本函数。在这种情况下,选择了Adam优化器。成本函数是binary_crossentropy(因为这是二进制分类)。Keras提供了一个名为fit_generator的函数,可用于运行训练。在这里还可以设置时期数,steps_per_epoch和validation_steps。由于数据是比较小的,因此用steps_per_epoch =训练示例数和validation_steps =试验实施例号。

classifier.fit_generator(
        training_set,
        steps_per_epoch=528, #total number of images in training set
        epochs=5,
        validation_data=test_set,  
        validation_steps=132 #total number of images in test set
)

结果

仅5个星期后,该模型即可达到99%的训练准确度和98%的测试准确度。保存模型后,便可以根据需要多次使用它。为了能够使用此模型预测新图像,必须将图像重塑为64 * 64 * 3并标准化像素。该脚本完成了这项工作。

https://github.com/Suji04/Chat_ScreenShot_Classifier/blob/master/load%20model%20and%20predict.py

来自作者收藏的图片

在此处找到完整的代码。

https://github.com/Suji04/Chat_ScreenShot_Classifier

要使用此模型对手机上某个文件夹的所有图像进行分类, 只需要遍历该文件夹并将一次图像传递给该模型即可。


import glob
for img_file in glob.iglob(“dir_name/*”):
  new_image = load_image(img_file)
  pred = classifier.predict(new_image)
  if pred<.5 : print(“chat”)
  else : print(“not chat”)

还在好奇吗?观看最近制作的视频

文章分享自微信公众号:
相约机器人

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 浅谈屏幕拍摄泄密跟踪的检测技术

    前言关注屏幕拍照安全检测技术介绍数字盲水印屏幕矢量水印摄像头检测屏摄检测缓解办法参考资料

    安全乐观主义
  • 社交垂直探索 | QQ截图全新设计

    腾讯ISUX isux.tencent.com 社交用户体验设计 截图,是将显示设备上所展示的内容截取下来,所生成可视图像,截图的目的是为了保存特定状态下...

    腾讯ISUX
  • [1054]Airtest的探索使用

    Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就...

    周小董
  • 使用Python实现微信拍一拍功能的思路代码

    于是我突发奇想,决定用pyhton自动实现微信“拍一拍”,没想到还真给搞成功了,整个过程才用了30行代码,下面给大家介绍一下具体实现步骤:

    砸漏
  • AI进了直播间,这画风666

    科技时代,我们更加怀念温暖邂逅的时光 这一次IBMWatson为大家带来了Spotify 全球榜 Top 2 的单曲,Watson 学习了 26000 首流行歌...

    企鹅号小编
  • Android 11 首个开发者预览版新功能抢先看

    链接:https://new.qq.com/omn/20200222/20200222A0N2XK00

    陈宇明
  • 利用人工智能实现小程序自动答题

    之前有看到有人用python实现自动运行微信小程序《跳一跳》,后来看到别人用hash码实现《加减大师》的自动答题领取娃娃,最近一直在研究深度学习,为啥不用机器学...

    Python中文社区
  • Android 11功能:到目前为止我们所知道的最大变化!

    链接:https://juejin.im/post/5ea1c46851882573a25f3ec3

    陈宇明
  • 【更新结束】屏幕录像专家 V2018 Build0628 完全去水印

    《屏幕录像专家 共享版》是一款专业的屏幕录像制作工具。使用它可以轻松地将屏幕上的软件操作过程、网络教学课件、网络电视、网络电影、聊天视频、游戏等录制成FLASH...

    凯哥Java
  • 关于iPad的100个问题

    大屏iPad可以作为MacBook的扩展屏幕,打开MacOS随航,连接iPad,MacBook就有了两个屏幕~

    zhaoolee
  • 介绍 GitHub 上受欢迎的 10 个开源项目

    今天介绍 GitHub 上 大家最受欢迎的 10 个开源项目,在这些项目中,你有在用或用过哪些呢?

    Rookie
  • 厉害了,利用深度学习开发老板探测器(附源码)

    有的浏览器设置了boss按键,手快的人还可以切换屏幕,不过总会显得不自然,而且经常搞的手忙脚乱的。

    华章科技
  • PaddleX还能给游戏“开挂”?『跳一跳』安排上

    本次用到的模型是PaddleX提供的目标检测模型YOLOv3。通过此模型检测跳一跳游戏界面中的小人和跳台,然后估算出小人成功落入跳台所需要的时间,把模型部署到手...

    用户1386409
  • 人脸识别技术一夜躺枪后 百度、旷视、商汤、云从等是这样“技术”回应的

    昨晚的央视315晚会上,人脸识别技术被曝存在安全隐患。不少观众看到主持人在现场技术人员支持下,仅凭两部手机、一张随机正面照片及一个换脸App,分别就一张”眨眨眼...

    AI科技评论
  • 腾讯音视频实验室:使用AI黑科技实现超低码率的高清实时视频聊天

    自从苹果公司在iPhone 4引入了视网膜屏幕的概念以来,手机的分辨率自此开始突飞猛进。当前,1920x1080甚至更高的分辨率已经成为了标配。不过当我们谈到实...

    JackJiang
  • 业界丨外媒专访吴恩达:聊天机器人在中国的普及将比美国快

    在刚刚过去的2016年,科技圈内谈论最多的就是自动驾驶和机器人,而驱动两者快速前行的核心动力,就是迅猛发展的人工智能(AI)。那么人工智能到底是什么?它可以为人...

    AI科技评论
  • 直播答题?Python助你自动搜题之新手篇!

    刚开始在微信公众号写文章,操作生疏,导致上一篇格式、链接都很乱,在此重新编辑,并添加实测视频和反馈收到的改进。

    TTTEED
  • 从 Windows 切换到 Mac,不能错过这9条Tips

    作者 | Cathal Mac Donnacha 、译者 | 弯月 我原本是一名 Windows 的粉丝,从 10 岁起就开始在家学习编程,而后又从事了 8 年...

    程序猿DD

扫码关注云+社区

领取腾讯云代金券