扣丁學堂淺談如何使用Python控制攝
- 2020 年 1 月 3 日
- 筆記
今天扣丁學堂Python培訓老師給大家分享一篇關於使用Python控制攝影機拍照並發郵件的詳細介紹,首先為什麼會有寫這個程式的想法呢下面我們一起來看一下吧。
最初的想法是寫一個可以用電腦前置攝影機拍照的程式,在舍友使用你電腦的時候,不經意間獲取到一大堆奇葩舍友的表情包。
然後我又突發奇想,要不搞個開機啟動吧,這樣我就可以看到是誰開啟了我的電腦啦。
然後,突(nao)發(dong)奇(da)想(kai)的我又想到萬一我電腦不在身邊怎麼辦要不再加個郵件發送機制吧,開機拍到照片再郵件發送給我哈哈
02工具
deepin15.9
好看好用的國產linux系統
python2.7或者3.6
解釋器,哪個版本都可以,我選擇3.6
smtplib
用來發送郵件
用來構造郵件內容的庫
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從入門到精通開發實戰技能。