Die EDL-Generierung mit Python 3.10 (imagehash & numpy) erzeugt bei einer größeren Anzahl von Dateien völligen UnsinnPython

Python-Programme
Anonymous
 Die EDL-Generierung mit Python 3.10 (imagehash & numpy) erzeugt bei einer größeren Anzahl von Dateien völligen Unsinn

Post by Anonymous »

Ich habe ein Verzeichnis von ca. 1600 PNGs (1000x400 aufgelöste Vorschauen von Frames) und möchte eine EDL generieren, damit ich nicht den gleichen Frame mehrmals rendern muss.
Bisher habe ich den Vergleich von imagehash.average_hash(image) sowie einen Vergleich von np.asarray(image) und der EDL-Generierung für Stapel von bis zu 450 Bildern erfolgreich durchgeführt.
Aber wenn ich 500+ verwende Bilder, mein EDL enthält Daten, die völlig falsche Bilder miteinander vergleichen. Das Problem liegt also irgendwo in den Daten, die ich in die EDL-Generierungsmethode eingespeist habe.
Noch ein paar Fakten dazu (die mich ehrlich gesagt noch mehr verwirren):
  • Die Methode funktioniert gut, wenn sie von Maya aus ausgelöst wird, aber wenn man dieselbe Python in PyCharm verwendet, liefert sie die Ergebnisse, die ich gerade beschrieben habe
  • Die verschiedenen Vergleichsmethoden (Hash & np.asarray) erzeugen ungefähr die gleichen falschen Ergebnisse, wenn sie auf derselben ausgeführt werden Verzeichnis
  • Wenn Sie nur die ersten 500 oder 1000 Bilder in diesem Verzeichnis ablegen und es auf beiden ausführen, führt dies zu den gleichen Ergebnissen bei den ersten 500.
  • Wenn es auf denselben Dateien ausgeführt wird, die in ein anderes Verzeichnis kopiert wurden, sind die Ergebnisse genauso falsch, unterscheiden sich jedoch völlig von denen im ursprünglichen Verzeichnis.
Die Methode, mit der die Bilder in der Imagehash-Version verglichen werden, ist

Code: Select all

def get_images_to_use(hashes): # list of the hashes of all images (generated earlier)
repeated_images = [] # list of images that can be repeated
image_indices = {}  # Dictionary to map image hash to its index
for i, img_hash in enumerate(hashes):
if img_hash in image_indices:
repeated_images.append(image_indices[img_hash])
else:
image_indices[img_hash] = i
repeated_images.append(i)
return repeated_images
In der np.asarray-Version konnte ich die Arrays nicht als Diktierschlüssel verwenden, also ist es

Code: Select all

def get_images_to_use(arrays):# list of the arrays of all images (generated earlier)
repeated_images = [] # list of images that can be repeated
indexed_arrays = [] # list of arrays alread in repeated_images
image_indices = [] # list of the image indices for the arrays in indexed_arrays
for i, img_array in enumerate(arrays):
for j, indexed_array in enumerate(indexed_arrays):
if np.all(img_array== indexed_array):
repeated_images.append(image_indices[j])
break
else:
image_indices.append(i)
indexed_arrays.append(img_array)
repeated_images.append(i)
repeated_images[0] = 0
repeated_images[-1] = len(arrays) -
return repeated_images
Der Code ist etwas chaotisch, aber er sollte funktionieren, genau wie bei weniger Bildern, und die anderen Verhaltensweisen, die ich beobachtet habe, lassen den Eindruck entstehen, dass es sich eher um ein Speicher-/Computerverwaltungsproblem als um ein Codeproblem handelt. Vor allem aufgrund der Tatsache, dass es funktioniert, wenn es an einem anderen Ort oder bei einer kleineren Anzahl von Bildern gestartet wird.
Ich habe die rekursiven Größen der Arrays und des Diktats erhalten und das Maximum war 70437978 für das Diktat, das keine Grenzen überschreiten sollte, daher weiß ich nicht, woher das Problem kommt...

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post