Python 3.x Python OpenCV——电子邮件不';t发送从OpenCV保存的图像

Python 3.x Python OpenCV——电子邮件不';t发送从OpenCV保存的图像,python-3.x,email,opencv,Python 3.x,Email,Opencv,我基本上有两个功能。一个是捕捉在我的笔记本电脑上检测到的人脸,我想收到一封电子邮件,上面有坐在我椅子上的用户的脸。我的问题是代码正在拍照,但没有运行电子邮件提交。有人能帮忙吗 from imutils.video import VideoStream import imutils, time, cv2, sys import smtplib, os from email.mime.multipart import MIMEMultipart from email.mime.text import

我基本上有两个功能。一个是捕捉在我的笔记本电脑上检测到的人脸,我想收到一封电子邮件,上面有坐在我椅子上的用户的脸。我的问题是代码正在拍照,但没有运行电子邮件提交。有人能帮忙吗

from imutils.video import VideoStream
import imutils, time, cv2, sys
import smtplib, os
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.message import Message
from email.mime.audio import MIMEAudio
from email import encoders

def take_picture():
    detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
    vs = VideoStream(src=0).start()
    time.sleep(2.0)
    total = 0
    while True:
        frame = vs.read()
        orig = frame.copy()
        frame = imutils.resize(frame, width=600)
        rects = detector.detectMultiScale(
            cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY), scaleFactor=1.1, 
            minNeighbors=5, minSize=(30, 30))
        for (x, y, w, h) in rects:
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
            if rects is not None and total <5:
                p="/Users/Desktop/atentie/mail/"+str(total)+".png"
                cv2.imwrite(p, orig)
                total+=1        
            else:
                break
    print("Initiez procedura de update root!")          
def send_email():
    files = "/Users/Desktop/atentie/mail/"
    filenames = [os.path.join(files, f) for f in os.listdir(files)] 
    fromaddr = “mail”
    toaddr = “mail”
    Cc=“mail”
    msg = MIMEMultipart()
    msg['From'] = fromaddr
    msg['To'] = toaddr
    msg['Cc']=Cc
    msg['Subject'] = "Atentionare Cineva Va Foloseste Laptopul"

    body = "Cineva se joaca la laptopul tau"
    msg.attach(MIMEText(body, 'plain')) 
    for file in filenames:
      part = MIMEBase('application', 'octet-stream')
      part.set_payload(open(file, 'rb').read())
      encoders.encode_base64(part)
      part.add_header('Content-Disposition', 'attachment; filename="%s"' % file)
      msg.attach(part)
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login(fromaddr, “pass”)
    text = msg.as_string()
    server.sendmail(fromaddr, toaddr, text)
    server.quit()
    print("Initiez procedura de trimitere email catre root!")
take_picture()
# time.sleep(2)
send_email()
# raise SystemExit
从imutils.video导入视频流
导入imutils、时间、cv2、系统
导入smtplib,操作系统
从email.mime.multipart导入MIMEMultipart
从email.mime.text导入MIMEText
从email.mime.base导入MIMEBase
从email.mime.multipart导入MIMEMultipart
从email.mime.image导入MIMEImage
从email.message导入消息
从email.mime.audio导入MIMEAudio
从电子邮件导入编码器
def拍摄照片():
detector=cv2.CascadeClassifier(“haarcascade\u frontalface\u default.xml”)
vs=VideoStream(src=0).start()
时间。睡眠(2.0)
总数=0
尽管如此:
frame=vs.read()
orig=frame.copy()
frame=imutils.resize(frame,width=600)
rects=检测器。检测器多尺度(
cv2.CVT颜色(边框,cv2.COLOR_BGR2GRAY),比例因子=1.1,
minNeighbors=5,minSize=(30,30))
对于矩形中的(x,y,w,h):
cv2.矩形(框架,(x,y),(x+w,y+h),(0,255,0),2)

如果rects不是None和total,则需要实现以下逻辑:

def send_picture(p): 
    # *** SEND_PICTURE_LOGIC ***
    # Take the input picture p passed as argument 
    # Send this picture to email 

def take_picture():
    # *** TAKE_PICTURE_LOGIC ***
    # If somebody is sitting on my chair
    # take a picture and call it currentPicture
    # Call send_picture function with the currentPicture acquired
    send_picture(currentPicture) 
这将导致为每次收购发送一封电子邮件


这应该可以解决您的问题

您已经分别放置了
发送电子邮件()
。将它放在
take_picture()
中可能会使它起作用。现在你只是在
send\u email()中循环。
是一样的!有两个函数,分别调用,问题是无法发送电子邮件。只有当我创建2个文件,然后从另一个文件调用send函数时,它才起作用;但在同一个文件中,这两个都不运行。你知道为什么吗?没错!这就是我在评论中提到的!