今天小u在微博上看到两个可以用python做的非常好玩的事情,大家都可以试试看~
一、面部识别
得益于大量前人的工作,如今利用python做一些简单的计算机视觉工作已经变得非常非常简单了。像人脸识别、面部特征提取之类的工作,就可以直接拿来用,极少需要自己实现繁琐的算法。
就是一个这样的c++库,而同时它也提供了python接口。
想必大家都有过在办公室遭遇boss探视的经历,而此时此刻你却在毫无自知地逛着淘宝/知乎/豆瓣,场面一度十分尴尬……
那我们就来尝试一下,用python通过摄像头探测人脸。如果有人进入了摄像头范围,则让python提出一个通知,告诉你——赶紧把不相关的东西关掉!
整个代码很短,无非几十行,为了能够使用,我们还需要安装一些包和库。这里需要用到的包括opencv和dlib。由于dlib需要boost-python,因此还需要安装boost和boost-python。(注意:boost-python默认情况下只编译python2依赖的库,如果使用python3,需要加编译开关;而dlib里是没有探测python版本的,所以可能还需要做一些小hack或者是直接改boost-python库里的文件名)
至于代码,可以简单地放出来:
import cv2
import dlib
from subprocess import call
from time import time
freq = 5
face_detector = dlib.get_frontal_face_detector()
# macos下可以使用applescript发送通知
def notify(text, title):
cmd = r'display notification %s with title %s'%(text, title)
call([osascript, -e, cmd])
if __name__ == '__main__':
# 初始化摄像头
cap = cv2.videocapture(0)
# 创建绘图窗口
# cv2.namedwindow('face')
notify_time = 0
while true:
# 获取一帧
ret, frame = cap.read()
# 不需要太精细的图片
frame = cv2.resize(frame, (320, 240))
# 探测人脸,可能有多个
faces = face_detector(frame, 1)
for face in faces:
# 提取人脸部分 画个方框
# fimg = frame[face.top():face.bottom(), face.left():face.right()]
# cv2.rectangle(frame, (face.left(), face.top()), (face.right(), face.bottom()), (255, 0, 0), 3)
# 不超过freq秒一次的发提醒
if time() - notify_time >freq:
notify(u'检测到人脸', u'注意')
notify_time = time()
# 画到窗口里
# cv2.imshow('face', frame)
# 按q退出
if cv2.waitkey(500) & 0xff == ord('q'):
break
# 清理窗口 释放摄像头
# cv2.destroyallwindows()
cap.release()
代码的原理很简单:通过opencv捕获摄像头获取的图像,然后交由dlib的face detector进行检测。如果检测到脸部,则通过applescript发出系统提醒(notify函数即通过process执行applescript发出提醒,如果你使用的是windows,也可以替换成别的内容,例如win下使用vbscript发出弹窗提醒)。
当然,既然检测到人脸,那就不仅仅只是能做简单提醒了。还可以做的事情包括多张照片的脸部变形合成——比如,找出你和你女朋友的照片来做个夫妻相合成什么的……
或者,提取所有的标志性点,给人脸合成出意外的表情或者哈哈镜效果。
甚至可以借助其它的深度学习网络进行人脸识别。这算是超级弱化版的脸部识别,比不上faceid但也挺好玩,不过计算量就不容乐观了。
二、数据分析
来分析下marvel 今年的最后一部戏:「雷神3:诸神的黄昏」。前一段时间满天飞的预告片,神秘博士的客串,绿巨人的出演,看得人十分兴奋!来张大图:
大家对于这部电影的评价是怎么样的呢?小慕爬取了2w条豆瓣影评,做一个简单分析。
先来看看豆瓣的短评:
这里只抓取了前2w条评论,说一个小技巧,喜欢写爬虫的小伙伴们注意了:爬取的网页一定要缓存到本地!这可以减少解析网页时出错,避免需要重新再爬一遍的「尴尬」!另外这能给服务器减少负载,人家网站管理员看你的请求还算守规矩,也就不会封你账号/ip啦!
代码大概是这样的:
下面是缓存下来的网页文件:
既然有2w多条数据,怎么能直接写sql,那会累死的……于是要来封装一下操作数据库的逻辑:
来看看效果,除去部分出错的,还剩下19672条:
具体的数据是长这样的:
另外,赞同数量排名第一 卷耳 君的影评实在是太有意思了:
第一部:《爸爸,再爱我一次》
第二部:《哥哥,再爱我一次》
第三部:《姐姐,再爱我一次》
ps:托尔终于从锤神变成了雷神
锤子之神这个梗小慕表示能玩一年(手动微笑脸)。
光有数据还不足以说明什么,深入分析一波:细心的小伙伴一定发现了,雷神明明是11月3号才上映,为啥10月份就有影评了?小慕猜测,这肯定是漫威铁杆粉跑国外看了,一查发现,果然人家洛杉矶10月10号就上映了:
既然关心到日期,可以来统计一下周一到周日哪天去看电影的人比较多:
整体数据显示:果然还是周末去看电影的人更多……周一数据高于二、三、四的原因,不知道是不是没有周末的朋友调休去看的?
ps: 数据库里的日期是2017-10-25格式的:怎么快速让他显示成周x呢? 这里只要写个小函数就行:
从数据库里读数据和统计的方式在这:(后面的统计方式也都类似,就不每次都把代码放出来啦)
说了这么多还是没提到电影的受欢迎程度,直接放图:
总体上看还是推荐的人比较多耶,这应该挺符合大家的预期,毕竟是漫威出品,光忠实粉丝就不计其数。更何况这个片子里出现了很多超级火爆的场面戏,还有各种超级英雄助阵,这样的统计结果也就不足为奇了。
最后将排名前100的评论内容做了一下分词,做成词云:
至于补充提问中提到的这为什么适合用python做,其实说到底就是用python来抓取和处理各种数据都非常「顺手」。
据小慕所知,目前的数据工作中,数据科学家使用最多的工具语言就是python,排在第二的工具语言是r语言。但这里有一个有趣的现象,那就是同时使用python或者r语言的人,推荐别人使用python的却远高于r语言。why?
答案是:
1. python简单易学,极其容易上手,语法简单,处理速度会比r语言要快,而且无需把数据库切割。
2. 市场前景好,是目前的趋势,就业也会更容易。
3. 标准库非常庞大,特别的“功能齐全”,可以处理各种工作,其中就包含抓取和处理数据。
所以,有一种说法是:python语言在工程方便比较实用,r语言则更受学术界欢迎。具体是否赞同这种说法,还要看大家自己的理解咯~其实除了小慕举例说的这两种有趣的事情,python能做的还有很多,在此不一一列举,如果感觉get到了新姿势,记得回来点赞啦~
以上内容整理自网络,侵删作者:小慕链接:https://imooc/article/24944来源:慕课网本文原创发布于慕课网 ,转载请注明出处,谢谢合作
写在最后
互联网科技发展蓬勃兴起,人工智能时代来临,抓住下一个风口。为帮助那些往想互联网方向转行想学习,却因为时间不够,资源不足而放弃的人。我整理了一套有价值的学习资料,比自己在网上零散收集的结构性和连贯性更强,只为帮助那些想学习的人!需要的同学请私信回复关键词“资料”。