Ultralytics YOLO27: Join the waitlist.
Get Started

Security Alarm System Project Using Ultralytics YOLO26#

AI-powered security alarm system with object detection

This project uses Ultralytics YOLO26 computer vision to build a security alarm system. YOLO26 provides real-time object detection, allowing the system to identify and respond to potential security threats promptly. This project offers several advantages:

  • Real-time Detection: YOLO26's efficiency enables the Security Alarm System to detect and respond to security incidents in real time, minimizing response time.
  • Accuracy: YOLO26's accurate object detection reduces false positives and improves the reliability of the security alarm system.
  • Integration Capabilities: The project can add AI analytics to existing security cameras, providing an intelligent detection layer on top of current surveillance.


Watch: Security Alarm System with Ultralytics YOLO26 + Solutions Object Detection

Send Security Alerts with YOLO26#

The SecurityAlarm solution tracks objects in your video feed and sends a single email alert with an annotated image attached as soon as the number of detections meets the records threshold. Authenticate a Gmail account with an app password, then run the solution over your source.

App password required

Navigate to the App Password Generator, designate an app name such as "security project", and obtain a 16-character password. Copy this password and paste it into the password field in the code below.

Security Alarm System using Ultralytics YOLO
import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"

# Video writer
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("security_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

from_email = "abc@gmail.com"  # the sender email address
password = "---- ---- ---- ----"  # 16-character app password generated via: https://myaccount.google.com/apppasswords
to_email = "xyz@gmail.com"  # the receiver email address

# Initialize security alarm object
securityalarm = solutions.SecurityAlarm(
    show=True,  # display the output
    model="yolo26n.pt",  # e.g., yolo26s.pt, yolo26m.pt
    records=1,  # total detections count to send an email
)

securityalarm.authenticate(from_email, password, to_email)  # authenticate the email server

# Process video
while cap.isOpened():
    success, im0 = cap.read()

    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    results = securityalarm(im0)

    # print(results)  # access the output

    video_writer.write(results.plot_im)  # write the processed frame.

cap.release()
video_writer.release()
cv2.destroyAllWindows()  # destroy all opened windows

When you run the code, you will receive a single email notification if any object is detected. The notification is sent immediately, not repeatedly. You can customize the code to suit your project requirements.

Email Received Sample#

Security alert email notification example

SecurityAlarm Arguments#

Here's a table with the SecurityAlarm arguments:

ArgumentTypeDefaultDescription
modelstrNonePath to an Ultralytics YOLO model file.
recordsint5Total detections count to trigger an email with security alarm system.
line_widthint2Line thickness for the boxes, keypoints and counts the solution draws.
verboseboolTrueEnables the solution's per-frame log of input shape, class counts and processing speed. The tracking call itself is always silent.

The SecurityAlarm solution supports a variety of track parameters:

ArgumentTypeDefaultDescription
trackerstr'tracktrack.yaml'Specifies the tracking algorithm to use. Built-in options: botsort.yaml, bytetrack.yaml, ocsort.yaml, deepocsort.yaml, fasttrack.yaml, tracktrack.yaml.
conffloat0.25Sets the confidence threshold for detections; lower values allow more objects to be tracked but may include false positives.
ioufloat0.7Sets the Intersection over Union (IoU) threshold for filtering overlapping detections.
classeslistNoneFilters results by class index. For example, classes=[0, 2, 3] only tracks the specified classes.
devicestrNoneSpecifies the device for inference (e.g., cpu, cuda:0 or 0). Allows users to select between CPU, a specific GPU, or other compute devices for model execution.
imgszint or tuple640Target inference image size: an integer for a square or a (height, width) pair. Shapes are adjusted to the model stride.
max_detint300Maximum number of detections kept per frame before tracking, limiting the objects a solution processes in dense scenes.
quantizeint or strNoneInference precision: 16 (FP16) or 32/unset (FP32) for PyTorch and TorchScript models off CPU; other formats use the precision their artifact and runtime select. Replaces the deprecated half arg.

Moreover, the following visualization settings are available:

ArgumentTypeDefaultDescription
showboolFalseIf True, displays the annotated images or videos in a window. Useful for immediate visual feedback during development or testing.
show_confboolTrueDisplays the confidence score for each detection alongside the label. Gives insight into the model's certainty for each detection.
show_labelsboolTrueDisplays labels for each detection in the visual output. Provides immediate understanding of detected objects.

How It Works#

The Security Alarm System uses object tracking to monitor video feeds and detect potential security threats. When the number of detected objects in a frame reaches the specified threshold (set by the records parameter), it automatically sends an email notification with an image attachment showing the detected objects.

The system leverages the SecurityAlarm class which provides methods to:

  1. Process frames and extract object detections
  2. Annotate frames with bounding boxes around detected objects
  3. Send email notifications when detection thresholds are met

This implementation suits home security, retail surveillance, and other monitoring applications where immediate notification of detected objects is critical.

FAQ#

  • Ultralytics YOLO26 improves security alarm systems by delivering accurate, real-time object detection, which reduces false positives so the system responds mainly to genuine events. You can reduce false alarms further by restricting detection to relevant classes (for example, only people), raising the conf threshold, or increasing records.

  • Yes. The SecurityAlarm solution processes frames from any source OpenCV can read, including video files, webcams, and RTSP streams from IP cameras, so you can add YOLO26 detection to an existing camera setup.

  • Running Ultralytics YOLO26 on a standard setup typically requires around 5GB of free disk space. This includes space for storing the YOLO26 model and any additional dependencies. For cloud-based solutions, Ultralytics Platform offers efficient project management and dataset handling, which can optimize storage needs. The Pro Plan increases storage to 500 GB.

  • Ultralytics YOLO26 provides an edge over models like Faster R-CNN or SSD with its real-time detection capabilities and higher accuracy. Its single-stage architecture processes images much faster without compromising accuracy, making it well suited to time-sensitive applications like security alarm systems.

  • To reduce false positives, ensure your Ultralytics YOLO26 model is adequately trained with a diverse and well-annotated dataset. Tuning hyperparameters and regularly updating the model with new data can significantly improve detection accuracy.

Comments153

Ask a question, share your results, or help someone else.

  1. e9l7a5fe9l7a5fGitHub

    hi, i cant do the email setting, of Sign in with app passwords and the authentication part , it looks like google change the setting i cant find them, is there another way?

    1
    1. Glenn JocherGlenn JocherUltralytics(edited)

      Hey there! 😊 It seems like Google's app password settings have indeed evolved, and I appreciate you reaching out for assistance on this. While the current documentation may reference older interfaces, the essence of setting up app passwords for projects like the Security Alarm System with Ultralytics YOLOv8 remains relevant.

      If you're experiencing difficulties locating the specific options for app passwords on Google, you might consider looking into alternative email sending services that offer API support, such as SendGrid, Mailgun, or even using a local SMTP server setup, depending on your project's complexity and scale.

      For a quick fix using smtplib with Gmail, ensure you've enabled two-factor authentication on your account, and then create an app password here: https://myaccount.google.com/apppasswords.

      Here's a simplified version of how to use an app password:

      import smtplib
      
      EMAIL = "your_email@gmail.com"
      APP_PASSWORD = "your_app_password"
      
      with smtplib.SMTP("smtp.gmail.com", 587) as smtp:
          smtp.starttls()
          smtp.login(EMAIL, APP_PASSWORD)
          subject = "Security Alert"
          body = "Alert description"
          msg = f"Subject: {subject}\n\n{body}"
          smtp.sendmail(EMAIL, "receiver_email@gmail.com", msg)

      Make sure to replace "your_email@gmail.com" and "your_app_password" with your actual Gmail email and the 16-digit app password you generate, respectively.

      It's recommended to review the current Gmail documentation or seek updated guidance if Google's procedures have significantly changed since our last update. Hope this helps! If you have further questions or need more personalized assistance, feel free to ask.

    2. e9l7a5fe9l7a5fGitHub

      thanks for replying, i fix it for the yolov8 as the same steps u explained, now i want to use it on yolov9 but i cant with these steps, because i am using the detect.py and i dont know how to deal with it , where to put each code, i dont have that much background in DL and python codes. the email part is working now

  2. aaurelionsaaurelionsGitHub
    % python3.11 main.py
    Ultralytics Solutions: ✅ {'source': None, 'model': 'yolo11n.pt', 'classes': None, 'show_conf': True, 'show_labels': True, 'region': None, 'colormap': 21, 'show_in': True, 'show_out': True, 'up_angle': 145.0, 'down_angle': 90, 'kpts': [6, 8, 10], 'analytics_type': 'line', 'figsize': (12.8, 7.2), 'blur_ratio': 0.5, 'vision_point': (20, 20), 'crop_dir': 'cropped-detections', 'json_file': None, 'line_width': 2, 'records': 1, 'fps': 30.0, 'max_hist': 5, 'meter_per_pixel': 0.05, 'max_speed': 120, 'show': True, 'iou': 0.7, 'conf': 0.25, 'device': None, 'max_det': 300, 'half': False, 'tracker': 'botsort.yaml', 'verbose': True, 'data': 'images'}
    Traceback (most recent call last):
      File "/Users/llama/Developer/sec/main.py", line 23, in <module>
        securityalarm.authenticate(from_email, password, to_email)  # authenticate the email server
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/llama/.venv/3.11/lib/python3.11/site-packages/ultralytics/solutions/security_alarm.py", line 68, in authenticate
        self.server = smtplib.SMTP("smtp.gmail.com: 587")
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/homebrew/Cellar/python@3.11/3.11.13/Frameworks/Python.framework/Versions/3.11/lib/python3.11/smtplib.py", line 255, in __init__
        (code, msg) = self.connect(host, port)
                      ^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/homebrew/Cellar/python@3.11/3.11.13/Frameworks/Python.framework/Versions/3.11/lib/python3.11/smtplib.py", line 341, in connect
        self.sock = self._get_socket(host, port, self.timeout)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/homebrew/Cellar/python@3.11/3.11.13/Frameworks/Python.framework/Versions/3.11/lib/python3.11/smtplib.py", line 312, in _get_socket
        return socket.create_connection((host, port), timeout,
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/homebrew/Cellar/python@3.11/3.11.13/Frameworks/Python.framework/Versions/3.11/lib/python3.11/socket.py", line 863, in create_connection
        raise exceptions[0]
      File "/opt/homebrew/Cellar/python@3.11/3.11.13/Frameworks/Python.framework/Versions/3.11/lib/python3.11/socket.py", line 848, in create_connection
        sock.connect(sa)
    ConnectionRefusedError: [Errno 61] Connection refused
  3. EQUINOX391EQUINOX391GitHub

    Dear ultralytics team! First of all i really appreciate this amazing works, I'm working on my projects for detecting crime and i aalready have a trained resnet 50 model for detecting some crime as dummy, I really wonder can i integrate the Security Alarm System by Ultralytics in my projects and make it like have this functionality :

    1. have input of CCTV from RTSP
    2. when detecting people (or maybe car, bike, etc) , my resnet model will also detecting what they do, after we know what the activity is, we can send it the email
    3. customize the email messaging like "ALERT 2 people 2 cars detected, Activity Probability : Suspicious - Stealing"
    4. also send different email if the people stays too long in the frame.
    5. keep making new notification IF There's new people(s) inside the frame.
    6. notified if the people or another object is gone from the frame
    7. is there any pretrain model that detect something related to crime like hammer, crowbar, spraying can, grafitti, gun, etc?
    8. is there any pretrain model yolo have for pose estimation? i mean there's some but i don't find anything inside the documentation that said it can estimate some general pose like, squat, stand, walk, run, etc

    i have so many question but i think that is the most of it! Thank you, and sorry for my bad english.

  4. Cheikh-AhmedandCheikh-AhmedandGitHub

    Hi Glenn-jocher!

    I am very appreciative of your help to your clients as i am one of them.

    in onder to integrate security alarm system in an application, using streamlit package, how can i let the end user input their capture_index value and their email:

    st. input_text ( )

    from_email = "@gmail.com" # must match the email used to generate the password

    st. input_text ( )

    detector = ObjectDetection(capture_index=0) detector()

    with examples, please!

    Best regards!

    1. Glenn JocherGlenn JocherUltralytics(edited)

      @Cheikh-Ahmedand thank you for your support! For Streamlit integration, you can collect user inputs like this:

      import cv2
      import streamlit as st
      from ultralytics import solutions
      
      # User inputs
      from_email = st.text_input("Sender Email")
      password = st.text_input("App Password", type="password")
      to_email = st.text_input("Receiver Email")
      capture_source = st.text_input("Camera Index/Video Path", "0")
      
      # Initialize SecurityAlarm with user inputs
      security = solutions.SecurityAlarm(show=True, model="yolo26n.pt", records=1)
      security.authenticate(from_email, password, to_email)
      cap = cv2.VideoCapture(int(capture_source) if capture_source.isdigit() else capture_source)

      The SecurityAlarm implementation details remain as shown in our security alarm system guide. For email setup, ensure users follow the App Password Generator instructions.

    2. Cheikh-AhmedandCheikh-AhmedandGitHub

      Hello there, glenn-jocher!

      Thanks for your nice Help!

      I would like st.input_text for end users for from_emails /to_email and detector = ObjectDetection(capture_index=0) in the below code, not for the code you gave an example on:

      Securiy Alarm System

      password = " " from_email = "@gmail.com" # must match the email used to generate the password to_email = "@gmail.com" # receiver email

      import smtplib server = smtplib.SMTP('smtp.gmail.com: 587') server.starttls() server.login(from_email, password)

      from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage

      def send_email(to_email, from_email, image_path, object_detected=1): """Sends an email with an image attachment.""" message = MIMEMultipart() message["From"] = from_email message["To"] = to_email message["Subject"] = "Security Alert" message_body = f"ALERT - {object_detected} objects have been detected!" message.attach(MIMEText(message_body, "plain")) with open(image_path, 'rb') as img_file: img = MIMEImage(img_file.read()) message.attach(img) server.sendmail(from_email, to_email, message.as_string())

      from time import time

      import cv2 import torch from ultralytics import YOLO from ultralytics.utils.plotting import Annotator, colors

      class ObjectDetection: def init(self, capture_index): """Initializes an ObjectDetection instance with a given camera index.""" self.capture_index = capture_index self.email_sent = False

          # model information
          self.model = YOLO("yolo11n.pt")
      
          # visual information
          self.annotator = None
          self.start_time = 0
          self.end_time = 0
      
          # device information
          self.device = "cuda" if torch.cuda.is_available() else "cpu"
      
      def predict(self, im0):
          """Run prediction using a YOLO model for the input image `im0`."""
          results = self.model(im0, classes=[0])
          return results
      
      def display_fps(self, im0):
          """Displays the FPS on an image `im0` by calculating and overlaying as white text on a black rectangle."""
          self.end_time = time()
          fps = 1 / round(self.end_time - self.start_time, 2)
          text = f"FPS: {int(fps)}"
          text_size = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, 1.0, 2)[0]
          gap = 10
          cv2.rectangle(
              im0,
              (20 - gap, 70 - text_size[1] - gap),
              (20 + text_size[0] + gap, 70 + gap),
              (255, 255, 255),
              -1,
          )
          cv2.putText(im0, text, (20, 70), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 0), 2)
      
      def plot_bboxes(self, results, im0):
          """Plots bounding boxes on an image given detection results; returns annotated image and class IDs."""
          class_ids = []
          self.annotator = Annotator(im0, 3, results[0].names)
          boxes = results[0].boxes.xyxy.cpu()
          clss = results[0].boxes.cls.cpu().tolist()
          names = results[0].names
          for box, cls in zip(boxes, clss):
              class_ids.append(cls)
              self.annotator.box_label(box, label=names[int(cls)], color=colors(int(cls), True))
          return im0, class_ids
      
      def __call__(self):
          """Run object detection on video frames from a camera stream, plotting and showing the results."""
          cap = cv2.VideoCapture(self.capture_index)
          assert cap.isOpened()
          cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
          cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
          frame_count = 0
          while True:
              self.start_time = time()
              ret, im0 = cap.read()
              assert ret
              results = self.predict(im0)
              im0, class_ids = self.plot_bboxes(results, im0)
              if len(class_ids) > 0:
                 image_path = f"detected_frame_{frame_count}.jpg"
                 cv2.imwrite(image_path, im0)
                 if not self.email_sent:
                  send_email(to_email, from_email, image_path, len(class_ids))
                  self.email_sent = True
              else:
                  self.email_sent = False
      
              self.display_fps(im0)
              cv2.imshow("YOLO11 Detection", im0)
              frame_count += 1
              if cv2.waitKey(5) & 0xFF == 27:
                  break
          cap.release()
          cv2.destroyAllWindows()
          server.quit()

      detector = ObjectDetection(capture_index=0) detector()

      would you please give an example of st. input_text for end users letting them write their emails and capture_index on the above code?

      Sincerely Yours!

    3. Glenn JocherGlenn JocherUltralytics

      Thank you for your question! For Streamlit integration with user inputs in your security system, here's how to modify your code:

      import streamlit as st
      
      # User inputs
      from_email = st.text_input("Sender Email")
      to_email = st.text_input("Receiver Email")
      password = st.text_input("App Password", type="password")
      capture_index = st.text_input("Camera Index/Video Path", "0")
      
      # Initialize detector with user inputs
      detector = ObjectDetection(capture_index=int(capture_index) if capture_index.isdigit() else capture_index)

      This allows users to specify their email credentials and camera source through Streamlit's interactive interface. The Security Alarm System guide shows how these inputs integrate with YOLO11's detection capabilities. For email setup requirements, please ensure users follow the App Password Generator instructions from our security alarm documentation.

    4. boukoshoboukoshoGitHub

      Hey glenn-jocher!

      As you know, ML models need frequent check so as their data remain undriffed and their distribution remain unchanged.

      To frequently monitor deployed ml models by streamlit in case it is deployed to aws ec2, Google Cloud, or streamlit community cloud or in local server, what should I do ?

      Please give an example!

      Thanks!

    5. Glenn JocherGlenn JocherUltralytics(edited)

      @boukosho for monitoring deployed YOLO11 models across cloud platforms, consider implementing a heartbeat system with performance metrics logging. Our Security Alarm System guide shows email alert integration that could be adapted for drift detection notifications. For production deployments, Ultralytics Platform provides monitoring for deployed endpoints; see the Platform monitoring documentation. A minimal implementation might track inference statistics and trigger alerts via our solutions.SecurityAlarm class when thresholds are exceeded.

  5. Cheikh-AhmedandCheikh-AhmedandGitHub

    Hello there glenn-jocher!

    Thanks for your respectful responses!

    If I want the alarm system to only notify me when it is confident of more than 0.3 % .

    So how to do it, with examples, please!

     # model information
    
        self.model = YOLO("yolo11.pt")
    
        # visual information
    
        self.annotator = None
    
        self.start_t        ime = 0
    
        self.end_time = 0
    
    
        # device information
    
        self.device = "cuda" if torch.cuda.is_available() else "cpu"
    
    
    def predict(self, im0):
    
        """Run prediction using a YOLO model for the input image `im0`."""
    
        results = self.model(im0, classes=[0])
    
         return results

    Sincelrely Yours!

    1. Glenn JocherGlenn JocherUltralytics(edited)

      @Cheikh-Ahmedand to adjust the confidence threshold in your security alarm system, set the conf argument when initializing the solution. For example:

      security = solutions.SecurityAlarm(model="yolo26n.pt", conf=0.5)  # only detections above 0.5 confidence

      This ensures notifications only trigger for detections exceeding your specified confidence level. For more details, refer to the Security Alarm System guide.

    2. Cheikh-AhmedandCheikh-AhmedandGitHub

      hey!

      Thanks glenn-jocher for your respectful response.

      security = solutions.SecurityAlarm(model="yolo11n.pt", conf=0.5) # Set confidence threshold >0.3 security.model.conf = 0.5 # Alternative direct method

      N.B, I would like to add conf=0.5 for the below function (self.model = YOLO("yolo11n.pt"), not for the above one

      class ObjectDetection:

      def __init__(self, capture_index):
      
          """Initializes an ObjectDetection instance with a given camera index."""
      
          self.capture_index = capture_index
      
          self.email_sent = False
      
          # model information
      
          self.model = YOLO("yolo11n.pt")
         

      visual information

          self.annotator = None
      
          self.start_time = 0
      
          self.end_time = 0
      
          # device information
      
          self.device = "cuda" if torch.cuda.is_available() else "cpu"

      How to do so with examples, please!

      Sincerely Yours!

    3. Glenn JocherGlenn JocherUltralytics(edited)

      @Cheikh-Ahmedand in your own ObjectDetection class, pass conf when you run inference rather than when loading the model:

      self.model = YOLO("yolo26n.pt")
      results = self.model.predict(im0, conf=0.5)

      For more details on model arguments, see the Predict mode documentation.

    4. Cheikh-AhmedandCheikh-AhmedandGitHub

      Hey glenn- jocher!

      Thanks lots for your respectful response.

      self.model = YOLO("yolo11n.pt", task="detect").set({"conf": 0.5})

      When i run the above code, an error has been occured:

      (AttributeError: 'DetectionModel' object has no attribute 'set')

      What should i do instead? With examples, Please.

      Best Regards!

    5. Glenn JocherGlenn JocherUltralytics

      To set the confidence threshold in your custom ObjectDetection class, modify your predict method like this:

      def predict(self, im0):
          results = self.model.predict(im0, classes=[0], conf=0.5)  # Add conf here
          return results

      The conf parameter should be passed during inference rather than model initialization. For more details on prediction arguments, see the Predict mode documentation.

  6. boukoshoboukoshoGitHub

    Hello there! What do you mean by the below function?

    cap = cv2.VideoCapture("Path/to/video/file.mp4") assert cap.isOpened(), "Error reading video file"

    Namely, I have a Webcam or the laptop camera or dvr/nvr cameras and I want to attach them to the above function. How to do so? With examples, please!! . Sincerely Yours!

    1. Glenn JocherGlenn JocherUltralytics(edited)

      To use your webcam or camera stream with OpenCV's VideoCapture, replace the file path with:

      • 0 for default laptop camera (e.g., cap = cv2.VideoCapture(0))
      • RTSP URL for network cameras (e.g., cap = cv2.VideoCapture("rtsp://username:password@camera_ip:port/stream"))

      For DVR/NVR cameras, use your camera's RTSP stream URL. See OpenCV VideoCapture docs for more input formats.

  7. boukoshoboukoshoGitHub

    Hay!

    Glenn-jocher I asked you questions here, you haven't answered me yet? Do you still respond kindly to questions regarding yolo security alarm system here? Or you no longer do so?

    Best Regards!

    1. boukoshoboukoshoGitHub

      Hello there! What do you mean by the below function?

      cap = cv2.VideoCapture("Path/to/video/file.mp4") assert cap.isOpened(), "Error reading video file"

      Namely, I have a Webcam or the laptop camera or dvr/nvr cameras and I want to attach them to the above function. How to do so? With examples, please!! . Sincerely Yours!

    2. Glenn JocherGlenn JocherUltralytics(edited)

      To use your webcam, laptop camera, or DVR/NVR cameras with cv2.VideoCapture, modify the source argument:

      1. Webcam/Laptop Camera:
        cap = cv2.VideoCapture(0) (0 for default camera, 1 for secondary, etc.)

      2. IP/DVR/NVR Cameras:
        Use RTSP/HTTP stream URLs like:
        cap = cv2.VideoCapture("rtsp://username:password@camera_ip:port/stream")

      The rest of the security alarm code remains unchanged. Ensure your camera feed is accessible and credentials are correctly formatted in URLs. For more details on video sources, see our Object Detection and Tracking guide.

  8. boukoshoboukoshoGitHub

    Hello there! What do you mean by the below function?

    cap = cv2.VideoCapture("Path/to/video/file.mp4") assert cap.isOpened(), "Error reading video file"

    Namely, I have a Webcam or the laptop camera or dvr/nvr cameras and I want to attach them to the above function. How to do so? With examples, please!! . Sincerely Yours!

    1. Glenn JocherGlenn JocherUltralytics(edited)

      For webcam/laptop camera use cap = cv2.VideoCapture(0) (0=default camera index). For IP cameras, use an RTSP URL like cap = cv2.VideoCapture("rtsp://username:password@camera_ip:port/path"). The assert checks if the video source opens successfully. You can find specific camera URL formats in your DVR/NVR documentation.

  9. andrewjang2234andrewjang2234GitHub

    Traceback (most recent call last): File "C:\Users\User\class-iot\apps\iot07\security.py", line 17, in server.login(from_email, password) File "C:\Users\User\miniconda3\envs\class-iot061\lib\smtplib.py", line 750, in login raise last_exception File "C:\Users\User\miniconda3\envs\class-iot061\lib\smtplib.py", line 739, in login (code, resp) = self.auth( File "C:\Users\User\miniconda3\envs\class-iot061\lib\smtplib.py", line 662, in auth raise SMTPAuthenticationError(code, resp) smtplib.SMTPAuthenticationError: (534, b'5.7.9 Application-specific password required. For more information, go to\n5.7.9 https://support.google.com/mail/?p=InvalidSecondFactor 41be03b00d2f7-7fd430cec7bsm8095565a12.67 - gsmtp')

    I don't know why this error is keep causing.......... what is the problem?

    1. Glenn JocherGlenn JocherUltralytics

      @andrewjang2234 to use your laptop's camera, set the capture_index parameter in the ObjectDetection class to 0 (e.g., ObjectDetection(capture_index=0)). This should automatically access your default webcam. If issues persist, ensure your camera is not being used by another application.

  10. andrewjang2234andrewjang2234GitHub

    I have a question. what exactly 'to_email' is? 'from_email' is my main emial, and 'password' is 'from_email's password and what is to_email?

    1. Glenn JocherGlenn JocherUltralytics

      @andrewjang2234 the to_email refers to the recipient's email address where the alert or notification will be sent. If you have further questions about this setup, feel free to ask!