技术标签: # Python小案例 Python
首先声明,下面的言论纯属胡扯,请不要当真。
在大家的印象当中,程序员是一个高薪职业,经常认为程序员是一个精英群体。现在我就告诉你们,这是真的。也正是因为这样,程序员非常受欢迎,通常一个程序员会有10到11个女生追(此处数字为二进制)。所以大多数程序员都不是单身,这也是程序员非常苦恼的地方。所以很多程序员都想方设法和女朋友分手,看到这篇文章的你幸运了,今天让你学以致用,写个分手小程序,让你享受单身的自由。
昨天是5月20号,之所以不在昨天发还是出于对人身安全的考虑。程序员小汪有这么一个苦恼。
他说:“我那个女朋友啊,烦得很,天天粘着我,代码都没时间打了。就昨天,还说要去旅游,她是想peach(屁吃)吧,我那么大个项目(实现登录注册),哪有时间陪她去旅游啊!”。
听到了小汪的抱怨,我思索了一番,问:“你渴望单身吗?”。
小汪回答:“那当然最好了,这样我就能安心写我的项目了”。
于是我就给程序员小汪出了个主意,小汪以下面这个姿态来给我报喜:
看样子他是成功了。我问小汪:“安排上了?”
小汪略显沮丧:“失败了,不知道哪个流程出了问题”。
我让小汪给我看看我让他做的东西,看完后我摇了摇头:“这个不行,太好看了,再丑点就能成功。”
我让小汪改了改代码,过了一段时间,小汪又换了一副容颜。这次的他容光泛发,从他的表情来看,这回没问题了:
他脸庞还有些许红润,嘴角带着血丝,但是仍掩盖不了他内心的喜悦。他说:“感谢大哥的教导,已经分了。虽然屏幕被砸了,键盘被崴了,鼠标也没尾巴了,但是都值了。”
看到这里很多程序员同胞们肯定很好奇,我到底让小汪做了些啥。大家别急,我会告诉大家的。在此之前需要大家阅读以下声明:
通过使用内容随之而来的风险与作者无关。访问者可将本文提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
最后有啥问题请不要祖安作者,万分感谢。
我给小汪的提议是,既然他女朋友想去旅游那你可以展现一下男人的魅力(抠门),详细描述你们可以在他们的聊天中得知:
小汪说:“你旅游是去干啥啊?除了吃就是拍照,吃哪都可以吃啊!”
汪妻答曰:“刚恋爱的时候都叫人小甜甜,现在还凶人家。人家就是想要拍照嘛!”
这句话正好就中了小汪下的圈套,小汪讲道:“那好啊,我给你拍总行了吧!”
说完,小汪坐到电脑前。汪妻以为他在订绿皮火车票,内心暗喜。于是在一旁刷起了抖音。万万没想到,小汪却打开了pycharm,一旁刷抖音的汪妻并没有注意到。首先,小汪按win+R
输入了cmd
,然后在命令行输入了下面两段代码:
python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
pip install -i https://mirror.baidu.com/pypi/simple paddlehub
小汪默念道:“大哥是说要先安装paddlepaddle和paddlehub,看着是这两句。”小汪思索了一会儿:“抠图要怎么写来者?”他打开浏览器,输入了这个网址:别再自己抠图了,Python用5行代码实现批量抠图。“大哥写的太好了,一下就看懂了”,于是他继续往下写:
from PIL import Image
import paddlehub as hub
# 加载注释
humanseg = hub.Module(name='deeplabv3p_xception65_humanseg')
# 抠图,执行后会生成一个humanseg_output目录,png图片与原图片同名
results = humanseg.segmentation(data={
'image':['master.jpg']})
# 读取png图片
im = Image.open('humanseg_output/master.png')
# 通道分离
r, g, b, a = im.split()
# 读取背景图片
bg = Image.open('bg.jpg')
# 获取粘贴位置
size1 = im.size
size2 = bg.size
im.resize((size2[1], size2[1]))
x = size2[0]-size1[0]
y = size2[1]-size1[1]
# 将png图片粘贴到背景上
bg.paste(im, (x, y), mask=a)
# 保存结果图
bg.save('result.jpg')
小汪运行了程序,发现居然报错了,跑来问我,发现是有模块没安装,他又在cmd
中执行下列代码:
pip install pillow
这下运行没问题了,小汪摸着胡须,挠着头上所剩无几的头发,我估摸着,这一挠又挠死了几个字节的毛囊。他看着下面这几张图片(图中并非小汪女朋友):
小汪心中想着,这下应该没问题了,于是就把实现好的图片给女朋友看。汪妻大怒:“你不想带我去玩你就说啊,还要弄一个程序糊弄我!”,接着扇了小汪一大嘴巴子。小汪暗喜,可是小汪并没能高兴太久。汪妻刷到了这么一条抖音:“有个程序员男朋友是什么体验?巴拉巴拉~”,在看到代码的那一刻,汪妻觉得自己误会小汪了,于是又和小汪和好了,小汪含泪接受了女朋友的道歉。
出门后的小汪又找到我,我又给小汪出了个主意。小汪回到家,打开浏览器进入OpenCV官网:https://opencv.org/releases/ 。下载了对应版本的软件,然后安装,他在安装目录找到source\data\haarcascades
目录,拿出了haarcascade_frontalface_default.xml
文件,小汪有些迷惑,也没管太多,只是用浏览器打开了这个页面:OpenCv识别小罗伯特唐尼。心想,有啥不会的查一下就好了。
然后小汪在cmd
执行下面两句代码:
pip install opencv-python
pip install opencv-contrib-python
然后小汪想着我说的话,把女朋友的脸换成一个丑一点的人就好了。又写下了如下代码:
import cv2
def face_detect(im):
"""检测人脸"""
im = cv2.imread(im)
grey = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_detector.detectMultiScale(grey)
# 返回一张人脸
return faces[0]
写到这里,小汪发现haarcascade_frontalface_default.xml
原来是在这里使用的,于是他把文件复制到项目下来。他心里想到:“这就可以检测人脸了!”。但是还不够,他继续写:
def change_face(im, face_loc, face_im):
x, y, w, h = face_loc
# 读取女朋友图片
im = cv2.imread(im)
# 读取要换的脸
face_im = cv2.imread(face_im)
face_im = cv2.resize(face_im, (w, h))
# 人脸区域切换
im[y:y + h, x:x + w] = face_im
# 保存
cv2.imwrite('result.jpg', im)
小汪又在main
中写到:
if __name__ == '__main__':
face = face_detect('master.jpg')
change_face('master.jpg', face, 'face.jpg')
运行后结果图出来了,小汪点开结果图,大声笑了起来:
汪妻被笑声吸引,看到屏幕上的图片勃然大怒。崴了键盘,砸了屏幕,扯断了鼠标,还把小汪给胖揍了一顿,小汪血流不止,但是还止不住笑声。汪妻果断提出分手。到此事情算是画上了一个完美的句号。
很多人疑惑,小汪为什么要这么做,大家都觉得小汪这样做很激进。但是其实小汪才是最清醒的那个,小汪在日记中写道:“别人笑我太疯癫,我笑他人看不穿”。就在这时,小汪的女朋友回来了:“我刚刚刷到了一个抖音,原来是我不懂程序员的幽默,我错了,你能原谅我吗?”
19级某菜鸡的计算机系统大作业
1. 分类只能给原有类添加方法,不允许添加变量2. 分类中@property只会生成getter和setter方法声明 ,不会生成私有成员和方法实现3. 分类中可以访问原有类.h中的属性4. 分类如果和原有类有同名方法, 会调用分类方法,忽略(覆盖)原有类方法,尽量不要这样写5. 多个分类都有同一个方法,最后一个编译的被执行...
立足于2011年发布的软件业务发展路线图,蓝色巨人IBM新的一年计划在大数据、智慧地球和云计算三个领域长驱直入,向着“到2015年软件业务为IBM贡献50%利润”的目标继续进发。 “对于每一位IBM软件业务的员工来说,最近一段时期是令人振奋的。伴随着软件业务转型的深入,IBM软件业务在2011年再创佳绩,同时在许多创新领域有了坚实的技术积累和市场拓展。基于以往的成功经验...
package com.org.controller;import com.org.dao.PriceDao;import com.org.service.PriceService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.
和类属性一样,类方法也可以进行更细致的划分,具体可分为类方法、实例方法和静态方法。和类属性的分类不同,对于初学者来说,区分这 3 种类方法是非常简单的,即采用 @classmethod 修饰的方法为类方法;采用 @staticmethod 修饰的方法为静态方法;不用任何修改的方法为实例方法。其中 @classmethod 和 @staticmethod 都是函数装饰器,后续章节会对其做详细介绍。接...
1.分区表和分区索引的概念是分开的。分区表上建的索引就是分区索引,是错误的。2.global分区索引也是可以建在非分区表上的,local分区索引只能建在分区表上。3.关键字global和local都是针对分区索引,虽然非...
* Restarting web server apache2 AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1. Set the ‘ServerN
不同操作系统,python换行符是什么?发布时间:2020-04-21 14:17:41
中科院NLPIR(推荐)http://ictclas.nlpir.org/原名ICTCLAS,是由中科院计算所历经数年开发的分词工具,采用C++编写。主要功能包括分词、词性标注、命名实体识别、用户词典功能,新词发现与关键词提取。可以可视化界面操作和API方式调用。哈工大LTP(推荐)http://www.ltp-cloud.com/语言技术平台(LTP)是哈工大社会计算
jQuery UI adds quite a bit of functionality on top of jQuery’s built-in effects. jQuery UI adds support for animating colors and class transitions, as well as providing several additional easings. In ...
Objective-c中提供了可以让我们扩展类定义的手段:类目,延展和协议。接下来我就给大家说说类目:为已知的类增加新的方法,可以动态的为已存在的类添加新的行为,不需要访问其源代码,也不需要创建子类,可以向一个类中添加人一多的类别。由于不能添加新实现变量,因此与类声明不同的是,类别的声明中没有实例变量部分。类目的局限性1.无法向类中添加新的实例变量。2.名称冲突,即类别中得方法与现有的
创建对私有方法的向前引用。一般情况下,没有在.h接口文件中声明,只有在.m文件中出现的方法,外界是不能调用的。 但是通过定义类别后,把这个.m文件中的方法在类别的.h文件中声明出来,外界就可以调用了。 这种方式就是对私有对象的向前引用。向对象添加非正式协议。正式协议是通过@protocol关键字声明的一系列方法,然后由准守协议的类去实现这些方法。非正式协议是通过分类,将正式协议里声明的方法声