Welcome to DOFBOT-Ultra repository
9. Dataset Annotation
Dataset Annotation
Dataset Annotation1. Dataset Collection1.1. Extracting Images1.2. Dataset Paths2. Using Label Studio2.1. Installing Label Studio2.2. Starting Label Studio2.2.3. Accessing Label StudioHost MachineSame Local NetworkFirst Use3. Dataset Annotation3.1. Creating a Project3.2. Project Name3.3. Importing Training Set3.4. Label Settings3.5. Dataset Annotation3.6. Exporting Dataset3.7. Dataset Directory Structure3.8. Dataset Configuration FileReferences
To recognize specific objects or improve recognition accuracy, users need to train their own models. Dataset collection and annotation are indispensable parts of this process.
1. Dataset Collection
Note: For recognition in specific scenarios, users can use a camera to record videos of objects from various angles, then extract frames from the video as the training set.
1.1. Extracting Images
A simple example: extract one frame every 15 frames from a video as the dataset.
ximport cv2import os# Path to the input video filevideo_file = '/home/pi/ultralytics/ultralytics/data/yahboom_data/orange_video/orange.mkv'# Path to the output folder to save the framesoutput_folder = '/home/pi/ultralytics/ultralytics/data/yahboom_data/orange_pic'# Check if the output folder exists, if not, create itif not os.path.exists(output_folder): os.makedirs(output_folder)# Open the video file using OpenCVcap = cv2.VideoCapture(video_file)# Get the total number of frames in the videototal_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))# Get the frames per second (fps) of the videofps = cap.get(cv2.CAP_PROP_FPS)# Frame counter to keep track of the current frame numberframe_number = 0# Define the interval for extracting frames (every 15th frame)frame_interval = 15# Initialize a new counter for saved frames (starting from 1)saved_frame_number = 1while True: ret, frame = cap.read() # If the frame is not successfully read, exit the loop if not ret: break # Save every 15th frame if frame_number % frame_interval == 0: # Format the frame number starting from 1 (e.g., 1.png, 2.png) image_name = f'{saved_frame_number}.png' image_path = os.path.join(output_folder, image_name) # Save the current frame as a PNG image cv2.imwrite(image_path, frame) print(f'Saving frame {frame_number}/{total_frames} as {image_name}') # Increment the saved frame counter saved_frame_number += 1 # Increment the frame counter for the video frame_number += 1# Release the video capture objectcap.release()# Print message when processing is completeprint("Video processing complete! Every 15th frame saved as an image!")1.2. Dataset Paths
Example video: /home/sunrise/ultralytics/ultralytics/data/yahboom_data/orange_video
Example images: /home/sunrise/ultralytics/ultralytics/data/yahboom_data/orange_pic
2. Using Label Studio
Label Studio is an open-source data annotation platform for data labeling and annotation task management, supporting various types of data input and annotation formats.
2.1. Installing Label Studio
xxxxxxxxxxpip install label-studio -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
2.2. Starting Label Studio
Enter in the terminal:
xxxxxxxxxxlabel-studio start

2.2.3. Accessing Label Studio
Host Machine
Access method for RDK Pi Orin series boards. First-time access requires entering a username and password.
xxxxxxxxxxhttp://localhost:8080/

Same Local Network
Devices on the same local network can access via the board's IP:8080.
xxxxxxxxxxhttp://BoardIP:8080/ # For example: http://192.168.2.99:8080/

First Use
First-time users need to register and log in. Default factory settings (the account information is fictitious):
xxxxxxxxxxAccount: yahboom@163.comPassword: yahboom@163.com


After registration, the website will automatically log in:

3. Dataset Annotation
The demonstration dataset is on the board, so access Label Studio on the board.
3.1. Creating a Project

3.2. Project Name
The project name can be named freely according to your training set:

3.3. Importing Training Set
Manually import the pre-prepared dataset: Do not import too many images at once. It is recommended to select 50-100 images each time, then import multiple times.

3.4. Label Settings
We are demonstrating orange recognition, so select "Object Detection".

Delete the built-in labels:

Add new labels:

3.5. Dataset Annotation
Click to annotate all tasks:

Annotation steps: First click the "Orange" label, then use the mouse to draw a box around the corresponding orange in the image. After completing, click Submit to proceed to the next annotation.

If the boxed object is not a complete orange, you can click on the drawn box and readjust the position of each edge:

3.6. Exporting Dataset
Select YOLO format for export. The browser will automatically download a compressed package.


3.7. Dataset Directory Structure
The directory structure of the compressed package exported from Label Studio:
xxxxxxxxxx.├── images├── labels├── classes.txt└── notes.json
We need to split the exported images and labels from Label Studio into train (training set) and val (validation set), with a ratio of approximately 8:2. The images and labels in both train and val must have corresponding names.
xxxxxxxxxx.├── classes.txt├── notes.json├── train│ ├── images│ └── labels└── val├── images└── labels
3.8. Dataset Configuration File
Contains the paths to the training and validation sets, as well as the number and names of classes.
xxxxxxxxxxpath: /home/sunrise/ultralytics/ultralytics/data/yahboom_data/orange_datatrain: train/imagesval: val/imagesnc: 1# Classesnames:0: Orange