Forum: PC Hard- und Software Auf Dokumente Logo erkennen


von Peter G. (peterdergrosse)


Lesenswert?

Hi

Ich möchte ein paar tausend Scans in in einem Ordner durchsuchen und die 
Dokumente heruasfiltern, die in diesem Fall links oben ein bestimmtes 
Logo haben.

Ich hab es bereits mit Texterkennungssoftware verscuht, hat leider nicht 
viel gebracht. Ideal wäre eine Software, die Duplikate erkennen kann, 
den Prüfbereicht aber auf eine bestimtme Stelle begrenzen kann..


Hat jemand eine Idee?

von Harald K. (kirnbichler)


Lesenswert?

Mit Imagemagick die Ecke mit dem Logo ausschneiden und dann mit Deiner 
Duplikatssoftware prüfen?

von Ein T. (ein_typ)


Lesenswert?

Peter G. schrieb:
> Ich möchte ein paar tausend Scans in in einem Ordner durchsuchen und die
> Dokumente heruasfiltern, die in diesem Fall links oben ein bestimmtes
> Logo haben.
>
> Ich hab es bereits mit Texterkennungssoftware verscuht, hat leider nicht
> viel gebracht. Ideal wäre eine Software, die Duplikate erkennen kann,
> den Prüfbereicht aber auf eine bestimtme Stelle begrenzen kann..
>
> Hat jemand eine Idee?

Möglicherweise wäre eine Bilderkennung hier besser geeignet. Leider 
sagst Du nichts dazu, in welchem Format die Scans vorliegen. Bei einem 
"normalen" Grafikformat (PNG, JPEG, TIFF, ...) wäre es dabei vermutlich 
das Einfachste, mit Python und OpenCV Deine "Region of Interest" 
auszuschneiden ("oben links") auszuschneiden und dann eine einfache 
Erkennung darauf loszulassen.

So eine Erkennung könnte viele Ansätze verfolgen: Ähnlichkeiten bei den 
Histogrammen der Farben, Differenzen zwischen den Ausschnitten, oder 
natürlich die Erkennungsalgorithmen von OpenCV. HTH, YMMV, viel Glück 
und Erfolg!

von Peter G. (peterdergrosse)


Lesenswert?

habs jetzt mit Python und Numpi gemacht... unter Mithilfe von ChatGPT ;)

vielen Dank!

von Ein T. (ein_typ)


Lesenswert?

Peter G. schrieb:
> habs jetzt mit Python und Numpi gemacht... unter Mithilfe von ChatGPT ;)

Prima, magst Du Euren Code vielleicht zeigen?

> vielen Dank!

Gerne. :-)

von Peter G. (peterdergrosse)


Lesenswert?

biddesehr, hier mit der Modifikation damit das Logo auch in S/W erkannt 
wird:
1
import cv2
2
import numpy as np
3
import os
4
import shutil
5
6
def find_logo(target_image_path, logo_image_gray, search_area=(800, 400), threshold=0.8):
7
    """Search for the logo within the specified area of the target image, focusing on the top right corner and handling grayscale images."""
8
    # Load the target image and convert to grayscale
9
    target_image = cv2.imread(target_image_path)
10
    target_image_gray = cv2.cvtColor(target_image, cv2.COLOR_BGR2GRAY)
11
12
    height, width = target_image_gray.shape
13
14
    # Calculate the starting point for the crop to focus on the top right corner
15
    start_x = width - search_area[0]  # Width of the image minus the search area width
16
    start_y = 0  # Start at the top of the image
17
18
    # Crop the search area from the top right corner of the target image
19
    search_area_cropped = target_image_gray[start_y:start_y + search_area[1], start_x:start_x + search_area[0]]
20
21
    # Template matching
22
    result = cv2.matchTemplate(search_area_cropped, logo_image_gray, cv2.TM_CCOEFF_NORMED)
23
    _, max_val, _, _ = cv2.minMaxLoc(result)
24
25
    return max_val >= threshold
26
27
def process_images(folder_path, logo_path, similar_folder="similar", threshold=0.8):
28
    """Process all images in the folder to find the logo within the top right area, considering grayscale images."""
29
    # Convert the reference (logo) image to grayscale once
30
    logo_image = cv2.imread(logo_path)
31
    logo_image_gray = cv2.cvtColor(logo_image, cv2.COLOR_BGR2GRAY)
32
33
    # Ensure the 'similar' folder exists
34
    similar_folder_path = os.path.join(folder_path, similar_folder)
35
    if not os.path.exists(similar_folder_path):
36
        os.makedirs(similar_folder_path)
37
38
    # Iterate through all images in the folder
39
    for filename in os.listdir(folder_path):
40
        if filename.endswith(('.png', '.jpg', '.jpeg')):
41
            current_path = os.path.join(folder_path, filename)
42
            try:
43
                if find_logo(current_path, logo_image_gray, threshold=threshold):
44
                    # If the logo is found, move the image to the 'similar' folder
45
                    shutil.move(current_path, os.path.join(similar_folder_path, filename))
46
                    print(f"Moved {filename} to {similar_folder_path}.")
47
            except Exception as e:
48
                print(f"Error processing {filename}: {e}")
49
50
# Example usage
51
folder_path = 'path/to/your/pictures'  # Update this to your pictures folder path
52
logo_path = 'logo.jpg'  # Ensure this is the path to your logo
53
process_images(folder_path, logo_path)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.