機器視覺-使用YoloV8的Python API
參考文檔:
https://docs.ultralytics.com/modes/predict/#working-with-results
https://zhuanlan.zhihu.com/p/655162922
https://thinkinfi.com/motorcycle-helmet-detection-using-deep-learning/
示例說明
- 可提前將預訓練的 yolov8n.pt文件下載到本腳本同一目錄下,地址 https://github.com/ultralytics/assets/releases
- 關于 yolo runtime settings.yaml 對訓練過程的干擾
yolo settings.yaml文件路徑為: C:\Users\MY_USER\AppData\Roaming\Ultralytics\settings.yaml, 該文件保存著上次訓練時的runtime 設置, 其中有一個 datasets_dir 設置在特定條件下會導致train報錯.
干擾的條件是: data yaml文件中的path變量使用的相對路徑.
報錯的信息為: images not found
修復方式為: (1) data yaml的path使用絕對路徑, (2)或者在訓練之前修改yolo settings.yaml中的datasets_dir成我們真實存放圖片dataset的父目錄, 如果不更新settings.yaml將保留上次訓練的圖像路徑,會導致報 images not found 錯誤 ; 如果 data yaml 中的path變量使用的絕對路徑, 則不需更新yolo settings.yaml中的datasets_dir. - 構建線程安全的predict, 可參考 ultralytics 官方文檔 https://docs.ultralytics.com/modes/predict
- predict() 返回類型為 Results list , 官方文檔寫的是 Results, 這一點是錯誤的.
示例代碼
from IPython import display
import ultralytics
from ultralytics import YOLO, settings
from os import path
def train():
# ==========================
# 如果 data yaml 中的path變量使用的相對路徑, 需要更新yolo settings.yaml中的datasets_dir成我們真實存放圖片dataset的父目錄, 如果不更新settings.yaml將保留上次訓練的圖像路徑,會導致報 images not found 錯誤
# 如果 data yaml 中的path變量使用的絕對路徑, 則不需更新yolo settings.yaml中的datasets_dir.
# yolo settings.yaml文件路徑為: C:\Users\MY_USER\AppData\Roaming\Ultralytics\settings.yaml
# ==========================
image_path = r'''C:\Users\dorothy\AppData\Roaming\Python\Python311\Scripts\datasets'''
settings.update({"datasets_dir": image_path})
# 設置訓練data yaml文件
dataset_yaml = r"C:\Users\dorothy\AppData\Roaming\Python\Python311\site-packages\ultralytics\cfg\datasets\coco8.yaml"
# 可提前將預訓練的olov8n.pt文件下載到本腳本同一目錄下,地址 https://github.com/ultralytics/assets/releases
model = YOLO("yolov8n.pt")
# 在本腳本同一目錄下, 會自動生成 runs 結果目錄
results = model.train(data=dataset_yaml, epochs=2, imgsz=640, device="cpu", batch=8)
def predict():
model = YOLO(r"D:\my_workspace\source\yolo8\runs\detect\train9\weights\last.pt")
image_file1 = r"D:\my_workspace\py_code\yolo8\Lib\site-packages\ultralytics\assets\bus.jpg"
image_file2 = r"D:\my_workspace\py_code\yolo8\Lib\site-packages\ultralytics\assets\zidane.jpg"
results_list = model.predict(source=[image_file1, image_file2], show=False, save=True, save_conf=True,
save_txt=True)
for results in results_list:
boxes = results.boxes
speed = results.speed
names = results.names
json = results.tojson()
image_path = results.path
print("====")
print(image_path)
print(names)
print(json)
if __name__ == '__main__':
display.clear_output()
ultralytics.checks()
# train()
predict()

浙公網安備 33010602011771號