監視カメラの映像を見続けるのは非効率です。PythonとOpenCVを使えば、顔を検出したタイミングで自動的にSlackへ通知を送るシステムが構築できます。
この記事では、リアルタイム映像から顔を検出し、その瞬間にSlackへメッセージと画像付きで通知する方法を紹介します。不審者検知やオフィス来客通知などに応用可能です。
使用するライブラリ
pip install opencv-python slack_sdk
Slackの通知には slack_sdk
を使います。
Slack側の準備:Webhook URLの取得
- Slack App管理ページで新規アプリ作成
- 「Incoming Webhooks」を有効にする
- 通知先チャンネルを選択し、Webhook URL を取得
顔検出とSlack通知を組み合わせたスクリプト
import cv2
import datetime
import requests
# Haar Cascadeによる顔検出器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
# Slack Webhook URL
SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/XXXXXXXX/XXXXXXXX/XXXXXXXXXXXXXXXX"
def notify_slack(image_path):
with open(image_path, 'rb') as f:
img_data = f.read()
response = requests.post(
SLACK_WEBHOOK_URL,
json={
"text": "⚠️ 顔を検出しました。",
"attachments": [{
"fallback": "顔検出画像",
"image_url": "画像はこの方法では直接送信できません。ファイルアップロード方式推奨。"
}]
}
)
print("Slack通知:", response.status_code)
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
if len(faces) > 0:
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 顔検出時に画像保存とSlack通知(1回だけに制限可能)
now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"detected_{now}.jpg"
cv2.imwrite(filename, frame)
notify_slack(filename)
print("顔検出 → Slack通知")
# 1検出ごとに待機時間(スパム防止)
cv2.waitKey(5000)
cv2.imshow("Face Monitor", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Slackに画像を送る方法(ファイルアップロード)
Webhookでは画像の「URL共有」は可能ですが、ローカル画像のアップロードにはSlack APIのファイルアップロード機能が必要です。
from slack_sdk import WebClient
slack_token = "xoxb-xxxxxxxxxxxx"
client = WebClient(token=slack_token)
def upload_to_slack(file_path, message):
client.files_upload(
channels="#通知チャンネル",
file=file_path,
title="検出された人物",
initial_comment=message
)
応用例
- 特定の顔だけを通知対象にする(顔認識)
- LINEやメールと併用するマルチ通知
- 夜間のみ通知するようにスケジュール制御
- 検出ログをCSVで保存
まとめ
PythonとOpenCV、Slack APIを組み合わせることで、カメラに映った人物を検出して即時通知するシステムが簡単に実現できます。通知機能を組み込むことで監視作業の省力化やセキュリティ向上が期待できます。
今後は顔認証や人物識別との連携、検出頻度の記録、クラウド保存などへの拡張も可能です。まずは基本構成から構築してみましょう。