中文 · 한국어 · 日本語 · Русский · Deutsch · Français · Español · Português · Türkçe · Tiếng Việt · العربية
Documentation Ultralytics YOLO#
Ultralytics YOLO est une famille de modèles de vision par ordinateur en temps réel pour la détection d’objets, la segmentation d’instances, la segmentation sémantique, l’estimation de la profondeur, la classification, l’estimation de pose, les boîtes englobantes orientées et le suivi, disponible via un seul paquet Python et une seule CLI. YOLO26 s’appuie sur les avancées récentes de la recherche en apprentissage profond, avec une inférence de bout en bout facultativement sans NMS et un déploiement optimisé sur les appareils edge. Sa conception épurée s’adapte à un large éventail d’applications et de matériel, des appareils edge aux API cloud. Pour les charges de travail de production stables, YOLO26 et YOLO11 sont tous deux recommandés.
Explore la documentation Ultralytics, une ressource complète couvrant le paquet YOLO et la CLI, ainsi que l’Ultralytics Platform, qui ajoute l’annotation des données, l’entraînement dans le cloud et le déploiement aux mêmes modèles. Que tu sois un spécialiste chevronné de l’apprentissage automatique ou que tu sois nouveau dans ce domaine, ces ressources t’aident à tirer le meilleur parti de YOLO dans tes projets.
Demande une licence Enterprise pour un usage commercial auprès de Ultralytics Licensing.
Explore l’aperçu de YOLO27, avec des détails sur l’architecture, des benchmarks préliminaires et des exemples d’utilisation après sa sortie. Les modèles font l’objet des derniers travaux de R&D en vue d’un lancement prévu plus tard cette année ; ils ne sont pas encore disponibles et aucune date de lancement n’a été fixée.
Transforme une seule photo en carte de profondeur, avec une distance en mètres pour chaque pixel.
Démarre en deux commandes#
# Install the ultralytics package from PyPI
pip install ultralytics
# Detect objects in an image with a pretrained YOLO26 model
yolo predict model=yolo26n.pt source='https://github.com/ultralytics/assets/releases/download/v0.0.0/bus.jpg'Les poids du modèle et l’image d’exemple sont téléchargés automatiquement, et le résultat annoté est enregistré dans le répertoire indiqué par la commande, runs/detect/predict lors de la première exécution.
Consulte le guide de démarrage rapide pour découvrir toutes les méthodes d’installation et effectuer ta première prédiction.
Que veux-tu faire ?#
Ajuste un modèle YOLO26 préentraîné sur ton propre jeu de données, en réglant l’augmentation et les hyperparamètres pour l’entraînement multi-GPU.
Charger un modèle préentraîné et obtenir des boîtes englobantes, des masques ou des points clés en quelques lignes de Python ou avec une seule commande CLI
Suivre des objets avec des ID persistants à l’aide de TrackTrack (par défaut), BoT-SORT, ByteTrack, OC-SORT, Deep OC-SORT ou FastTracker
Applications de vision prêtes à l’emploi pour le comptage d’objets, les cartes thermiques, la gestion des files d’attente, les alertes de sécurité et les entraînements, sans entraînement nécessaire
Exporter des modèles entraînés vers ONNX, TensorRT ou OpenVINO pour une inférence rapide sur les appareils périphériques, le matériel mobile et les serveurs cloud
Comparer YOLO26, YOLO11, SAM 3, RT-DETR et toutes les autres architectures prises en charge en fonction de la vitesse, de la précision et du cas d’usage
Consulter les classes, fonctions et signatures de méthodes de l’API Python, générées automatiquement à partir du code source à chaque nouvelle version
La dernière famille de modèles publiée par Ultralytics offre une inférence de bout en bout sans NMS facultative et un meilleur compromis entre précision et latence que YOLO11
Organisation de cette documentation#
La plupart des commandes de yolo pour les flux de travail des modèles suivent une même syntaxe, yolo [TASK] MODE ARGS, où Task est facultatif. Cette documentation s’organise autour des mêmes trois éléments, auxquels s’ajoute un raccourci :
- Task répond à la question quoi extraire d’une image : détection, segmentation d’instances, segmentation sémantique, estimation de profondeur, classification, estimation de pose ou boîtes orientées.
- Mode répond à la question comment utiliser un modèle : l’entraîner, le valider, effectuer une prédiction, l’exporter, effectuer un suivi ou le comparer à l’aide d’un benchmark.
- Arguments configure la commande, du modèle à exécuter avec
model=aux hyperparamètres commeepochsetimgsz. - Solutions est le raccourci : une application prête à l’emploi, comme le comptage d’objets ou une alarme de sécurité, qui ignore complètement Task et Mode.
Tout le reste complète cette syntaxe : Modèles répertorie toutes les architectures que tu peux transmettre à model= — YOLO26, YOLO11, SAM 3, RT-DETR et d’autres —, Jeux de données fournit les données utilisées pour entraîner chaque Task, Guides rassemble des tutoriels détaillés sur le déploiement matériel, le réglage des hyperparamètres, la conversion des jeux de données et les parcours complets de projets, Intégrations connecte le pipeline aux outils d’entraînement et de déploiement que tu utilises déjà, et la section Référence documente chaque classe et fonction de l’API Python.
En plus du package Python, deux autres interfaces reposent sur les mêmes modèles : la plateforme Ultralytics pour l’annotation, l’entraînement et le déploiement dans le cloud, ainsi qu’Ultralytics Inference, une bibliothèque Rust autonome et une CLI permettant d’exécuter des modèles exportés sans environnement d’exécution Python.
Licences YOLO : quelle est la licence d’Ultralytics YOLO ?#
Ultralytics propose deux options de licence pour répondre à divers cas d’usage :
- Licence AGPL-3.0 : cette licence open source approuvée par l’OSI est idéale pour les étudiants et les passionnés ; elle encourage la collaboration ouverte et le partage des connaissances. Consulte le fichier LICENSE pour en savoir plus.
- Licence Entreprise : pour le développement et l’utilisation en production, cette licence permet d’intégrer les logiciels et modèles d’IA Ultralytics dans des produits et services commerciaux, notamment des outils internes, des flux de travail automatisés et des déploiements en production, sans être soumis aux exigences open source d’AGPL-3.0. Pour commencer, contacte-nous via Ultralytics Licensing.
Notre stratégie de licence vise à garantir que toute amélioration apportée à nos projets open source soit reversée à la communauté. Nous croyons à l’open source, et notre mission est de faire en sorte que nos contributions puissent être utilisées et enrichies au bénéfice de tous.
FAQ#
Ultralytics YOLO est une famille de modèles You Only Look Once (YOLO) en temps réel pour la détection d’objets et la segmentation d’images. Le dernier modèle publié, YOLO26, s’appuie sur les versions précédentes en introduisant une inférence de bout en bout facultativement sans NMS et un déploiement optimisé sur les appareils edge. YOLO prend en charge diverses tâches d’IA visuelle, comme la détection, la segmentation d’instances, la segmentation sémantique, l’estimation de la profondeur, la classification, l’estimation de pose et les boîtes englobantes orientées, et peut suivre les objets détectés d’une image vidéo à l’autre. Son architecture efficace équilibre vitesse et précision, ce qui la rend adaptée aux applications allant des appareils edge aux API cloud.
Pour commencer avec YOLO, rien de plus simple. Installe le package Ultralytics depuis pip avec
pip install ultralytics, puis effectue ta première prédiction avecyolo predict model=yolo26n.pt: les poids du modèle sont téléchargés automatiquement. Pour des instructions complètes sur conda, Docker et l’installation à partir des sources, consulte la page de démarrage rapide.L’entraînement d’un modèle YOLO personnalisé sur ton jeu de données comporte trois étapes :
- Prépare ton jeu de données annoté et décris-le dans un fichier YAML de jeu de données.
- Charge un modèle préentraîné, par exemple
YOLO("yolo26n.pt")en Python. - Lance l’entraînement avec
model.train(data="path/to/dataset.yaml", epochs=100, imgsz=640)ou, depuis la ligne de commande, avecyolo detect train data=path/to/dataset.yaml epochs=100 imgsz=640.
Pour découvrir la procédure détaillée, consulte notre guide Entraîner un modèle, qui comprend des exemples et des conseils pour optimiser ton processus d’entraînement.
Ultralytics propose deux options de licence pour YOLO :
- Licence AGPL-3.0 : cette licence open source est idéale pour un usage éducatif et non commercial et encourage la collaboration ouverte.
- Licence Enterprise : destinée au développement et à la production, notamment aux outils internes, aux flux de travail automatisés et aux déploiements en production, sans être soumise aux exigences open source de l’AGPL-3.0.
Pour en savoir plus, consulte notre page Licences.
Ultralytics YOLO prend en charge un suivi multi-objets efficace et personnalisable. Appelle
YOLO("yolo26n.pt").track(source="path/to/video.mp4")en Python ou exécuteyolo track source=path/to/video.mp4depuis la ligne de commande : les deux fonctionnent avec des fichiers vidéo, des flux en direct et les images d’une webcam. Pour découvrir comment configurer et exécuter le suivi d’objets, consulte notre documentation sur le mode Track, qui présente la configuration et les applications pratiques en temps réel.
Commentaires689
Pose une question, partage tes résultats ou aide quelqu’un d’autre.
Glenn JocherUltralyticsHi everyone 👋! I created this new comments section in our Docs 📚 so you can provide feedback! Tell us what you like and what you don't like, and we'll do our best to improve the Docs to be more informative and helpful for everyone. Thank you 🙏
11torkiasalem
which activation function do we use in the output layer of yolov8 ?
saydek217
I think it is a SiLU activation function based on the "modules.py" file in the source code. waiting for confirmation ofc, meanwhile you can take a look on the superb work of RangeKing here: https://github.com/ultralytics/ultralytics/issues/189
1torkiasalem
I think In YOLOv8, the default activation function used is the LeakyReLU function. Check this tutorial Understanding Hyper-parameter-tuning of YOLO’s
Glenn JocherUltralyticsnn.SiLU() is the default YOLOv8 activation, but it is not used in output layers, only internally after convolution + BN layers. Externally outputs are either in logits or pass through Sigmoid() activations.
AmeerAlahmadi
can you please explain how to convert yolov8 to edgetpu to be used with coral usb accelerator and raspberry pi 4?
Glenn JocherUltralytics@AmmerAlahmadi sure! You can start with just
yolo export model=yolov8n.pt format=edgetpu. See https://docs.ultralytics.com/modes/export/ for details. Once export is complete you'll see usage examples for running prediction with your export Edge TPU model.AmeerAlahmadi
Great! Thanks a lot for your kind reply, I really appreciate it.
ndnesh
Has anyone tested the Nvidia A16 against MultiGPU training? I have 1 Nvidia A16 (note that it's a GPU which has 4x A2 cores on each Physical board). And when trying with Multi-GPU training, even with the default models/ code given above, it fails and crashes my server.
Paula DerrengerUltralytics@ndnesh i'm sorry to hear you're experiencing issues with Multi-GPU training on the Nvidia A16. We haven't received similar reports yet. Could you please open a new issue on the Ultralytics YOLOv8 GitHub repo with the error logs and details about your setup? This will help us diagnose the problem and provide a solution. Make sure to include information such as the command you're running, the output leading up to the crash, and any modifications you've made to the code or environment. 🛠️
zoegrace23
Really appreciate the effort on this! The yolov8 documentation has come a long way—it's clear and beginner-friendly, which makes experimenting with new features much easier.
1
Glenn JocherUltralyticsThank you for the kind words about the documentation! However, I'd like to point you to our official documentation at docs.ultralytics.com which is the most up-to-date and comprehensive resource for YOLOv8. We're constantly working to improve it and make it more accessible for users at all levels. Your feedback helps us continue to enhance the experience!
panjonsen
我需要c#调用的话需要如何去做
1
Paula DerrengerUltralytics您好!😊 如果您想在C#环境中调用YOLOv8模型,建议导出模型到ONNX格式,然后使用比如Microsoft.ML.OnnxRuntime库来加载和使用ONNX模型。
这里有一个基本步骤示例:
-
导出模型到ONNX格式: 使用CLI命令:
yolo export model=yolov8n.pt format=onnx -
在C#中使用ONNX Runtime加载和使用模型:
using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; // 加载模型 var session = new InferenceSession("path_to_your_model.onnx"); // 创建一个输入张量 var inputMeta = session.InputMetadata; var inputTensor = new DenseTensor<float>(new[] {1, 3, 640, 640}); // 假设输入是1x3x640x640 // 创建一个名字到张量的映射,并进行预测 var inputs = new List<NamedOnnxValue> { NamedOnnxValue.CreateFromTensor("input_name", inputTensor) }; // 运行模型 using (var results = session.Run(inputs)) { // 从results中获取您的输出 }
请确保将
"path_to_your_model.onnx"替换为您的ONNX模型的实际路径,同时根据您的模型输入适当调整输入张量的形状。希望这有助于您开始!如果有任何其他问题或需要进一步的帮助,欢迎随时提问。
-1-
deepaks11
Can I train the face emotion dataset in yolov8
1RizwanMunawar
@deepaks11! What I understood from your question is that you want to train ultralytics YOLOv8 for face emotion detection. If this is the case, then yes you can use the YOLOv8 for face emotions detection.
For more details, you can take a look at ultralytics documentation!
noocap
import cv2 as cv import numpy as np from PIL import ImageGrab from ultralytics import YOLO
modelo = YOLO('last.pt') def janela(): while (True):
screen = np.array(ImageGrab.grab()) screen = cv.cvtColor(src=screen, code=cv.COLOR_BGR2RGB)
modelo.predict(screen, show=True)janela()
Could someone help me in a way to get the wy position of the center of the box?
I've tried a lot of things but I still haven't been successful.
1
Glenn JocherUltralytics(modifié)@noocap certainly! To obtain the y-coordinate of the center of the bounding box, you can use the
resultsobject returned by thepredict()method. Theresultsobject contains aBoxesattribute, which holds the bounding box coordinates in various formats, includingxyxy(xmin, ymin, xmax, ymax) andxywh(x-center, y-center, width, height).Here's how you can modify your
janela()function to get the y-coordinate of the center of each detected box:import cv2 as cv import numpy as np from PIL import ImageGrab from ultralytics import YOLO # Load the model model = YOLO('last.pt') def janela(): while True: # Capture the screen screen = np.array(ImageGrab.grab()) # Convert the screen capture to the correct color format screen = cv.cvtColor(screen, cv.COLOR_BGR2RGB) # Run prediction results = model.predict(screen) # Iterate over the detected boxes for box in results[0].boxes: # Get the y-coordinate of the center of the box xc, yc, w, h = box.xywh[0] print(f'Center Y-coordinate: {yc}') # If you want to visualize the results annotated_frame = results[0].plot() cv.imshow('YOLOv8 Prediction', annotated_frame) if cv.waitKey(1) == ord('q'): # Press 'q' to quit break janela()In this code snippet,
box.xywh[0]retrieves the bounding box inxywhformat for each detection, andycrepresents the y-coordinate of the center of the box. Theprintstatement outputs the y-coordinate to the console.Remember to handle the window display and breaking out of the loop appropriately if you're showing the predictions with
cv.imshow(). Thecv.waitKey(1)function is used to capture keyboard input, allowing you to exit the loop by pressing 'q'.
agungmrf
hello, here I am doing research using Yolov8 to detect the sign language alphabet. but to display output in the form of sound or text to speech it still doesn't work, can anyone help?
the following is the code
import torch import cv2 from numpy import ndarray as nd from ultralytics import YOLO
model = YOLO('models/best.pt')
Set the camera capture properties
cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
Set the desired frame rate
frame_rate = 30 delay = int(1000 / frame_rate)
while cap.isOpened(): ret, frame = cap.read()
results = model(frame) cv2.imshow('Detection-Bisindo', nd.squeeze(results[0].plot())) if cv2.waitKey(delay) & 0xFF == ord('q'): breakcap.release() cv2.destroyAllWindows()
1
Glenn JocherUltralytics@agungmrf hello! It's great to hear that you're using YOLOv8 for sign language detection. To add text-to-speech functionality to your code, you can use Python's
gttslibrary (Google Text-to-Speech) orpyttsx3for offline text-to-speech conversion. Below is an example of how you can integrategttsinto your existing code:First, install the
gttslibrary if you haven't already:pip install gttsThen, modify your code to include text-to-speech functionality:
import torch import cv2 from numpy import ndarray as nd from ultralytics import YOLO from gtts import gTTS import os model = YOLO('models/best.pt') # Set the camera capture properties cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) # Set the desired frame rate frame_rate = 30 delay = int(1000 / frame_rate) def speak(text): tts = gTTS(text=text, lang='en') tts.save('output.mp3') os.system('start output.mp3') while cap.isOpened(): ret, frame = cap.read() results = model(frame) # Assuming your model's results contain the class names of detected signs for result in results: if result.boxes: labels = result.boxes.cls # Get the class names using the labels class_names = [model.names[i] for i in labels] # Speak out the first detected class name for simplicity if class_names: speak(class_names[0]) break # Only speak the first detected sign per frame cv2.imshow('Detection-Bisindo', nd.squeeze(results[0].plot())) if cv2.waitKey(delay) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()This code snippet uses
gttsto convert the detected class name into speech. It saves the speech as an MP3 file and then plays it using the default media player. Note that this is a simple implementation and will speak out the name of the first detected class in each frame. You might want to add additional logic to handle multiple detections or to prevent the same sign from being spoken repeatedly.If you prefer an offline solution, you can use
pyttsx3instead, which doesn't require an internet connection. Install it using:pip install pyttsx3And use the
speakfunction like this:import pyttsx3 engine = pyttsx3.init() def speak(text): engine.say(text) engine.runAndWait()Replace the
speakfunction in the previous code with this one, and you'll have offline text-to-speech functionality.I hope this helps! If you have any further questions or need assistance with your project, feel free to ask.
H-Tudor
I have trained a yolov8n model (on 3 classes) and need to run it in the most efficient way. After researching TVM's compilation I was stuck with a numpy array of 1x7x8400. My question is how to interpret this array as to get the bounding boxes/ classes and confidence. Thanks in advance.
PS: I could use more documentation on the inference process (besides the "Predict" page) and its output, where could i find it?
1H-Tudor(modifié)
For anyone with the same issue as i had, I found the answer 6 Months later buried in the examples
Theory:
- yolov5 has an output of shape (batchSize, 25200, 85) (Num classes + box[x,y,w,h] + confidence[c])
- yolov8 has an output of shape (batchSize, 84, 8400) (Num classes + box[x,y,w,h])
My yolo model has an output of 1x7x8400:
- 1 = batch size for single image inference
- 7 = 3 classes + 4 params (x, y, w, h)
- 8400 = subdivisions I suppose (must be concatenated using NMS)
C++ decoder can be found at: ultralytics/examples/YOLOv8-CPP-Inference/inference.cpp/Inference::runInference I encourage reading these examples and also some modification of the .cpp and .h is required
Paula DerrengerUltralytics(modifié)@H-Tudor i'm glad to hear you found the solution to your issue! 🎉 The output shape you've described is indeed the raw predictions from the model, which include the bounding box coordinates and the per-class scores (YOLOv8 has no separate objectness score).
For interpreting the output array, you typically need to apply a post-processing step, such as Non-Maximum Suppression (NMS), to filter out overlapping boxes and select the most probable detections.
Regarding additional documentation on the inference process and its output, the best place to look would be the Ultralytics YOLOv8 GitHub repository, specifically within the
examplesdirectory, as you've already discovered. The C++ inference example you mentioned is a great resource for understanding how to decode the raw model output.If you have further questions or need more assistance, feel free to open an issue in the GitHub repository, and the community will be happy to help. Keep in mind that the repo is continuously updated, so staying tuned for any new documentation or examples is always a good idea.
Happy coding with YOLOv8! 🚀
1complete-dope
@petergreis Could you please give a detailed output for the 8400 ? like the actual breakdown !!
I have seen it at lot of places and many are confused ... could you please solve that !!
raniasyed
Hi, I am making an object detection system with YOLOv8 with a custom dataset, I have a trained model named best.pt The problem is I need to deploy this model on flask to use the webcam. I am unable to do that with yolov8 as it gives a lot of errors. Please help me with it
1sam-a-d
If you visit model.py in ultralytics, you can see the following line where they defined the resources themselves, the code is
Define the trainable function with allocated resources
trainable_with_resources = tune.with_resources(_tune, {'cpu': 8, 'gpu': gpu_per_trial if gpu_per_trial else 0})
so yo can override the no of cpu in your own going to the main method as this method does not get cpu values as a parameter.
sam-a-d
sorry for my previous reply, I meant to put this somewhere else.
flashzzz
Can you provide more details on the specific errors you're facing?
raniasyed
Hi, the error that I am facing says that: cv2.error: opencv(4.7.0) d:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp:692: error: (-2:unspecified error) could not find a writer for the specified extension in function 'cv::imwrite_' I have tried updating the opencv version, im using only the jpg format, but i still cant seem to find the error.
flashzzz
can you provide the code snippet
raniasyed
@app.route("/") def index(): return render_template('index.html')
@app.route("/", methods=["GET", "POST"]) def predict_img(): if request.method == "POST": if 'file' in request.files: f = request.files['file'] basepath = os.path.dirname(file) filepath = os.path.join(basepath, 'uploads', f.filename) print("upload folder is ", filepath) f.save(filepath) global imgpath
predict_img.imgpath = f.filename print("printing predict_img :::::: ", predict_img) file_extension = f.filename.rsplit('.', 1)[1].lower() if file_extension == 'jpg': img = cv2.imread(filepath) frame = cv2.imencode('.jpg', cv2.UMat(img))[1].tobytes() print('Hello') image = Image.open(io.BytesIO(frame)) yolo = YOLO('best.pt') detections = yolo.predict(image, save=True) #return display(f.filename) elif file_extension == 'mp4': video_path = filepath cap = cv2.VideoCapture(video_path) frame_width = int(cap.get(cv2.get(cv2.CAP_PROP_FRAME_WIDTH))) frame_height = int(cap.get(cv2.get(cv2.CAP_PROP_FRAME_HEIGHT))) fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter('output.mp4', fourcc, 30.0, (frame_width, frame_height)) model = YOLO('best.pt') while cap.isOpened(): ret, frame = cap.read() if not ret: break results = model(frame, save=True) print(results) cv2.waitKey(1) res_plotted = results[0].plot() cv2.imshow('results', res_plotted) out.write(res_plotted) if cv2.waitKey(1)==ord('q'): break return video_feed() folder_path = 'runs/detect/train' subfolders = [f for f in os.listdir(folder_path) if os.path.isdir(os.path.join(folder_path, f))] latest_subfolder = max(subfolders, key=lambda x: os.path.getctime(os.path.join(folder_path,x) )) image_path = folder_path + '/' + latest_subfolder + '/' + f.filename return render_template('index.html', image_path = image_path)@app.route('/path:filename') def display(filename): print('Indisplay') folder_path = 'runs/detect/train' subfolders = [f for f in os.listdir(folder_path) if os.path.isdir(os.path.join(folder_path, f))] latest_subfolder = max(subfolders, key=lambda x: os.path.getctime(os.path.join(folder_path, x))) directory = folder_path+'/'+latest_subfolder print('printing directory', directory) files = os.listdir(directory) #print('HI') if files: latest_file = files[0] print(latest_file) else: print('No files found in directory')
filename = predict_img.imgpath print('After Filename') file_extension = filename.rsplit('.', 1)[1].lower() environ = request.environ if file_extension == 'jpg': print('infileext') if os.path.exists(os.path.join(directory, latest_file)): return send_from_directory(directory, latest_file, environ) else: return 'FILE DOES NOT EXIST' else: return 'INVALID FILE FORMAT'@app.route("/webcam_feed") def webcam_feed(): ip_address = "rtsp://admin:admin123@192.168.1.2:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" cap = cv2.VideoCapture(ip_address) model = YOLO('runs/detect/train/weights/best.pt') fps = int(cap.get(cv2.CAP_PROP_FPS))
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) show_boxes = False out = cv2.VideoWriter('output.mp4', fourcc, fps, (frame_width, frame_height), True) while (cap.isOpened()): ret, frame = cap.read() if ret == True: person_found = False results = model(frame, imgsz=640, stream=True, verbose=False) for result in results: for box in result.boxes.cpu().numpy(): if show_boxes: r = box.xyxy[0].astype(int) cv2.rectangle(frame, r[:2], r[2:], (255, 255, 255), 2) cls = int(box.cls[0]) if cls == 0: person_found = True return render_template('index.html') @app.route('/video_feed')def video_feed(): print('Function called') return Response(get_frame(), mimetype='multipart/x-mixed-replace; boundary=frame')
if name == 'main': app.run(debug=True) parser = argparse.ArgumentParser(description="Flask app exposing yolov8 models") parser.add_argument("--port", default=5000, type=int, help="port number") args = parser.parse_args()
flashzzz
did you install opencv using conda?
raniasyed
no i didnt
flashzzz
Then I think the issue lies with the writer plugins. I'll let you know if I find something
raniasyed
sure, thank you!
kopyl
What are the errors?
Paula DerrengerUltralytics@kopyl it seems there was a misunderstanding earlier. The error you're encountering is related to OpenCV's
imwritefunction, which is used to save images to disk. The error message indicates that OpenCV cannot find a writer for the specified file extension, which in your case is.jpg.This issue can occur if OpenCV was not installed with the proper image codecs or if there's an issue with the file path or permissions. Here are a few steps you can take to resolve the issue:
-
Check File Path: Ensure that the path where you're trying to save the image exists and that your application has write permissions to that directory.
-
Reinstall OpenCV: Uninstall and reinstall OpenCV with all the necessary codecs. If you're using
pip, you can do this with:pip uninstall opencv-python pip install opencv-python -
Use Absolute Path: When saving the image, use an absolute path to avoid any relative path issues.
-
Check Disk Space: Make sure you have enough disk space on the drive you're writing to.
-
File Extension: Double-check that the file extension is correct and that you're not appending any non-standard characters to it.
-
Update OpenCV: If you're not using the latest version of OpenCV, consider updating it as there might be fixes in the newer versions.
If you continue to face issues, please provide the exact line of code that's causing the error, and I'll be happy to help you further debug the problem.
-
Aminezaghdoudi08
I am writing my thesis on error detection in Alumnium using YOLOv8 and have not found any documentation on the architecture of the algorithm. Can you please give me more details about it and how it works? so I can present it.
Kind regards
1torkiasalem
@Aminezaghdoudi08 Hello! check this
Aminezaghdoudi08
Thank you very much for the answer. Can you please give me more details. Especially about the parameters used.
torkiasalem
@Aminezaghdoudi08 The YOLOv8 architecture consists of two main parts: the backbone and the head. The backbone is a modified version of the CSPDarknet53 architecture. The head consists of multiple convolutional layers followed by a series of fully connected layers, responsible for predicting bounding boxes, objectness scores, and class probabilities for the objects detected in an image . Some other parameters used in YOLOv8 include: Input size: Default input size is 640x640 . Number of layers: Default number of layers is set to 53.
For BBox loss, YOLOv8 employs the CIoU and DFL loss functions, as well as BCE for cls loss. These losses have been proven to increase object identification performance, especially with tiny objects. I hope this explanation helps clarify your questions. Let us know if you have any further questions or concerns!
2
daisheng123
I looked at the parsing function in deepstream-yolo-pose, and it only handles single-class human pose estimation. How should it be parsed for multiple classes?
Glenn JocherUltralyticsUltralytics pose models assume a single keypoint layout (one
kpt_shape/skeleton), so you can only do “multi-class pose” with one DeepStream parser if all classes share the same keypoint definition; in that case, parse keypoints exactly the same way and just use each detection’s predicted class id (cls) to tag/group the instance (see the Ultralytics pose task docs). If your classes need different keypoint counts/semantics, you’ll need separate pose models/engines (or run detection first, then a class-specific pose model), since one output tensor shape can’t represent multiple skeletons cleanly.







