Security Alarm System Project Using Ultralytics YOLO26#
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.
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.
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 windowsWhen 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#
SecurityAlarm Arguments#
Here's a table with the SecurityAlarm arguments:
| Argument | Type | Default | Description |
|---|---|---|---|
model | str | None | Path to an Ultralytics YOLO model file. |
records | int | 5 | Total detections count to trigger an email with security alarm system. |
line_width | int | 2 | Line thickness for the boxes, keypoints and counts the solution draws. |
verbose | bool | True | Enables 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:
| Argument | Type | Default | Description |
|---|---|---|---|
tracker | str | 'tracktrack.yaml' | Specifies the tracking algorithm to use. Built-in options: botsort.yaml, bytetrack.yaml, ocsort.yaml, deepocsort.yaml, fasttrack.yaml, tracktrack.yaml. |
conf | float | 0.25 | Sets the confidence threshold for detections; lower values allow more objects to be tracked but may include false positives. |
iou | float | 0.7 | Sets the Intersection over Union (IoU) threshold for filtering overlapping detections. |
classes | list | None | Filters results by class index. For example, classes=[0, 2, 3] only tracks the specified classes. |
device | str | None | Specifies 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. |
imgsz | int or tuple | 640 | Target inference image size: an integer for a square or a (height, width) pair. Shapes are adjusted to the model stride. |
max_det | int | 300 | Maximum number of detections kept per frame before tracking, limiting the objects a solution processes in dense scenes. |
quantize | int or str | None | Inference 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:
| Argument | Type | Default | Description |
|---|---|---|---|
show | bool | False | If True, displays the annotated images or videos in a window. Useful for immediate visual feedback during development or testing. |
show_conf | bool | True | Displays the confidence score for each detection alongside the label. Gives insight into the model's certainty for each detection. |
show_labels | bool | True | Displays 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:
- Process frames and extract object detections
- Annotate frames with bounding boxes around detected objects
- 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 theconfthreshold, or increasingrecords.Yes. The
SecurityAlarmsolution 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.
e9l7a5f
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
Glenn 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
smtplibwith 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.
e9l7a5f
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
Glenn JocherUltralytics(edited)@e9l7a5f you can use YOLOv9 models the same way as you currently use YOLOv8 models; see https://docs.ultralytics.com/models/yolov9. For new projects we recommend YOLO26: https://docs.ultralytics.com/models/yolo26/.
aaurelions
% 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 refusedRizwanMunawar
@aaurelions Hi, thanks for sharing it. You will need to configure the parameters first by following the docs: https://docs.ultralytics.com/guides/security-alarm-system/
1
EQUINOX391
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 :
- have input of CCTV from RTSP
- 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
- customize the email messaging like "ALERT 2 people 2 cars detected, Activity Probability : Suspicious - Stealing"
- also send different email if the people stays too long in the frame.
- keep making new notification IF There's new people(s) inside the frame.
- notified if the people or another object is gone from the frame
- is there any pretrain model that detect something related to crime like hammer, crowbar, spraying can, grafitti, gun, etc?
- 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.
Cheikh-Ahmedand
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!
Glenn 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.
Cheikh-Ahmedand
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!
Glenn JocherUltralyticsThank 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.
boukosho
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!
Glenn 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.
Cheikh-Ahmedand
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 resultsSincelrely Yours!
Glenn JocherUltralytics(edited)@Cheikh-Ahmedand to adjust the confidence threshold in your security alarm system, set the
confargument when initializing the solution. For example:security = solutions.SecurityAlarm(model="yolo26n.pt", conf=0.5) # only detections above 0.5 confidenceThis ensures notifications only trigger for detections exceeding your specified confidence level. For more details, refer to the Security Alarm System guide.
Cheikh-Ahmedand
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!
Glenn JocherUltralytics(edited)@Cheikh-Ahmedand in your own
ObjectDetectionclass, passconfwhen 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.
Cheikh-Ahmedand
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!
Glenn JocherUltralyticsTo set the confidence threshold in your custom
ObjectDetectionclass, modify yourpredictmethod like this:def predict(self, im0): results = self.model.predict(im0, classes=[0], conf=0.5) # Add conf here return resultsThe
confparameter should be passed during inference rather than model initialization. For more details on prediction arguments, see the Predict mode documentation.
boukosho
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!
Glenn JocherUltralytics(edited)To use your webcam or camera stream with OpenCV's
VideoCapture, replace the file path with:0for 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.
boukosho
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!
Glenn JocherUltralytics@boukosho hi! We're happy to help with YOLO security alarm system questions. Our comprehensive Security Alarm System guide at https://docs.ultralytics.com/guides/security-alarm-system/ provides complete implementation code and documentation. For specific issues, feel free to open a GitHub Discussion with details about your implementation and we'll assist there. 😊
boukosho
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!
Glenn JocherUltralytics(edited)To use your webcam, laptop camera, or DVR/NVR cameras with
cv2.VideoCapture, modify the source argument:-
Webcam/Laptop Camera:
cap = cv2.VideoCapture(0)(0 for default camera, 1 for secondary, etc.) -
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.
-
boukosho
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!
Glenn JocherUltralytics(edited)For webcam/laptop camera use
cap = cv2.VideoCapture(0)(0=default camera index). For IP cameras, use an RTSP URL likecap = cv2.VideoCapture("rtsp://username:password@camera_ip:port/path"). Theassertchecks if the video source opens successfully. You can find specific camera URL formats in your DVR/NVR documentation.
andrewjang2234
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?
andrewjang2234
sorry I sovle that problem if I want to use my laptob cam what do I have to do?
Glenn JocherUltralytics@andrewjang2234 to use your laptop's camera, set the
capture_indexparameter in theObjectDetectionclass to0(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.
andrewjang2234
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?
Glenn JocherUltralytics@andrewjang2234 the
to_emailrefers 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!