Ali Ismael نشر 7 أكتوبر 2021 أرسل تقرير نشر 7 أكتوبر 2021 كيف يمكننا قياس أداء تابع أو مجموعة عمليات (Block) في OpenCV وهل توجد طريقة لرفع الأداء (سرعة التنفيذ)؟ 1 اقتباس
1 Ali Haidar Ahmad نشر 7 أكتوبر 2021 أرسل تقرير نشر 7 أكتوبر 2021 بالنسبة لقياس الأداء فهناك التابع getTickCount الذي يعطينا عدد دورات الساعة CK التي استغرقناها لتنفيذ عملية أو مجموعة عمليات ضمن الكود. وأيضاً التابع getTickFrequency الذي يعطينا تردد دورات الساعة، أو عدد دورات الساعة في الثانية. ولإيجاد زمن تنفيذ المقطع البرمجي الخاص بك بالثواني: import cv2 e1 = cv2.getTickCount() # البداية # الكود الخاص بك يكون هنا e2 = cv2.getTickCount() # النهاية time = (e2 - e1)/ cv2.getTickFrequency() مثال: import cv2 as cv import numpy as np image = cv.imread("im.jpg") t1 = cv.getTickCount() # سنقوم بتجريب فلتر بقيم مختلفة للكيرنل for i in range(3,30,2): img1 = cv.medianBlur(image,i) t2 = cv.getTickCount() time = (t2 - t1)/cv.getTickFrequency() print(time) # 0.432018214 seconds أما بالنسبة لتحسين الأداء فهناك ما يسمى ب "الحل المثالي" حيث يمكنك تشغيل العديد من التوابع في OpenCV في هذا الوضع، لذا إذا كان لديك نظام يدعم خاصية "الحل المثالي" فيمكنك استخدام هذه الخاصية (حالياً جميع المعالجات تدعم ذلك). لتفعيل هذه الخاصية نستخدم cv2.setUseOptimized حيث نمرر له True لتفعيلها و False لإلغاء التفعيل، ولمعرفة فيما إذا كان الكود ينفذ مع المحسَن optimizer أم لا، نقوم باستدعاء التابع cv2.useOptimized حيث يعيد True إذا كانت الخاصية مفعلة وإلا False: cv2.useOptimized() # False # أي أنها معطلة %timeit cv.medianBlur(image,33) # 10 loops, best of 3:66.3 ms per loop # الآن سنقوم بتفعيلها cv2.setUseOptimized(True) cv2.useOptimized() # TRUE %timeit cv.medianBlur(image,33) # 10 loops, best of 3:30.3 ms per loop لاحظ أن الزمن قد تحسن بمقدار الضعف. 1 اقتباس
1 Ahmed Sharshar نشر 9 أكتوبر 2021 أرسل تقرير نشر 9 أكتوبر 2021 يمكنك استخدام الدالة cv2.getTickCount() لقياس الوقت الذي يستغرقه الكود عن طريق بدء العد قبل بداية تنفيذ الكود ثم وقفه في نهاية الكود وحساب فرق الوقت بين البداية والنهاية ويكون هو الوقت الذي استغرقه الكود كالتالي: e1 = cv2.getTickCount() # البداية ret, frame = cap.read() cv2.imshow("cam",frame) e2 = cv2.getTickCount() # النهاية كذلك يمكنك استخدام الدالة time ، أنظر المقارنة بين الطريقيتين واستخدامهم: t_start=time.time() # البداية time1=0 while True: e1 = cv2.getTickCount() ret, frame = cap.read() cv2.imshow("cam",frame) e2 = cv2.getTickCount() time1 = (e2 - e1)/ cv2.getTickFrequency() + time1 elapsedTime= time.time()-t_start # النهاية ولتحسين الأداء يمكننا استخدام cv2.setUseOptimized كالتالي: # التأكد من تشغيله In [5]: cv.useOptimized() Out[5]: True In [6]: %timeit res = cv.medianBlur(img,49) 10 loops, best of 3: 34.9 ms per loop # وقفه In [7]: cv.setUseOptimized(False) In [8]: cv.useOptimized() Out[8]: False In [9]: %timeit res = cv.medianBlur(img,49) 10 loops, best of 3: 64.1 ms per loop اقتباس
السؤال
Ali Ismael
كيف يمكننا قياس أداء تابع أو مجموعة عمليات (Block) في OpenCV وهل توجد طريقة لرفع الأداء (سرعة التنفيذ)؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.