@Dead_Eye
Was ist die ungarische Notation?
Edit: WTF das scheint wirklich ein Begriff in der Programmierung zu sein. Schau grad auf Wiki nach.
Gibt es auch die Thüringer Notation?
Wand TypeError
@Sirius3 hat sich erledigt habe gerade gegoogelt ^^ Diese ungarische Notation ist doch nichts anderes als camelCase wenn ich das gerade richtig gesehen habe !??
So zurück zum Thema da hätte ich nämlich gleich noch eine Frage
In der Methode check_color wird nun der Bereich des Bildes durchlaufen wo das Video dann platziert werden soll.
Das klappt auch ganz gut allerdings frage ich mich ob es nicht möglich wäre mit einfach den kompletten Bereich zu überprüfen und sich somit die while zu sparen!??
Des weiteren würde ich gerne noch einfügen das der Hintergrund nicht 100% weiß sein muss sondern auch kleine Abweichungen erlaubt sind dazu ist mir allerdings leider noch keine "gute" Idee gekommen
kurz noch zur Erklärung: left_pixel und upper_pixel bilden im Koordinatensystem die (x,y)-Werte der obere linke Ecke des Videobereichs right_pixel und lower_pixel die untere rechte Ecke.
So zurück zum Thema da hätte ich nämlich gleich noch eine Frage

In der Methode check_color wird nun der Bereich des Bildes durchlaufen wo das Video dann platziert werden soll.
Das klappt auch ganz gut allerdings frage ich mich ob es nicht möglich wäre mit
Code: Alles auswählen
box = (left_pixel, upper_pixel, right_pixel, lower_pixel)
Des weiteren würde ich gerne noch einfügen das der Hintergrund nicht 100% weiß sein muss sondern auch kleine Abweichungen erlaubt sind dazu ist mir allerdings leider noch keine "gute" Idee gekommen

kurz noch zur Erklärung: left_pixel und upper_pixel bilden im Koordinatensystem die (x,y)-Werte der obere linke Ecke des Videobereichs right_pixel und lower_pixel die untere rechte Ecke.
Code: Alles auswählen
def convert(self, file_path, filename, new_project_path, new_project_name):
folder = Path(new_project_path, new_project_name)
folder.mkdir(exist_ok=True)
input_file = Path(file_path, filename)
pages = convert_from_path(str(input_file), 250)
files = []
for page_number, page in enumerate(pages, start=1):
target = folder / f"{page_number:03d}.jpg"
page.save(str(target), 'JPEG')
for file in os.listdir(folder):
files.append(file)
files.sort()
def check_color(self, file_path, filename, left_pixel, upper_pixel, right_pixel, lower_pixel):
input_file = Path(file_path, filename)
img = Image.open(input_file)
width, height = img.size #1260x945
#box = (left_pixel, upper_pixel, right_pixel, lower_pixel)
imgload = img.load()
x = left_pixel
y = upper_pixel
window_width = right_pixel - left_pixel
while True:
point = imgload[x, y]
if point == (255, 255, 255):
x += 1
if x == width:
x -= window_width
y += 1
elif x == right_pixel and y == lower_pixel:
return True
else:
return False
Du wirst nicht darum herumkommen, dir die Pixel anzuschauen. Aber natuerlich kannst du das mit anderen Methoden wie eben zb der OpenCV machen. Da gibt es dann Operationen, die auf dem gesamten Bildausschnitt arbeiten, und dir zB ein Histogramm der Grauwerte liefern, das du auswerten kannst. Oder Kontouren ermittelt, die du zaehlen kannst. Und mit oder ohne adaptive Thresholding vorher. Etc. Das ist dann halt computer vision. Wenn du da Fortschritte erzielen willst, ist es hilfreich dir eine Sammlung von positiv und negativ Beispielen zu erstellen, und deine Bewertungsfunktion einfach darauf anzuwenden, um zu sehen, ob sie die Beispiele richtig klassifiziert.
- __blackjack__
- User
- Beiträge: 14028
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Felix92: Ungarische Notation hat nichts mit CamelCase zu tun, das geht auch nur mit Kleinbuchstaben und Unterstrichen.
Eine ``while``-Schleife falsch, auch wenn man sich die Pixel tatsächlich in Python-Code einzeln anschaut. Das ist ein Fall für ``for``-Schleifen.
Man könnte sich das Bild in ein Numpy-Array umwandeln, dann kann man sich Schleifen in Python sparen. Vorher vielleicht in ein Graustufenbild umwandeln, und hinterher 255 von dem Array abziehen und schauen ob absolute Werte über einer bestimmten Grenze übrig bleiben.
Und die ”Methoden” sind auch wieder/immer noch keine Methoden sondern einfach nur Funktionen die nichts in einer Klasse verloren haben. In der Klasse sollte man da mindestens mal `staticmethod()` verwenden, damit das klarer ist, das die überhaupt nicht vom Objekt abhängen.
Warum ist das denn in einer Klasse definiert? Du erwähntest ja einen Softwarearchitekten – nicht das der das alles in eine ”Klasse” gesteckt hat, weil der *alles* in Klassen steckt, weil er von Sprachen kommt oder Werkzeuge/Notationen verwendet, bei denen es keine Funktionen gibt und man gezwungen ist alles in eine Klasse zu stecken.
Eine ``while``-Schleife falsch, auch wenn man sich die Pixel tatsächlich in Python-Code einzeln anschaut. Das ist ein Fall für ``for``-Schleifen.
Man könnte sich das Bild in ein Numpy-Array umwandeln, dann kann man sich Schleifen in Python sparen. Vorher vielleicht in ein Graustufenbild umwandeln, und hinterher 255 von dem Array abziehen und schauen ob absolute Werte über einer bestimmten Grenze übrig bleiben.
Und die ”Methoden” sind auch wieder/immer noch keine Methoden sondern einfach nur Funktionen die nichts in einer Klasse verloren haben. In der Klasse sollte man da mindestens mal `staticmethod()` verwenden, damit das klarer ist, das die überhaupt nicht vom Objekt abhängen.
Warum ist das denn in einer Klasse definiert? Du erwähntest ja einen Softwarearchitekten – nicht das der das alles in eine ”Klasse” gesteckt hat, weil der *alles* in Klassen steckt, weil er von Sprachen kommt oder Werkzeuge/Notationen verwendet, bei denen es keine Funktionen gibt und man gezwungen ist alles in eine Klasse zu stecken.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
- DeaD_EyE
- User
- Beiträge: 1231
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Die ungarische Notation ergibt nur bei statisch typisierten Sprachen Sinn.
Mit der Notation gibt man am Anfang der Variable an, um welchen Datentyp es sich handelt.
Python ist eine dynamische Sprache und da kann ein Name auf alle möglichen Objekte verweisen und sich zur Laufzeit ändern.
Würde man auch in Python diese Art der Notation verwenden, verleitet das den Programmierer zu falschen Annahmen.
@ontopic
Wenn du irgendeinen Container oder Sequenz hast (list, tuple, dict...) und wiederholt irgendwas mit den Daten machen musst, ist eine for-schleife die richtige Wahl.
Wenn du selbst alles zu Fuß machst, kannst auch gleich auf C umsteigen. Dort muss man alles zu Fuß machen. Nutze lieber die Konzepte, die über 20 Jahre lang gereift sind.
Iteration ist eins der wichtigsten Konzepte in Python.
Numpy wäre hier auf jeden Fall die bessere Wahl, weil diese Bibliothek auch die Slice-Notation für mehrdimensionale Arrays ermöglicht (und noch viel mehr).
Mit der Notation gibt man am Anfang der Variable an, um welchen Datentyp es sich handelt.
Python ist eine dynamische Sprache und da kann ein Name auf alle möglichen Objekte verweisen und sich zur Laufzeit ändern.
Würde man auch in Python diese Art der Notation verwenden, verleitet das den Programmierer zu falschen Annahmen.
@ontopic
Wenn du irgendeinen Container oder Sequenz hast (list, tuple, dict...) und wiederholt irgendwas mit den Daten machen musst, ist eine for-schleife die richtige Wahl.
Wenn du selbst alles zu Fuß machst, kannst auch gleich auf C umsteigen. Dort muss man alles zu Fuß machen. Nutze lieber die Konzepte, die über 20 Jahre lang gereift sind.
Iteration ist eins der wichtigsten Konzepte in Python.
Numpy wäre hier auf jeden Fall die bessere Wahl, weil diese Bibliothek auch die Slice-Notation für mehrdimensionale Arrays ermöglicht (und noch viel mehr).
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
- __blackjack__
- User
- Beiträge: 14028
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@DeaD_EyE: Das stimmt nicht so ganz, denn ungarische Notation ist eigentlich das man den ”duck type” als Präfix in den Namen schreibt. Das Microsoft und ein paar andere das einfach auf die konkreten Typen und ohne nachzudenken auf alle Namen angewendet haben, war so ja gar nicht gedacht. Und das macht gerade bei statisch typisierten Sprachen am wenigsten Sinn und kommt auch eher aus der Ecke der nicht strikt, dynamisch typsierten Sprachen. Also da wo der Benutzer selbst dafür verantwortlich ist immer den Typ zu kennen, weil der nirgends sonst kodiert ist. Also weder statisch einem Namen zugeordnet ist, noch dynamisch einem Wert.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Vielen Dank erstmal an alle ich werde mir das die Tage mal anschauen 
@__blackjack__ hier mal die Anforderungen für die Folienverarbeitung und die Erkennung des Sprechers:
ich habe es gerade selbst gesehen das es ein Modul und keine Klasse sein soll werde ich morgen noch anpassen ^^
Die Ausgabe wurde nach Absprache geändert also das mit dem Projektordner ist korrekt.


MfG Felix

@__blackjack__ hier mal die Anforderungen für die Folienverarbeitung und die Erkennung des Sprechers:
ich habe es gerade selbst gesehen das es ein Modul und keine Klasse sein soll werde ich morgen noch anpassen ^^
Die Ausgabe wurde nach Absprache geändert also das mit dem Projektordner ist korrekt.


MfG Felix
Da bin ich wieder 
Und zwar wollte ich mal nachfragen, wie ich aus dieser regionOfInterest (roi) nun quasi prüfen kann ob jeder Pixel weiß ist oder noch besser die einzelnen Pixel einen ähnlichen Farbwert besitzen, falls es leichte Abweichungen geben sollte .
Und wäre es möglich wie hier white eine Variable mit einem Farbwert zu initialisieren ?
Weil ich habe so die leichte Vermutung dass das Blödsinn ist
MfG Felix

Und zwar wollte ich mal nachfragen, wie ich aus dieser regionOfInterest (roi) nun quasi prüfen kann ob jeder Pixel weiß ist oder noch besser die einzelnen Pixel einen ähnlichen Farbwert besitzen, falls es leichte Abweichungen geben sollte .
Und wäre es möglich wie hier white eine Variable mit einem Farbwert zu initialisieren ?
Weil ich habe so die leichte Vermutung dass das Blödsinn ist

Code: Alles auswählen
def test(file, y1, y2, x1, x2):
img = cv2.imread(file, cv2.IMREAD_GRAYSCALE)
white = (255, 255)
print(img.shape)
roi = img[y1:y2, x1:x2]
print(np.all(video_place is white))
cv2.imshow('image', roi)
cv2.waitKey()
cv2.destroyAllWindows
Naja ich hatte mir in der docu die Tutorials angesehen dann noch probiert über google etwas zu finden ohne großen Erfolg und die docu an sich allerdings bin ich da nicht so schlau draus geworden, da diese wie du schon sagtest ziemlich umfangreich ist.
Ich habe dir ja eine Reihe von konkreten Ansaetzen genannt, zB Histogramme. Letztlich musst du entscheiden, welche Kriterien fuer "hier ist nichts was wichtig ist" du hast. Das kann hier keiner fuer dich tun, denn es ist dein Projekt, deine Slides, deine Kriterien.
Und wenn du *ein* Kriterium hast (zb einfach alles komplett weiss), das fuer einen gegebenen Ausschnitt funktioniert, dann kannst du das ja in Zukunft erweitern. Oder deinen Prof fragen, wie das Kriterium genauer aussehen soll.
Und wenn du *ein* Kriterium hast (zb einfach alles komplett weiss), das fuer einen gegebenen Ausschnitt funktioniert, dann kannst du das ja in Zukunft erweitern. Oder deinen Prof fragen, wie das Kriterium genauer aussehen soll.
Huhu und zwar wollte ich mal nachfragen, wie ich es hinbekomme dass in einem Bild ein Video als Overlay liegt, welches relativ zum Video abspielt.
Kurz zum Problem: ich habe eine PDF in Bilder gesplittet diese Bilder werden dann geprüft ob auf ihnen unten rechts (250x200) alles weiß ist um dort ein Bild einzufügen (soweit läuft alles) nun soll es aber auch möglich sein in diesem unteren Bereich anstatt einem Bild ein Video einzublenden.
Also kurz im unteren Beispiel sollte jetzt nur die Folie zu sehen sein und das aktuelle Video auf der Folie unten rechts wenn Platz ist ansonsten wenn kein Platz ist wird nur die Folie angezeigt.
Ich hoffe es ist einigermaßen verständlich

Das steht bisher (hat bisher mehr zum testen und probieren gedient):
check_color liefert True wenn Platz auf der Folie ist.
MfG Felix
Kurz zum Problem: ich habe eine PDF in Bilder gesplittet diese Bilder werden dann geprüft ob auf ihnen unten rechts (250x200) alles weiß ist um dort ein Bild einzufügen (soweit läuft alles) nun soll es aber auch möglich sein in diesem unteren Bereich anstatt einem Bild ein Video einzublenden.
Also kurz im unteren Beispiel sollte jetzt nur die Folie zu sehen sein und das aktuelle Video auf der Folie unten rechts wenn Platz ist ansonsten wenn kein Platz ist wird nur die Folie angezeigt.
Ich hoffe es ist einigermaßen verständlich


Das steht bisher (hat bisher mehr zum testen und probieren gedient):
check_color liefert True wenn Platz auf der Folie ist.
Code: Alles auswählen
def video_in_slide(file_path, filename, video_path, videoname, y1, y2, x1, x2):
presentation_file = Path(file_path, filename)
video_file = Path(video_path, videoname)
if check_color(file_path, filename, y1, y2, x1, x2) == True:
cap = cv2.VideoCapture(str(video_file))
if(cap.isOpened() == False):
print("Error opening video stream or file")
while(cap.isOpened()):
ret, frame = cap.read()
if ret == True:
cv2.imshow('Frame', frame)
if cv2.waitKey(25) & 0xFF == ord('q'):
break
else:
break
cap.release()
cv2.destroyAllWindows()
else:
img = cv2.imread(str(presentation_file), cv2.IMREAD_COLOR)
return img
Brauchst du keinen Ton dafuer? Woher weisst du denn, wann welche Slide dran ist?
Ansonsten ist das ganz einfach: den Frame kannst du mit imresize auf das gewuenschte Mass stutzen, und in das Image des PDFs das du ja schon als numpy-Array vorliegen hast reinpacken.
slide[y:y+hoehe,x:x+breite] = frame
Ansonsten ist das ganz einfach: den Frame kannst du mit imresize auf das gewuenschte Mass stutzen, und in das Image des PDFs das du ja schon als numpy-Array vorliegen hast reinpacken.
slide[y:y+hoehe,x:x+breite] = frame
Huhu @__deets__ also Ton geht mich nichts an da kümmern sich andere drum ein Problem weniger ^^ 
2teres ist eins der Probleme wo ich nicht so recht weiß wie ich es lösen soll ..ich hatte halt im Kopf die Bilder zu einem Video zusammenzufügen und das Video des Dozenten als Overlay an die Position zu legen wenn die Folie unten rechts Platz für hat...allerdings funktioniert dafür meine Funktion check_color vermutlich nicht wenn die Bilder dann ein Video sind !?
Ich poste hier einfach mal den kompletten Code um ein wenig klarer zu machen was bisher passiert
check_color und video_in_slide wären hier ausschlaggebend
MfG Felix
und vielen Dank für eure Hilfe

2teres ist eins der Probleme wo ich nicht so recht weiß wie ich es lösen soll ..ich hatte halt im Kopf die Bilder zu einem Video zusammenzufügen und das Video des Dozenten als Overlay an die Position zu legen wenn die Folie unten rechts Platz für hat...allerdings funktioniert dafür meine Funktion check_color vermutlich nicht wenn die Bilder dann ein Video sind !?

Ich poste hier einfach mal den kompletten Code um ein wenig klarer zu machen was bisher passiert

check_color und video_in_slide wären hier ausschlaggebend
Code: Alles auswählen
def convert(file_path, filename, new_project_path, new_project_name):
pdf_file = Path(file_path, filename)
check_pdf = fnmatch(pdf_file, '*.pdf')
if check_pdf == True:
folder = Path(new_project_path, new_project_name)
folder.mkdir(exist_ok=True)
input_file = Path(file_path, filename)
pages = convert_from_path(str(input_file), 250)
files = []
for page_number, page in enumerate(pages, start=1):
target = folder / f"{page_number:03d}.jpg"
page.save(str(target), 'JPEG')
for file in os.listdir(folder):
files.append(file)
files.sort()
else:
print("the datatype must be .pdf")
def add_file_to_project(file_path, filename, project_path, project_name):
folder = Path(project_path, project_name)
file_to_add = Path(file_path, filename)
check_jpg = fnmatch(file_to_add, '*.jpg')
check_mp4 = fnmatch(file_to_add, '*.mp4')
check_png = fnmatch(file_to_add, '*.png')
if check_jpg == True:
shutil.copy(str(file_to_add), str(folder))
elif check_mp4 == True:
shutil.copy(str(file_to_add), str(folder))
elif check_png == True:
shutil.copy(str(file_to_add), str(folder))
else:
print("the datatype must be .jpg or .mp4 or .png")
def delete_folder(project_path, project_name):
folder = Path(project_path, project_name)
shutil.rmtree(folder, ignore_errors=True)
def check_color(file_path, filename, y1, y2, x1, x2):
input_file = Path(file_path, filename)
white = 255
gray = 32
img = cv2.imread(str(input_file), cv2.IMREAD_GRAYSCALE)
roi = img[y1:y2, x1:x2]
if np.all(roi == white) == True:
return True
elif np.all(roi == gray) == True:
return True
else:
return False
def picture_in_presentation(file_path, filename, file_path_small_img, small_img, y1, y2, x1, x2, x_offset, y_offset):
large_img = Path(file_path, filename)
large_img = cv2.imread(str(large_img))
small_img = Path(file_path_small_img, small_img)
small_img = cv2.imread(str(small_img))
small_img = cv2.resize(small_img, (250, 200))
#x_offset = 1009 #only for resolution 250 # large_img width - 250
#y_offset = 710 #only for resolution 250 # large_img height - 245
if check_color(file_path, filename, y1, y2, x1, x2) == True:
large_img[y_offset:y_offset+small_img.shape[0], x_offset:x_offset+small_img.shape[1]] = small_img
#cv2.imwrite('test.jpg', large_img)
return large_img
else:
#cv2.imwrite('test.jpg', large_img)
return large_img
def video_in_slide(file_path, filename, video_path, videoname, y1, y2, x1, x2):
presentation_file = Path(file_path, filename)
video_file = Path(video_path, videoname)
if check_color(file_path, filename, y1, y2, x1, x2) == True:
cap = cv2.VideoCapture(str(video_file))
if(cap.isOpened() == False):
print("Error opening video stream or file")
while(cap.isOpened()):
ret, frame = cap.read()
if ret == True:
cv2.imshow('Frame', frame)
if cv2.waitKey(25) & 0xFF == ord('q'):
break
else:
break
cap.release()
cv2.destroyAllWindows()
else:
img = cv2.imread(str(presentation_file), cv2.IMREAD_COLOR)
return img
und vielen Dank für eure Hilfe
man prüft nicht explizit auf == True. Die ganzen check_-Variablen sind auch nicht nötig, und statt dreimal den selben if-Block würde man auch die drei Bedingungen mit and verknüpfen. Bei `Path` gibt es dann auch noch suffix:
Code: Alles auswählen
def add_file_to_project(file_path, filename, project_path, project_name):
file_to_add = Path(file_path, filename)
if file_to_add.suffix in ['.jpg', '.mp4', '.png']:
folder = Path(project_path, project_name)
shutil.copy(str(file_to_add), str(folder))
else:
print("the datatype must be .jpg or .mp4 or .png")
Naja nicht so ganz es soll halt möglich sein diese pdf Datei (Folien) quasi auszulesen wenn Platz ist soll es möglich sein selbstständig ein Bild einzufügen oder das halt das Video unten rechts eingeblendet wird, da das Video so wie in dem Bild nicht mehr da sein wird am Ende ...das ganze ist am Ende ein Schnittprogramm wo 2 Master und 8 Bachelor dran arbeiten und meine Task ist halt derzeit "nur" ein module für das wie oben beschrieben zu schreiben ..Ich hatte weiter oben auch mal die beiden Tasks gepostet wobei das Objekt gestrichen wurde und durch diesen temporären Ordner ersetzt wird.
MfG Felix
MfG Felix