Ver código fonte

上傳檔案到 ''

fatwolf 1 ano atrás
pai
commit
274abefde4
3 arquivos alterados com 158 adições e 0 exclusões
  1. BIN
      best.pt
  2. 153 0
      people_detection.py
  3. 5 0
      requirements.txt

BIN
best.pt


+ 153 - 0
people_detection.py

@@ -0,0 +1,153 @@
+import cv2
+import argparse
+from ultralytics import YOLO
+import supervision as sv
+import numpy as np
+import requests
+import time
+import os
+
+from email.mime.text import MIMEText
+from email.mime.multipart import MIMEMultipart
+from email.mime.image import MIMEImage
+from pathlib import Path
+import smtplib
+
+ZONE_POLYGON = np.array([
+    [0, 0],
+    [0.3, 0],
+    [0.3, 1],
+    [0, 1]
+])
+
+
+def parse_arguments() -> argparse.Namespace:
+    parser = argparse.ArgumentParser(description="YOLOv8 live")
+    parser.add_argument(
+        "--webcam-resolution",
+        default=[800, 600],
+        nargs=2,
+        type=int
+    )
+    args = parser.parse_args()
+    return args
+
+# 修改為你要傳送的訊息內容
+msg = '偵測到:'
+# 修改為你的權杖內容
+token = 'fDzzBZtLGAukpn7BATssNcB2zbkUajyoHMSQh0IgfT4'
+def lineNotifyMessage(token,msg):
+    headers = {
+        "Authorization": "Bearer " + token
+    }
+    payload = {'message': msg}
+    image = open('result.jpg','rb')
+    #files = { 'imageFile': image }
+
+    #r = requests.post("https://notify-api.line.me/api/notify", headers=headers, params=payload, files = files)
+    r = requests.post("https://notify-api.line.me/api/notify", headers=headers, params=payload)
+    print(r.text)
+    return r.status_code
+
+
+
+
+def main():
+    args = parse_arguments()
+    frame_width, frame_height = args.webcam_resolution
+    #print(frame_width,frame_height)
+    cap = cv2.VideoCapture(0)
+    cap.set(cv2.CAP_PROP_FRAME_WIDTH, frame_width)
+    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, frame_height)
+
+    #model = YOLO("yolov8n.pt")
+    model = YOLO("best.pt")
+
+    box_annotator = sv.BoxAnnotator(
+        thickness=2,
+        text_thickness=2,
+        text_scale=1
+    )
+
+    zone_polygon = (ZONE_POLYGON * np.array(args.webcam_resolution)).astype(int)
+    zone = sv.PolygonZone(polygon=zone_polygon, frame_resolution_wh=tuple(args.webcam_resolution))
+    zone_annotator = sv.PolygonZoneAnnotator(
+        zone=zone,
+        color=sv.Color.blue(),
+        thickness=2,
+        text_thickness=4,
+        text_scale=2
+    )
+    count = 0
+
+    while True:
+        ret, frame = cap.read()
+        result = model(frame, agnostic_nms=True)[0]
+        detections = sv.Detections.from_yolov8(result)
+
+        labels = [
+            f"{model.model.names[class_id]} {confidence:0.2f}"
+            for _, confidence, class_id, _
+            in detections
+        ]
+
+        labels_name = [
+            f"{model.model.names[class_id]}"
+            for _, confidence, class_id, _
+            in detections
+        ]
+
+        labels_confidence = [
+            f"{confidence:0.2f}"
+            for _, confidence, class_id, _
+            in detections
+        ]
+
+        frame = box_annotator.annotate(
+            scene=frame,
+            detections=detections,
+            labels=labels
+        )
+        #print('name',labels_name)
+        # print('confidence', labels_confidence)
+        if labels_name == 0:
+            continue
+        elif labels_name == ['Fatwolf']:
+            count = count+1
+            now_time = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime(time.time()))
+            get_labels_name = ''.join(filter(str.isalpha,labels_name))
+            save_picpath = "./"+get_labels_name
+            if not os.path.isdir(save_picpath):
+                os.makedirs(save_picpath)
+            cv2.imwrite('result.jpg',frame)
+            write_image = now_time + '_' + str(count) + '.jpg'
+            cv2.imwrite(save_picpath+'/'+write_image, frame)
+            lineNotifyMessage(token, (msg+get_labels_name))
+
+            message = MIMEMultipart()
+            message["from"] = "qwe03160825@gmail.com"
+            message["to"] = "service.gitcr081@gmail.com"
+            message["subject"] = "[警告訊息]偵測到不明人士!"
+            now_time = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime(time.time()))
+            #image = 'result.jpg'
+            message.attach(MIMEText("時間:" + now_time + "\n偵測到不明人士"))
+            #message.attach(MIMEImage(Path(image).read_bytes()))
+            with smtplib.SMTP('smtp.gmail.com', 587) as smtp:
+                smtp.ehlo()
+                smtp.starttls()
+                smtp.login("qwe03160825@gmail.com", "jbroyqabjqdscujo")
+                smtp.send_message(message)
+                print("sent...")
+
+        # zone.trigger(detections=detections)
+        # frame = zone_annotator.annotate(scene=frame)
+        cv2.imshow("yolov8", frame)
+
+        key = cv2.waitKey(1)
+        if key == ord('q'):
+            break
+
+
+if __name__ == "__main__":
+    main()
+    

+ 5 - 0
requirements.txt

@@ -0,0 +1,5 @@
+numpy==1.21.5
+opencv_python==4.7.0.68
+requests==2.28.1
+supervision==0.3.2
+ultralytics==8.0.58