5
5
6
6
from PIL .Image import open
7
7
from customtkinter import CTkLabel , DoubleVar
8
- from cv2 import VideoCapture , imencode , IMWRITE_JPEG_QUALITY
8
+ from cv2 import VideoCapture , imencode , IMWRITE_JPEG_QUALITY , CAP_PROP_FPS
9
9
10
10
from leads import L , require_config
11
11
from leads_gui import RuntimeData , Window , ContextManager , Speedometer
@@ -26,6 +26,7 @@ def video_tester(container: Callable[[], None]) -> float:
26
26
def video_test () -> dict [str , float ]:
27
27
r = {}
28
28
vc = VideoCapture (require_config ().get ("benchmark_camera_port" , 0 ))
29
+ r ["camera fps" ] = vc .get (CAP_PROP_FPS )
29
30
if not vc .isOpened ():
30
31
L .error ("No camera available" )
31
32
return r
@@ -45,12 +46,13 @@ def test3() -> None:
45
46
def test4 () -> None :
46
47
_ , frame = vc .read ()
47
48
im = imencode (".jpg" , frame , (IMWRITE_JPEG_QUALITY , 90 ))[1 ].tobytes ()
49
+ b64encode (im )
48
50
open (BytesIO (im ))
49
51
50
- r ["video capture" ] = video_tester (test1 ) * 1000
51
- r ["video capture and encoding" ] = video_tester (test2 ) * 1000
52
- r ["video capture and Base64 encoding" ] = video_tester (test3 ) * 1000
53
- r ["video capture and PIL" ] = video_tester (test4 ) * 1000
52
+ r ["video capture" ] = 1 / video_tester (test1 )
53
+ r ["video capture + encoding" ] = 1 / video_tester (test2 )
54
+ r ["video capture + Base64 encoding" ] = 1 / video_tester (test3 )
55
+ r ["video capture + PIL" ] = 1 / video_tester (test4 )
54
56
return r
55
57
56
58
@@ -73,23 +75,23 @@ def main() -> int:
73
75
w = Window (800 , 256 , 30 , rd , callbacks .on_refresh , "Benchmark" , no_title_bar = False )
74
76
callbacks .speed = DoubleVar (w .root ())
75
77
uim = ContextManager (w )
76
- uim .layout ([[CTkLabel (w .root (), text = "Benchmark Ongoing " , height = 240 ),
78
+ uim .layout ([[CTkLabel (w .root (), text = "Do NOT close the window " , height = 240 ),
77
79
Speedometer (w .root (), height = 240 , variable = callbacks .speed )]])
78
80
uim .show ()
79
81
L .info ("GUI test complete" )
80
82
L .info ("Video test starting, this takes about 40 seconds" )
81
- report ["frame rate" ] = w .frame_rate ()
82
- report ["net delay" ] = w .net_delay () * 1000
83
+ report ["gui" ] = w .frame_rate ()
83
84
report .update (video_test ())
84
85
L .info ("Video test complete" )
85
86
for k , v in report .items ():
86
87
L .info (f"{ k } : { v :.3f} " )
87
- baseline = {"frame rate" : 30 , "net delay" : 1.062 , "video capture" : 17.898 , "video capture and encoding" : 16.657 ,
88
- "video capture and Base64 encoding" : 16.658 , "video capture and PIL" : 16.668 }
88
+ camera_fps = report .pop ("camera fps" )
89
+ baseline = {"gui" : 30 , "video capture" : camera_fps , "video capture + encoding" : camera_fps ,
90
+ "video capture + Base64 encoding" : camera_fps , "video capture + PIL" : camera_fps }
89
91
score = 0
90
92
for k , v in report .items ():
91
93
score += v / baseline [k ]
92
- L .info ("Score:" , str ( score / len (report )) )
94
+ L .info (f "Score: { 100 * score / len (report ):.2f } %" )
93
95
return 0
94
96
95
97
0 commit comments