Übersicht Vor kurzem wurde der PC erneuert. Früher, als ich mit OpenCV spielte, betrug die Bildverarbeitung nur etwa 10 Bilder pro Sekunde, und ich fand sie subtil. Deshalb werde ich versuchen, durch Ändern des PCs herauszufinden, wie sie aussieht. Als nächstes werde ich die GPU mit der GTX1660super und der integrierten Intel-Grafik vergleichen. Ich denke, jemand macht es bereits, aber ich konnte es nicht finden, also schreibe ich es. Bitte lassen Sie mich wissen, wenn es andere Artikel gibt, die dasselbe tun. Ich will lesen.
PC | Bench Ergebnisse |
---|---|
Alter PC | 613 |
Neuer PC-Eingebaute GPU | 4741 |
Neuer PC-GPU | 4839 |
Es hängt überhaupt nicht von der GPU ab.
FFXV_bench 1920 * 1080, Standardqualität
PC | Bench Ergebnisse |
---|---|
Alter PC | 547:Schwer zu bedienen |
Neuer PC-Eingebaute GPU | 708:Schwer zu bedienen |
Neuer PC-GPU | 8379:gemütlich |
Der Speicher ist kaum genug und ohne GPU nutzlos.
Sie können Bildschirme in einer Bibliothek namens mss erfassen.
pip install mss
Wird benötigt. Holen Sie sich die verstrichene Zeit $ [s] $ in einer Bibliothek namens time. Vergleichen Sie die Zeit, die für die 1000-malige Erfassung des Bildschirms benötigt wurde. Ich weiß nicht, wo der Engpass liegt. Wenn Sie $ while $ schleifen, ohne das Bild zu erfassen, konnte es nicht auf der zweiten Ebene gemessen werden, daher der Bildaufnahmeteil
sct.grab(monitor)
Ich denke, es besteht kein Zweifel, dass es Zeit braucht.
PC | Sekunden |
---|---|
Alter PC | 16.7(60fps) |
Neuer PC-Eingebaute GPU | 16.7(60fps) |
Neuer PC-GPU | 16.7(60fps) |
Dies wird erwartet, da die Bildwiederholfrequenz des an den PC angeschlossenen Displays auf 59,94 Hz eingestellt ist.
capture_test.py
import cv2 #OpenCV-Bibliothek
import numpy as np #Numpy Bibliothek
from mss import mss
import time
sct = mss()
"""
Zur Funktionsprüfung: Nach Betriebsprüfung auskommentieren
"""
#windowName = "capture"
#cv2.namedWindow(windowName)
n= 0
while True:
if n == 0:
start_time = time.time()
if n>= 1000: #1000 mal wiederholt
end_time = time.time()
break
"""
Bildaufnahme
"""
monitor = {"top": 300, "left": 170, "width": 600, "height": 200}
img = np.array(sct.grab(monitor))
"""
Funktionsteil prüfen
"""
"""
img = img[:,:,0:3]
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
img = np.asarray(img)
cv2.imshow(windowName,img)
key = cv2.waitKey(1)
if key ==ord('q'): #Verarbeitung beenden
break
"""
n = n+ 1
cv2.destroyAllWindows()
img[0][0][0] = 1 #Wenn Sie es nicht einmal verwenden, denke ich, dass es nutzlos ist und fügen Sie es hinzu
print(end_time-start_time)
Probieren wir es mit der berühmten Bibliothek "pyautogui".
PC | Sekunden |
---|---|
Alter PC | 68.1(Nahezu 15 fps) |
Neuer PC-Eingebaute GPU | 34.1(Nahezu 30 fps) |
Neuer PC-GPU | 33.4(Nahezu 30 fps) |
Es kann auf 15,30,60 fps eingestellt werden, was je nach Leistung des PCs eine gute Zahl ist. Im Vergleich zu mss ist die Belastung von GPU und CPU etwas höher. Es gab fast keine Auswirkungen auf den Erfassungsbereich. Da der Auslastungsfaktor eines PCs von der Obergrenze abweicht, fragt er sich, warum es einen Leistungsunterschied gibt.
Die 15 fps des alten PCs sind jedoch zu niedrig, um verwendet zu werden.
capture_test_pyautogui.py
import cv2 #OpenCV-Bibliothek
import numpy as np #Numpy Bibliothek
import pyautogui
import time
"""
Zur Funktionsprüfung: Nach Betriebsprüfung auskommentieren
"""
"""
windowName = "capture"
cv2.namedWindow(windowName)
"""
monitor = {"top": 300, "left": 170, "width": 600, "height": 600}
n= 0
while True:
if n == 0:
start_time = time.time()
if n>= 1000: #100 mal wiederholt
end_time = time.time()
break
"""
Bildaufnahme
"""
home = pyautogui.screenshot(region=(0,0,600,200))
img = np.asarray(home)
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
"""
Funktionsteil prüfen
"""
"""
img = img[:,:,0:3]
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
img = np.asarray(img)
cv2.imshow(windowName,img)
key = cv2.waitKey(1)
if key ==ord('q'): #Verarbeitung beenden
break
"""
n = n+ 1
cv2.destroyAllWindows()
img[0][0][0] = 1 #Wenn Sie es nicht einmal verwenden, denke ich, dass es nutzlos ist und fügen Sie es hinzu
print(end_time-start_time)
OpenCV bench Listen Sie die Funktionen auf, die Sie ausprobieren möchten.
Grundsätzlich möchte ich eine Bilderkennung durchführen, also sieht es so aus.
cv2.imshow Da das "gleiche" Bild wiederholt angezeigt wird, können "unterschiedliche Bilder" leicht unterschiedliche Ergebnisse liefern. Die Größe des Bildes hat mich stark beeinflusst. Ich habe das Gefühl, dass die CPU-Auslastung hoch ist
Bildgröße 100 * 100
PC | Sekunden |
---|---|
Alter PC | |
Neuer PC-Eingebaute GPU | 0.015~0.017 |
Neuer PC-GPU | 0.017 |
Bildgröße 300 * 300
PC | Sekunden |
---|---|
Alter PC | |
Neuer PC-Eingebaute GPU | 0.08 |
Neuer PC-GPU | 0.083~0.084 |
Bildgröße 800 * 800
PC | Sekunden |
---|---|
Alter PC | |
Neuer PC-Eingebaute GPU | 1.20~1.23 |
Neuer PC-GPU | 1.11~1.13 |
Bildgröße 2000 * 2000
PC | Sekunden |
---|---|
Alter PC | |
Neuer PC-Eingebaute GPU | 8.5~8.9 |
Neuer PC-GPU | 8.0~8.2 |
opencv_imshow.py
import cv2 #OpenCV-Bibliothek
import numpy as np #Numpy Bibliothek
import time
windowName = "capture"
cv2.namedWindow(windowName)
img = np.zeros((2000,2000,3))
n= 0
while True:
if n == 0:
start_time = time.time()
if n>= 1000: #100 mal wiederholt
end_time = time.time()
break
cv2.imshow(windowName,img)
"""
#Betriebstest
key = cv2.waitKey(1)
if key ==ord('q'): #Verarbeitung beenden
break
"""
n = n+ 1
cv2.destroyAllWindows()
img[0][0][0] = 1 #Wenn Sie es nicht einmal verwenden, denke ich, dass es nutzlos ist und fügen Sie es hinzu
print(end_time-start_time)
cv2.circle
PC | Sekunden |
---|---|
Alter PC | 0.0239~0.0269 |
Neuer PC-Eingebaute GPU | 0.012 |
Neuer PC-GPU | 0.013 |
Es scheint überhaupt keine Last zu sein.
opencv_circle.py
import cv2 #OpenCV-Bibliothek
import numpy as np #Numpy Bibliothek
import time
windowName = "capture"
cv2.namedWindow(windowName)
img = np.zeros((500,500,3))
n= 0
while True:
if n == 0:
start_time = time.time()
if n>= 1000: #100 mal wiederholt
end_time = time.time()
break
cv2.circle(img, (int(n*0.5),50), 10, (0, 0, 255), 4)
"""
Funktionsteil prüfen
"""
"""
cv2.imshow(windowName,img)
key = cv2.waitKey(1)
if key ==ord('q'): #Verarbeitung beenden
break
"""
n = n+ 1
cv2.destroyAllWindows()
img[0][0][0] = 1 #Wenn Sie es nicht einmal verwenden, denke ich, dass es nutzlos ist und fügen Sie es hinzu
print(end_time-start_time)
cv2.matchTemplate Dieser Prozess hat das schwerste Bild. Es wurde auch stark von der Bildgröße beeinflusst.
PC | Sekunden, um 100 Mal zu laufen |
---|---|
Alter PC | |
Neuer PC-Eingebaute GPU | |
Neuer PC-GPU | 4.413 |
import cv2 #OpenCV-Bibliothek
import numpy as np #Numpy Bibliothek
import time
windowName = "capture"
cv2.namedWindow(windowName)
x = 100
y = 100
depth = 3
img = np.zeros((1000,1000,depth),dtype = np.uint8)
object1 = np.random.randint(0,255,(x,y,depth),dtype = np.uint8)
n= 0
while True:
if n == 0:
start_time = time.time()
if n>= 100: #100 mal wiederholt
end_time = time.time()
break
img_ccoeff = cv2.matchTemplate(img, object1, cv2.TM_CCOEFF_NORMED)
n = n+ 1
cv2.destroyAllWindows()
print(end_time-start_time)
cv2.minMaxLoc
PC | Sekunden, um 1000 Mal zu laufen |
---|---|
Alter PC | |
Neuer PC-Eingebaute GPU | |
Neuer PC-GPU | 0.255 |
Sie können sehen, dass es keine Zeit gedauert hat.
minmaxLoc_bench.py
import cv2 #OpenCV-Bibliothek
import numpy as np #Numpy Bibliothek
import time
windowName = "capture"
cv2.namedWindow(windowName)
x = 100
y = 100
depth = 3
img = np.zeros((1000,1000,depth),dtype = np.uint8)
object1 = np.random.randint(0,255,(x,y,depth),dtype = np.uint8)
img_ccoeff = cv2.matchTemplate(img, object1, cv2.TM_CCOEFF_NORMED)
n= 0
while True:
if n == 0:
start_time = time.time()
if n>= 1000: #100 mal wiederholt
end_time = time.time()
break
cMin, cMax1, pMin, pMax1 = cv2.minMaxLoc(img_ccoeff)
n = n+ 1
cv2.destroyAllWindows()
print(end_time-start_time)
Es tut mir Leid. Da dbd so viel Spaß gemacht hat, dass es nicht so viel Spaß gemacht hat, werde ich es vorerst veröffentlichen und aktualisieren, wenn ich es mir leisten kann.
Recommended Posts