Roboflow عبارة عن منصة للتعليق على الصور لاستخدامها في الذكاء الاصطناعي لاكتشاف الكائنات.
أستخدم هذه المنصة لـ C2SMR c2smr.fr، جمعية رؤية الكمبيوتر الخاصة بي للإنقاذ البحري.
أوضح لك في هذه المقالة كيفية استخدام هذا النظام الأساسي وتدريب نموذجك باستخدام لغة بايثون.
يمكنك العثور على المزيد من نماذج التعليمات البرمجية على جيثب الخاص بي: https://github.com/C2SMR/detector
لإنشاء مجموعة البيانات الخاصة بك، انتقل إلى https://app.roboflow.com/ وابدأ في إضافة تعليقات توضيحية إلى صورتك كما هو موضح في الصورة التالية.
في هذا المثال، قمت بتحويل جميع السباحين للتنبؤ بموقعهم في الصور المستقبلية.
للحصول على نتيجة جيدة، قم بقص جميع السباحين ووضع المربع المحيط مباشرة بعد الكائن لإحاطته بشكل صحيح.
يمكنك بالفعل استخدام مجموعة بيانات roboflow العامة، لإجراء هذا الفحص https://universe.roboflow.com/
بالنسبة لمرحلة التدريب، يمكنك استخدام roboflow مباشرة، ولكن في المرة الثالثة سيتعين عليك الدفع، ولهذا السبب أعرض لك كيفية القيام بذلك باستخدام الكمبيوتر المحمول الخاص بك.
الخطوة الأولى هي استيراد مجموعة البيانات الخاصة بك. للقيام بذلك، يمكنك استيراد مكتبة Roboflow.
pip install roboflow
لإنشاء نموذج، تحتاج إلى استخدام خوارزمية YOLO، والتي يمكنك استيرادها باستخدام مكتبة Ultralytics.
pip install ultralytics
في البرنامج النصي الخاص بي، أستخدم الأمر التالي:
py train.py api-key project-workspace project-name project-version nb-epoch size_model
يجب عليك الحصول على :
في البداية، يقوم البرنامج بتنزيل yolov8-obb.pt، وزن yolo الافتراضي مع بيانات ما قبل التمرين، لتسهيل التدريب.
import sys import os import random from roboflow import Roboflow from ultralytics import YOLO import yaml import time class Main: rf: Roboflow project: object dataset: object model: object results: object model_size: str def __init__(self): self.model_size = sys.argv[6] self.import_dataset() self.train() def import_dataset(self): self.rf = Roboflow(api_key=sys.argv[1]) self.project = self.rf.workspace(sys.argv[2]).project(sys.argv[3]) self.dataset = self.project.version(sys.argv[4]).download("yolov8-obb") with open(f'{self.dataset.location}/data.yaml', 'r') as file: data = yaml.safe_load(file) data['path'] = self.dataset.location with open(f'{self.dataset.location}/data.yaml', 'w') as file: yaml.dump(data, file, sort_keys=False) def train(self): list_of_models = ["n", "s", "m", "l", "x"] if self.model_size != "ALL" and self.model_size in list_of_models: self.model = YOLO(f"yolov8{self.model_size}-obb.pt") self.results = self.model.train(data=f"{self.dataset.location}/" f"yolov8-obb.yaml", epochs=int(sys.argv[5]), imgsz=640) elif self.model_size == "ALL": for model_size in list_of_models: self.model = YOLO(f"yolov8{model_size}.pt") self.results = self.model.train(data=f"{self.dataset.location}" f"/yolov8-obb.yaml", epochs=int(sys.argv[5]), imgsz=640) else: print("Invalid model size") if __name__ == '__main__': Main()
بعد تدريب النموذج، تحصل على الملفات best.py وlast.py، والتي تتوافق مع الوزن.
باستخدام مكتبة Ultralytics، يمكنك أيضًا استيراد YOLO وتحميل وزنك ثم الفيديو الاختباري.
في هذا المثال، أستخدم وظيفة التتبع للحصول على معرف لكل سباح.
import cv2 from ultralytics import YOLO import sys def main(): cap = cv2.VideoCapture(sys.argv[1]) model = YOLO(sys.argv[2]) while True: ret, frame = cap.read() results = model.track(frame, persist=True) res_plotted = results[0].plot() cv2.imshow("frame", res_plotted) if cv2.waitKey(1) == 27: break cap.release() cv2.destroyAllWindows() if __name__ == "__main__": main()
لتحليل التوقع يمكنك الحصول على النموذج json كما يلي.
results = model.track(frame, persist=True) results_json = json.loads(results[0].tojson())
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3