Renew camera detection

This commit is contained in:
2023-06-10 11:10:33 +02:00
parent 27039171cf
commit 4524a0a32b
5 changed files with 205 additions and 37 deletions
@@ -1,22 +1,24 @@
import cv2
import numpy as np
from game import Game
# from Track import nothing
# Farbwerte für die Erkennung (Beispiel: Rot, Grün, Blau)
# # Farbwerte für die Erkennung (Beispiel: Rot, Grün, Blau)
colors = [(0, 0, 255), (0, 255, 0), (255, 0, 0)]
color_names = ["Rot", "Gruen", "Blau"]
# video cap
# Farbgrenzen für die Erkennung
lower_red = np.array([0, 100, 100])
upper_red = np.array([10, 255, 255])
lower_red = np.array([80, 160, 150])
upper_red = np.array([255, 255, 255])
lower_green = np.array([40, 100, 100])
upper_green = np.array([70, 255, 255])
lower_green = np.array([40, 50, 160])
upper_green = np.array([80, 255, 255])
lower_blue = np.array([90, 100, 100])
lower_blue = np.array([95, 180, 90])
upper_blue = np.array([130, 255, 255])
CURRENT_SCORES= {'score_red': 0,
'score_green': 0,
'score_blue': 0
@@ -82,37 +84,41 @@ def erkennung_farben(img):
def ermittle_position(results, img_width):
positions = []
# pos_to_num = {"Rechts": 3,
# "Mitte": 2,
# "Links": 1,
# "Nicht gefunden": 0}
for result in results:
if result is None:
position = "Nicht gefunden"
position = 0
else:
x = result[0]
if x < img_width / 3:
position = "Rechts"
position = 3
elif x < 2 * img_width / 3:
position = "Mitte"
position = 2
else:
position = "Links"
position = 1
positions.append(position)
return positions
def count_colors(red: int, green: int, blue: int) -> None:
currrent_scores = {'score_red': red,
'score_green': green,
'score_blue': blue
}
Game.set_scoreboard(currrent_scores)
# def count_colors(my_game: Game, red: int, green: int, blue: int) -> None:
# currrent_scores = {'score_red': red,
# 'score_green': green,
# 'score_blue': blue
# }
# my_game.set_scoreboard(currrent_scores)
# Hauptprogramm
if __name__ == "__main__":
# Videoquelle öffnen (kann auch eine Bilddatei sein)
video = cv2.VideoCapture(1) # Hier "0" für die Kamera verwenden
def main():
# Videoquelle öffnen (kann auch eine Bilddatei sein)
video = cv2.VideoCapture(0) # Hier "0" für die Kamera verwenden
while True:
# Einzelbild von der Videoquelle lesen
ret, frame = video.read()
ret, frame = video.read(0)
# Fehlerbehandlung, wenn kein Bild gelesen werden kann
if not ret:
@@ -121,12 +127,14 @@ if __name__ == "__main__":
farben_img, ergebnisse, count_red, count_green, count_blue = erkennung_farben(frame)
# Add counted colours to the scoreboard in the correct field
count_colors(count_red, count_green, count_blue)
# count_colors(count_red, count_green, count_blue)
# Anzahl der Farben anzeigen
cv2.putText(farben_img, f"Rot: {count_red}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, colors[0], 2)
cv2.putText(farben_img, f"Gruen: {count_green}", (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 1, colors[1], 2)
cv2.putText(farben_img, f"Blau: {count_blue}", (10, 90), cv2.FONT_HERSHEY_SIMPLEX, 1, colors[2], 2)
# cv2.putText(farben_img, f"Rot: {count_red}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, colors[0], 2)
# cv2.putText(farben_img, f"Gruen: {count_green}", (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 1, colors[1], 2)
# cv2.putText(farben_img, f"Blau: {count_blue}", (10, 90), cv2.FONT_HERSHEY_SIMPLEX, 1, colors[2], 2)
# Positionen ermitteln
img_width = frame.shape[1]
@@ -141,13 +149,17 @@ if __name__ == "__main__":
cv2.line(farben_img, (img_width // 3, 0), (img_width // 3, frame.shape[0]), (0, 0, 0), 2)
cv2.line(farben_img, (2 * img_width // 3, 0), (2 * img_width // 3, frame.shape[0]), (0, 0, 0), 2)
# Bild anzeigen
# Bild anzeigen
cv2.imshow("Farberkennung", farben_img)
# Auf "q" drücken, um die Schleife zu beenden
# Auf "q" drücken, um die Schleife zu beenden
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Videoquelle und Fenster schließen
# Videoquelle und Fenster schließen
video.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()