mirror of
				https://github.com/THU-MIG/yolov10.git
				synced 2025-10-30 05:15:38 +08:00 
			
		
		
		
	🖼️ Format bbox label with fixed precision for ortcpp-example (#4409)
Signed-off-by: Onuralp SEZER <thunderbirdtr@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Glenn Jocher <glenn.jocher@ultralytics.com>
This commit is contained in:
		
							parent
							
								
									8d7490f060
								
							
						
					
					
						commit
						4885538693
					
				| @ -11,20 +11,22 @@ set(CMAKE_CXX_EXTENSIONS ON) | |||||||
| set(CMAKE_INCLUDE_CURRENT_DIR ON) | set(CMAKE_INCLUDE_CURRENT_DIR ON) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| # OpenCV | # -------------- OpenCV  ------------------# | ||||||
| find_package(OpenCV REQUIRED) | find_package(OpenCV REQUIRED) | ||||||
| include_directories(${OpenCV_INCLUDE_DIRS}) | include_directories(${OpenCV_INCLUDE_DIRS}) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| # -------------- Compile CUDA for FP16 inference if needed  ------------------# | # -------------- Compile CUDA for FP16 inference if needed  ------------------# | ||||||
| option(USE_CUDA "Enable CUDA support" ON) | option(USE_CUDA "Enable CUDA support" ON) | ||||||
| if (USE_CUDA) | if (NOT APPLE AND USE_CUDA) | ||||||
|     find_package(CUDA REQUIRED) |     find_package(CUDA REQUIRED) | ||||||
|     include_directories(${CUDA_INCLUDE_DIRS}) |     include_directories(${CUDA_INCLUDE_DIRS}) | ||||||
|     add_definitions(-DUSE_CUDA) |     add_definitions(-DUSE_CUDA) | ||||||
|  | else () | ||||||
|  |     set(USE_CUDA OFF) | ||||||
| endif () | endif () | ||||||
| 
 | 
 | ||||||
| # ONNXRUNTIME | # -------------- ONNXRUNTIME  ------------------# | ||||||
| 
 | 
 | ||||||
| # Set ONNXRUNTIME_VERSION | # Set ONNXRUNTIME_VERSION | ||||||
| set(ONNXRUNTIME_VERSION 1.15.1) | set(ONNXRUNTIME_VERSION 1.15.1) | ||||||
| @ -84,3 +86,11 @@ endif () | |||||||
| # Download https://raw.githubusercontent.com/ultralytics/ultralytics/main/ultralytics/cfg/datasets/coco.yaml | # Download https://raw.githubusercontent.com/ultralytics/ultralytics/main/ultralytics/cfg/datasets/coco.yaml | ||||||
| # and put it in the same folder of the executable file | # and put it in the same folder of the executable file | ||||||
| configure_file(coco.yaml ${CMAKE_CURRENT_BINARY_DIR}/coco.yaml COPYONLY) | configure_file(coco.yaml ${CMAKE_CURRENT_BINARY_DIR}/coco.yaml COPYONLY) | ||||||
|  | 
 | ||||||
|  | # Copy yolov8n.onnx file to the same folder of the executable file | ||||||
|  | configure_file(yolov8n.onnx ${CMAKE_CURRENT_BINARY_DIR}/yolov8n.onnx COPYONLY) | ||||||
|  | 
 | ||||||
|  | # Create folder name images in the same folder of the executable file | ||||||
|  | add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD | ||||||
|  |     COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/images | ||||||
|  | ) | ||||||
|  | |||||||
| @ -1,14 +1,19 @@ | |||||||
| # YOLOv8 OnnxRuntime C++ | <h1 align="center">YOLOv8 OnnxRuntime C++</h1> | ||||||
|  | 
 | ||||||
|  | <p align="center"> | ||||||
|  |   <img alt="C++" src="https://img.shields.io/badge/C++-17-blue.svg?style=flat&logo=c%2B%2B"> | ||||||
|  |   <img alt="Onnx-runtime" src="https://img.shields.io/badge/OnnxRuntime-717272.svg?logo=Onnx&logoColor=white"></img> | ||||||
|  | </p> | ||||||
| 
 | 
 | ||||||
| This example demonstrates how to perform inference using YOLOv8 in C++ with ONNX Runtime and OpenCV's API. | This example demonstrates how to perform inference using YOLOv8 in C++ with ONNX Runtime and OpenCV's API. | ||||||
| 
 | 
 | ||||||
| ## Benefits | ## Benefits ✨ | ||||||
| 
 | 
 | ||||||
| - Friendly for deployment in the industrial sector. | - Friendly for deployment in the industrial sector. | ||||||
| - Faster than OpenCV's DNN inference on both CPU and GPU. | - Faster than OpenCV's DNN inference on both CPU and GPU. | ||||||
| - Supports FP32 and FP16 CUDA acceleration. | - Supports FP32 and FP16 CUDA acceleration. | ||||||
| 
 | 
 | ||||||
| ## Exporting YOLOv8 Models | ## Exporting YOLOv8 Models 📦 | ||||||
| 
 | 
 | ||||||
| To export YOLOv8 models, use the following Python script: | To export YOLOv8 models, use the following Python script: | ||||||
| 
 | 
 | ||||||
| @ -28,25 +33,50 @@ Alternatively, you can use the following command for exporting the model in the | |||||||
| yolo export model=yolov8n.pt opset=12 simplify=True dynamic=False format=onnx imgsz=640,640 | yolo export model=yolov8n.pt opset=12 simplify=True dynamic=False format=onnx imgsz=640,640 | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ## Download COCO.yaml file | ## Download COCO.yaml file 📂 | ||||||
| 
 | 
 | ||||||
| In order to run example, you also need to download coco.yaml. You can download the file manually from [here](https://raw.githubusercontent.com/ultralytics/ultralytics/main/ultralytics/cfg/datasets/coco.yaml) | In order to run example, you also need to download coco.yaml. You can download the file manually from [here](https://raw.githubusercontent.com/ultralytics/ultralytics/main/ultralytics/cfg/datasets/coco.yaml) | ||||||
| 
 | 
 | ||||||
| ## Dependencies | ## Dependencies ⚙️ | ||||||
| 
 | 
 | ||||||
| | Dependency                       | Version        | | | Dependency                       | Version        | | ||||||
| | -------------------------------- | ------------- | | | -------------------------------- | -------------- | | ||||||
| | Onnxruntime(linux,windows,macos) | >=1.14.1       | | | Onnxruntime(linux,windows,macos) | >=1.14.1       | | ||||||
| | OpenCV                           | >=4.0.0        | | | OpenCV                           | >=4.0.0        | | ||||||
| | C++                              | >=17          | | | C++ Standard                     | >=17           | | ||||||
| | Cmake                            | >=3.5          | | | Cmake                            | >=3.5          | | ||||||
| | Cuda (Optional)                  | >=11.4,\<12.0 | | | Cuda (Optional)                  | >=11.4  \<12.0 | | ||||||
| | cuDNN (Cuda required)            | =8             | | | cuDNN (Cuda required)            | =8             | | ||||||
| 
 | 
 | ||||||
| Note: The dependency on C++17 is due to the usage of the C++17 filesystem feature. | Note: The dependency on C++17 is due to the usage of the C++17 filesystem feature. | ||||||
|  | 
 | ||||||
| Note (2): Due to ONNX Runtime, we need to use CUDA 11 and cuDNN 8. Keep in mind that this requirement might change in the future. | Note (2): Due to ONNX Runtime, we need to use CUDA 11 and cuDNN 8. Keep in mind that this requirement might change in the future. | ||||||
| 
 | 
 | ||||||
| ## Usage | ## Build 🛠️ | ||||||
|  | 
 | ||||||
|  | 1. Clone the repository to your local machine. | ||||||
|  | 1. Navigate to the root directory of the repository. | ||||||
|  | 1. Create a build directory and navigate to it: | ||||||
|  | 
 | ||||||
|  | ```console | ||||||
|  | mkdir build && cd build | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 4. Run CMake to generate the build files: | ||||||
|  | 
 | ||||||
|  | ```console | ||||||
|  | cmake .. | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 5. Build the project: | ||||||
|  | 
 | ||||||
|  | ```console | ||||||
|  | make | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 6. The built executable should now be located in the `build` directory. | ||||||
|  | 
 | ||||||
|  | ## Usage 🚀 | ||||||
| 
 | 
 | ||||||
| ```c++ | ```c++ | ||||||
| // CPU inference | // CPU inference | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| #include <iostream> | #include <iostream> | ||||||
|  | #include <iomanip> | ||||||
| #include "inference.h" | #include "inference.h" | ||||||
| #include <filesystem> | #include <filesystem> | ||||||
| #include <fstream> | #include <fstream> | ||||||
| @ -18,16 +19,31 @@ void file_iterator(DCSP_CORE *&p) { | |||||||
|                 cv::Scalar color(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256)); |                 cv::Scalar color(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256)); | ||||||
| 
 | 
 | ||||||
|                 cv::rectangle(img, re.box, color, 3); |                 cv::rectangle(img, re.box, color, 3); | ||||||
|                 std::string label = p->classes[re.classId] + " " + std::to_string(re.confidence); | 
 | ||||||
|  |                 float confidence = floor(100 * re.confidence) / 100; | ||||||
|  |                 std::cout << std::fixed << std::setprecision(2); | ||||||
|  |                 std::string label = p->classes[re.classId] + " " + | ||||||
|  |                                     std::to_string(confidence).substr(0, std::to_string(confidence).size() - 4); | ||||||
|  | 
 | ||||||
|  |                 cv::rectangle( | ||||||
|  |                         img, | ||||||
|  |                         cv::Point(re.box.x, re.box.y - 25), | ||||||
|  |                         cv::Point(re.box.x + label.length() * 15, re.box.y), | ||||||
|  |                         color, | ||||||
|  |                         cv::FILLED | ||||||
|  |                 ); | ||||||
|  | 
 | ||||||
|                 cv::putText( |                 cv::putText( | ||||||
|                         img, |                         img, | ||||||
|                         label, |                         label, | ||||||
|                         cv::Point(re.box.x, re.box.y - 5), |                         cv::Point(re.box.x, re.box.y - 5), | ||||||
|                         cv::FONT_HERSHEY_SIMPLEX, |                         cv::FONT_HERSHEY_SIMPLEX, | ||||||
|                         0.75, |                         0.75, | ||||||
|                         color, |                         cv::Scalar(0, 0, 0), | ||||||
|                         2 |                         2 | ||||||
|                 ); |                 ); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|             } |             } | ||||||
|             std::cout << "Press any key to exit" << std::endl; |             std::cout << "Press any key to exit" << std::endl; | ||||||
|             cv::imshow("Result of Detection", img); |             cv::imshow("Result of Detection", img); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Onuralp SEZER
						Onuralp SEZER