まず、タイトルが長いと申し訳ありません。私は、pythonを使用して顔の検出に取り組んでいます。私は、同じ画像があるとき、または2つのディレクトリ/フォルダの間で検出された顔/顔がほぼ同じときにユーザに通知するスクリプトを作成しようとしています。 以下は私がこれまでに書いたスクリプトです。pythonとopencvを使って2つのディレクトリ間で共通の顔が検出された場合にユーザに通知する方法
import cv2
import glob, requests
def detect1():
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
for img in glob.glob('/Users/Ling/Pythonfiles/Faces/*.jpg'):
cv_img = cv2.imread(img)
gray = cv2.cvtColor(cv_img, cv2.COLOR_BGR2GRAY)
faces1 = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces1:
cv2.rectangle(cv_img,(x,y),(x+w,y+h),(255,0,0),2)
def detect2():
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
for image in glob.glob('/Users/Ling/Pythonfiles/testfolder/*.jpg'):
cv_image = cv2.imread(image)
gray = cv2.cvtColor(cv_image, cv2.COLOR_BGR2GRAY)
faces2 = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces2:
cv2.rectangle(cv_image,(x,y),(x+w,y+h),(255,0,0),2)
def notify():
if detect2 == detect1:
key = "<yourkey>"
sandbox = "<yoursandbox>.mailgun.org"
recipient = "<recipient's email>"
request_url = 'https://api.mailgun.net/v2/{0}/messages'.format(sandbox)
request = requests.post(request_url, auth=('api', key),
data={
'from': '<sender's email',
'to': recipient,
'subject': 'face detect',
'text': 'common face detected'
})
print 'Status: {0}'.format(request.status_code)
print 'Body: {0}'.format(request.text)
通知はありませんが、エラーはありません。私はランダムな顔の10枚の写真付きのフォルダを持っています。これはGoogle Image(学習目的のため)からダウンロードしました。また、2人の写真がある別のフォルダには、前のフォルダの画像と同じ顔があります。同じ顔をした画像の角度が異なります。
https://pythonprogramming.net/haar-cascade-face-eye-detection-python-opencv-tutorial/ からチュートリアルを参照してスクリプトを書いて、プログラムが両方のフォルダから同じ顔を検出すると、通知を送信する行を追加します。
私の質問は、同じ顔が検出された場合、どのようにユーザーに正確に通知するかです。私はこのコードが不完全で、誰かが私に何を追加/編集するか、このスクリプトで書いてはいけないことを提案できることを願っています。
ありがとうございます。
ご回答ありがとうございます。私はあなたが提案するように試みます。私は別のプロジェクトがあるので、できるだけ早くテストすることはできません。私は時間があれば、私はあなたが提案したように間違いなく試みます。 – Ling