扣丁學堂淺談如何使用Python控制攝

今天扣丁學堂Python培訓老師給大家分享一篇關於使用Python控制攝像頭拍照並發郵件的詳細介紹,首先為什麼會有寫這個程序的想法呢下面我們一起來看一下吧。

最初的想法是寫一個可以用電腦前置攝像頭拍照的程序,在舍友使用你電腦的時候,不經意間獲取到一大堆奇葩舍友的表情包。

然後我又突發奇想,要不搞個開機啟動吧,這樣我就可以看到是誰開啟了我的電腦啦。

然後,突(nao)發(dong)奇(da)想(kai)的我又想到萬一我電腦不在身邊怎麼辦要不再加個郵件發送機制吧,開機拍到照片再郵件發送給我哈哈

02工具

deepin15.9

好看好用的國產linux系統

python2.7或者3.6

解釋器,哪個版本都可以,我選擇3.6

smtplib

用來發送郵件

email

用來構造郵件內容的庫

opencv

用來調取攝像頭拍攝照片

time

獲取開機以及拍照的時間

os

判斷網絡連接

獲取腳本路徑

sys

判斷網絡是否聯通

03思路

1.用opencv庫調用攝像頭拍照保存為文件。

2.檢查網絡是否連接,未連接則圖片保存到本地。

3.用email庫構造郵件內容,把保存的照片以附件的形式插入到郵件內容中。

4.用smtplib庫發送郵件給指定郵件接收者。

5.實現腳本開機自啟動。

04安裝及導入所使用的包

首先當然是安裝opencv啦。

其他的email、smtplib、sys、os、time為python默認安裝的包,我們只需要導入即可。

如果是python3.6安裝opencv就在終端輸入:

pip3 install opencv-python

如果是python2.7安裝opencv,就在終端輸入:

pip install opencv-python

安裝完成後,我們導入必要的包。

各個包的作用在前文已經講過,不再多言。

email我們只需要部分功能,所以選擇性導入

import cv2

import smtplib

import sys

import os

import time

from email.mime.image import MIMEImage

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText

05設置參數

將smtp服務器,登錄郵箱賬號及密碼,收件人,腳本路徑等設置為全局變量。方便以後程序移植與修改。

smtpserver = 'smtp.163.com' # smtp服務器

username = '[email protected]' # 發件郵箱賬號

password = '888888888' # 郵箱登錄密碼

sender = '[email protected]' # 發件人

addressee = '[email protected]' # 收件人

exit_count = 5 # 嘗試聯網次數

path = os.getcwd() #獲取圖片保存路徑

註:很多郵箱為了安全起見,不會使用真實的登錄密碼,而是要使用授權碼,在QQ郵箱的設置裏面可以找到生成授權碼選項。

06實現拍照

def getPicture():

cap = cv2.VideoCapture(0)

ret, frame = cap.read()

cv2.imwrite(path+'/person.jpg', frame)

關閉攝像頭

cap.release()

07構造郵件內容

def setMsg():

下面依次為郵件類型,主題,發件人和收件人。

msg = MIMEMultipart('mixed')

msg['Subject'] = '電腦已經啟動'

msg['From'] = '[email protected] <[email protected]>'

msg['To'] = addressee

下面為郵件的正文

text = "主人,你的電腦已經開機!

照片如下!"

text_plain = MIMEText(text, 'plain', 'utf-8')

msg.attach(text_plain)

構造圖片鏈接

sendimagefile = open(path+'/person.jpg', 'rb').read()

image = MIMEImage(sendimagefile)

下面一句將收件人看到的附件照片名稱改為people.png。

image["Content-Disposition"] = 'attachment; filename="people.png"'

msg.attach(image)

return msg.as_string()

08實現郵件發送

def sendEmail(msg):

發送郵件

smtp = smtplib.SMTP()

smtp.connect('smtp.163.com')

smtp.login(username, password)

smtp.sendmail(sender, addressee, msg)

smtp.quit()

09判斷網絡聯通狀態

判斷網絡聯通狀態的方法很多,我採用很簡單很直接的ping。

判斷網絡是否聯通,成功返回0,不成功返回1

linux中ping命令不會自動停止,需要加入參數 -c 4,表示在發送指定數目的包後停止。

def isLink():

return os.system('ping -c 4 www.baidu.com')

return os.system('ping www.baidu.com')

10主函數邏輯

如果網絡連接正常,則拍照發郵件。

如果網絡未連接,等待十秒鐘再次測試,如果等待次數超過設置的最大次數,程序退出。

def main():

reconnect_times = 0

while isLink():

time.sleep(10)

reconnect_times += 1

if reconnect_times == exit_count:

sys.exit()

getPicture()

msg = setMsg()

sendEmail(msg)

11實現開機自啟動

首先要寫一個開機自啟腳本,文件名為:autoStart.sh

腳本內容為

切換到我們獲取照片和發送郵件的工作目錄

cd /home/projects/sendemail

執行發送郵件的腳本

python2 sendEmile.py

然後在/etc/rc.local最後添加一行

./home/projects/sendemail/autoStart.sh

大功告成。

10重啟系統

代碼都寫好了,重啟系統就可以收到郵件啦。

以上就是關於扣丁學堂淺談如何使用Python控制攝像頭拍照並發郵件的詳細介紹,最後想要了解更多關於Python和人工智能方面內容的小夥伴,請關注扣丁學堂Python培訓官網、微信等平台,扣丁學堂IT職業在線學習教育平台為您提供權威的Python開發環境搭建視頻,Python培訓後的前景無限,行業薪資和未來的發展會越來越好的,扣丁學堂老師精心推出的Python視頻教程定能讓你快速掌握Python從入門到精通開發實戰技能。