Odczytywanie kodów QR słabej jakości!

0

jak zrobić w tym kodzie aby mógł program odczytywać kody QR o gorszej jakości ? Przykładowe zdjęcie które chce odczytać L.jpg

import cv2
from tkinter import *
from tkinter import filedialog
from PIL import Image, ImageTk
from pyzbar.pyzbar import decode
import numpy as np

def preprocess_for_qr_detection(cv_image):
    # Konwersja do skali szarości
    gray_image = cv2.cvtColor(cv_image, cv2.COLOR_BGR2GRAY)
    # Wyostrzenie obrazu
    sharpen_kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
    sharpened = cv2.filter2D(gray_image, -1, sharpen_kernel)
    return sharpened

def load_image_with_pil(file_path):
    pil_image = Image.open(file_path)
    cv_image = np.array(pil_image)
    # Konwersja RGB na BGR dla OpenCV
    cv_image = cv_image[:, :, ::-1].copy()
    return cv_image

def decode_qr_and_mark(image):
    preprocessed_image = preprocess_for_qr_detection(image)
    decoded_objects = decode(preprocessed_image)
    for obj in decoded_objects:
        # Dla każdego zdekodowanego obiektu, narysuj zieloną obwódkę wokół kodu QR
        points = obj.polygon
        # Jeśli punkty nie tworzą kwadratu, znajdź otoczkę wypukłą
        if len(points) > 4:
            hull = cv2.convexHull(np.array([point for point in points], dtype=np.float32))
            points = hull
        # Liczba punktów w otoczce wypukłej
        n = len(points)
        # Narysuj otoczkę wypukłą
        for j in range(n):
            cv2.line(image, tuple(points[j]), tuple(points[(j+1) % n]), (0,255,0), 3)

    return image, decoded_objects

def select_image():
    file_path = filedialog.askopenfilename()
    if not file_path:
        return
    
    cv_image = load_image_with_pil(file_path)
    marked_image, decoded_objects = decode_qr_and_mark(cv_image.copy())
    marked_image = cv2.cvtColor(marked_image, cv2.COLOR_BGR2RGB)
    im = Image.fromarray(marked_image)
    img = ImageTk.PhotoImage(image=im)

    image_label.configure(image=img)
    image_label.image = img

    # Wyświetl dane zdekodowanego kodu QR
    if decoded_objects:
        decoded_text = "\n".join([obj.data.decode("utf-8") for obj in decoded_objects])
    else:
        decoded_text = "Nie znaleziono kodu QR."
    text_label.config(text=decoded_text)

# Inicjalizacja głównego okna interfejsu użytkownika
window = Tk()
window.title('Dekoder Kodów QR')

frame = Frame(window)
frame.pack(padx=10, pady=10)

image_label = Label(frame)
image_label.pack(side=LEFT, padx=10, pady=10)

text_label = Label(frame, text="Tutaj pojawią się dane zdekodowanego kodu QR", justify=LEFT)
text_label.pack(side=LEFT, padx=10, pady=10)

btn_load_image = Button(window, text="Wczytaj obraz", command=select_image)
btn_load_image.pack(side=BOTTOM, pady=10)

window.mainloop()
1

Edit na niektórych nie warto tracić czasu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1