Ich arbeite an einem automatisierten GUI -Test mit Sikulix- und Roboter -Framework, und ich brauche Sikulix, um Elemente auf dem Bildschirm zu erkennen, selbst wenn sich die Bildschirmauflösung oder die Windows -DPI -Skalierung ändert. scaling. />
Überprüftes OpenCV-Ähnlichkeit: verwendet SSIM (Struktur Ähnlichkeitsindex) zum Vergleich der ursprünglichen vs. gegründeten Bilder. Mein Bildschirm (keine Störung).${score} = Get Match Score ${mcu_selector}
Log Match score for ${mcu_selector}: ${score}
< /code>
Ausgabe: < /p>
Match score for mcu_selector.png: 0.0
< /code>
Hier ist der .py -Code -Snippet, um die Bilder protaktal in die aktuelle DPI -Skalierung umzuwandeln: < /p>
import os
import cv2
import pyautogui
import ctypes
IMAGE_FOLDER = "C:\\SikuliX.sikuli\\GPIO_TEST.sikuli"
RESIZED_IMAGE_FOLDER = "C:\\SikuliX.sikuli\\RESIZED_GPIO_TEST"
os.makedirs(RESIZED_IMAGE_FOLDER, exist_ok=True)
REFERENCE_WIDTH = 1920
REFERENCE_HEIGHT = 1080
CURRENT_WIDTH, CURRENT_HEIGHT = pyautogui.size()
scale_x = CURRENT_WIDTH / REFERENCE_WIDTH
scale_y = CURRENT_HEIGHT / REFERENCE_HEIGHT
def resize_image(image_path, scale_x, scale_y):
img = cv2.imread(image_path)
if img is None:
print(f"Skipping: {image_path} (Not an image)")
return False
new_width = int(img.shape[1] * scale_x)
new_height = int(img.shape[0] * scale_y)
# Use INTER_NEAREST to avoid blurring
resized_img = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_NEAREST)
resized_image_path = os.path.join(RESIZED_IMAGE_FOLDER, os.path.basename(image_path))
# Save PNG without compression
cv2.imwrite(resized_image_path, resized_img, [cv2.IMWRITE_PNG_COMPRESSION, 100])
print(f"Image saved without compression: {resized_image_path} (Size: {os.path.getsize(resized_image_path)} bytes)")
return True
def get_windows_scaling():
user32 = ctypes.windll.user32
dc = user32.GetDC(0)
dpi = ctypes.windll.gdi32.GetDeviceCaps(dc, 88) # Get DPI scaling
return dpi / 96.0 # 96 DPI = 100%, 120 DPI = 125%, etc.
scaling_factor = get_windows_scaling()
print(f"Windows Scaling Detected: {scaling_factor * 100:.0f}%")
# Save scaling factor for Robot Framework
with open("scaling_factor.txt", "w") as f:
f.write(str(scaling_factor))
for filename in os.listdir(IMAGE_FOLDER):
if filename.endswith(".png") or filename.endswith(".jpg"):
image_path = os.path.join(IMAGE_FOLDER, filename)
resize_image(image_path, scale_x, scale_y)
print("Image resizing finished!")
< /code>
Sikulix erfasst das Bild immer noch nicht! OpenCV sagt, dass die Bilder identisch sind, doch Sikulix gibt 0,0 Match -Score zurück. < /P>
Warum fällt Sikulix fehl?>
Sikulix erfasst keine Bilder nach der Größenänderung für die Auflösung und die DPI -Skalierungsanpassungen ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post