使用Python控制攝像頭拍照并發(fā)郵件
o1 前言
為什么會有寫這個程序的想法呢?
最初的想法是寫一個可以用電腦前置攝像頭拍照的程序,在舍友使用你電腦的時候,不經(jīng)意間獲取到一大堆奇葩舍友的表情包。
然后我又突發(fā)奇想,要不搞個開機啟動吧,這樣我就可以看到是誰開啟了我的電腦啦。
然后,突(nao)發(fā)(dong)奇(da)想(kai)的我又想到萬一我電腦不在身邊怎么辦?要不再加個郵件發(fā)送機制吧,開機拍到照片再郵件發(fā)送給我?哈哈
02 工具
•deepin 15.9
•好看好用的國產(chǎn)linux系統(tǒng)
•python 2.7或者3.6
•解釋器,哪個版本都可以,我選擇3.6
•smtplib
•用來發(fā)送郵件
•email
•用來構(gòu)造郵件內(nèi)容的庫
•opencv
•用來調(diào)取攝像頭拍攝照片
•time
•獲取開機以及拍照的時間
•os
•判斷網(wǎng)絡(luò)連接
•獲取腳本路徑
•sys
•判斷網(wǎng)絡(luò)是否聯(lián)通
03 思路
•1.用opencv庫調(diào)用攝像頭拍照保存為文件。
•2.檢查網(wǎng)絡(luò)是否連接,未連接則圖片保存到本地。
•3.用email庫構(gòu)造郵件內(nèi)容,把保存的照片以附件的形式插入到郵件內(nèi)容中。
•4.用smtplib庫發(fā)送郵件給指定郵件接收者。
•5.實現(xiàn)腳本開機自啟動。
04 安裝及導(dǎo)入所使用的包
首先當(dāng)然是安裝opencv啦。
其他的email、smtplib、sys、os、time為python默認(rèn)安裝的包,我們只需要導(dǎo)入即可。
如果是python3.6安裝opencv就在終端輸入:
pip3 install opencv-python
如果是python2.7安裝opencv,就在終端輸入:
pip install opencv-python
安裝完成后,我們導(dǎo)入必要的包。
各個包的作用在前文已經(jīng)講過,不再多言。
email 我們只需要部分功能,所以選擇性導(dǎo)入
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 設(shè)置參數(shù)
將smtp服務(wù)器,登錄郵箱賬號及密碼,收件人,腳本路徑等設(shè)置為全局變量。方便以后程序移植與修改。
smtpserver = 'smtp.163.com' # smtp服務(wù)器 username = '888888888@163.com' # 發(fā)件郵箱賬號 password = '888888888' # 郵箱登錄密碼 sender = '888888888@163.com' # 發(fā)件人 addressee = '999999999@qq.com' # 收件人 exit_count = 5 # 嘗試聯(lián)網(wǎng)次數(shù) path = os.getcwd() #獲取圖片保存路徑
注:很多郵箱為了安全起見,不會使用真實的登錄密碼,而是要使用授權(quán)碼,在QQ郵箱的設(shè)置里面可以找到生成授權(quán)碼選項。
06 實現(xiàn)拍照
def getPicture(): cap = cv2.VideoCapture(0) ret, frame = cap.read() cv2.imwrite(path+'/person.jpg', frame) # 關(guān)閉攝像頭 cap.release()
07 構(gòu)造郵件內(nèi)容
def setMsg():
# 下面依次為郵件類型,主題,發(fā)件人和收件人。
msg = MIMEMultipart('mixed')
msg['Subject'] = '電腦已經(jīng)啟動'
msg['From'] = '88888888888@163.com <88888888888@163.com>'
msg['To'] = addressee
# 下面為郵件的正文
text = "主人,你的電腦已經(jīng)開機!
照片如下!"
text_plain = MIMEText(text, 'plain', 'utf-8')
msg.attach(text_plain)
# 構(gòu)造圖片鏈接
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 實現(xiàn)郵件發(fā)送
def sendEmail(msg):
# 發(fā)送郵件
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, addressee, msg)
smtp.quit()
09 判斷網(wǎng)絡(luò)聯(lián)通狀態(tài)
判斷網(wǎng)絡(luò)聯(lián)通狀態(tài)的方法很多,我采用很簡單很直接的ping。
# 判斷網(wǎng)絡(luò)是否聯(lián)通,成功返回0,不成功返回1
# linux中ping命令不會自動停止,需要加入?yún)?shù) -c 4,表示在發(fā)送指定數(shù)目的包后停止。
def isLink():
return os.system('ping -c 4 www.baidu.com')
# return os.system('ping www.baidu.com')
10 主函數(shù)邏輯
如果網(wǎng)絡(luò)連接正常,則拍照發(fā)郵件。
如果網(wǎng)絡(luò)未連接,等待十秒鐘再次測試,如果等待次數(shù)超過設(shè)置的最大次數(shù),程序退出。
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 實現(xiàn)開機自啟動
首先要寫一個開機自啟腳本,文件名為:autoStart.sh
腳本內(nèi)容為
#切換到我們獲取照片和發(fā)送郵件的工作目錄 cd /home/projects/sendemail #執(zhí)行發(fā)送郵件的腳本 python2 sendEmile.py
然后 在/etc/rc.local最后添加一行
./home/projects/sendemail/autoStart.sh
大功告成。
10 重啟系統(tǒng)
代碼都寫好了,重啟系統(tǒng)就可以收到郵件啦。
總結(jié)
以上所述是小編給大家介紹的使用Python控制攝像頭拍照并發(fā)郵件,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
python爬蟲之利用Selenium+Requests爬取拉勾網(wǎng)
這篇文章主要介紹了python爬蟲之利用Selenium+Requests爬取拉勾網(wǎng),文中有非常詳細的代碼示例,對正在學(xué)習(xí)python爬蟲的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04
基于PyQt5實現(xiàn)狀態(tài)欄(statusBar)顯示和隱藏功能
這篇文章主要為大家詳細介紹了如何利用PyQt5實現(xiàn)狀態(tài)欄顯示和隱藏功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-08-08
淺談python內(nèi)置變量-reversed(seq)
下面小編就為大家?guī)硪黄獪\談python內(nèi)置變量-reversed(seq)。小編覺得挺不錯的?,F(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
python 判斷l(xiāng)inux進程,并殺死進程的實現(xiàn)方法
今天小編就為大家分享一篇python 判斷l(xiāng)inux進程,并殺死進程的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
python2.7無法使用pip的解決方法(安裝easy_install)
下面小編就為大家分享一篇python2.7無法使用pip的解決方法(安裝easy_install),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
利用PyQt5+Matplotlib 繪制靜態(tài)/動態(tài)圖的實現(xiàn)代碼
這篇文章主要介紹了利用PyQt5+Matplotlib 繪制靜態(tài)/動態(tài)圖的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

