Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
JonneSaloranta committed Mar 20, 2024
2 parents 54d715e + 561577f commit b207b7c
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 13 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ venv
*.yaml
__pycache__
tests
.vscode
.vscode
*.old
2 changes: 1 addition & 1 deletion client.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def receive():
message = client.recv(1024).decode('utf-8')
print(message)
except Exception as e:
print("An error occured!")
print(f"Error receiving message: {e}")
client.close()
break

Expand Down
27 changes: 21 additions & 6 deletions gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ def create_gui(self):
self.console_box.grid(row=0, column=5, columnspan=4, padx=10, pady=10, sticky="w")
self.console_box.config(state="disabled")

self.draw_boxes_checkbox = tk.Checkbutton(self.gui_frame, text=f"{self.labels.get('draw_boxes_label')}")
#self.draw_boxes_checkbox = tk.Checkbutton(self.gui_frame, text=f"{self.labels.get('draw_boxes_label')}")
#TODO: Add functionality to toggle drawing detection boxes

# Buttons
Expand All @@ -95,6 +95,7 @@ def create_gui(self):
self.emergency_button = tk.Button(self.gui_frame, text=f"{self.labels.get('emergency_stop_label')}", command=self.emergency_stop)
self.load_detection_model_button = tk.Button(self.gui_frame, text=f"{self.labels.get('load_model_label')}", command=self.load_detection_model)
# self.load_cameras_button = tk.Button(self.gui_frame, text=f"{self.labels.get('load_cameras_label')}", command=self.update_webcam_list)
self.reset_button = tk.Button(self.gui_frame, text=f"{self.labels.get('reset_button_label')}", command=self.reset)

self.connect_camera_button.grid(row=0, column=4, padx=10, pady=10, sticky="w")
self.connect_camera_button.config(state="disabled")
Expand All @@ -103,6 +104,7 @@ def create_gui(self):
self.stop_button.grid(row=2, column=3, padx=10, pady=10, sticky="w")
self.emergency_button.grid(row=3, column=3, columnspan=2, padx=10, pady=10, sticky="w")
self.load_detection_model_button.grid(row=4, column=1, padx=10, pady=10, sticky="w")
self.reset_button.grid(row=4, column=2, padx=10, pady=10, sticky="w")



Expand Down Expand Up @@ -165,12 +167,12 @@ def update_frame(self):
self.console_box.see(tk.END)
self.console_box.config(state="disabled")

if self.now + 1000 < int(round(time.time() * 1000)):
if self.now + 250 < int(round(time.time() * 1000)):
self.now = int(round(time.time() * 1000))
if self.socketclient.is_connected() and self.state == State.RUNNING:
if len(detected_objects) > 0:
# self.socketclient.send_message(f"{self.class_names[cls]}: {confidence}")
self.socketclient.send_message(f"{detected_objects[0]}")
self.socketclient.send_message(f"{detected_objects[0]}\n")


# Convert the annotated frame back to ImageTk format
Expand Down Expand Up @@ -241,12 +243,13 @@ def stop_camera(self):

def emergency_stop(self):
self.status_label.config(text=f"{self.labels.get('status_label')}: {State.EMERGENCY_STOPPED.name}")
self.socketclient.send_message("EMERGENCY")
self.socketclient.send_message("Emergency")
self.state = State.EMERGENCY_STOPPED

self.start_button.config(state="normal")
self.stop_button.config(state="normal")
self.start_button.config(state="disabled")
self.stop_button.config(state="disabled")
self.emergency_button.config(state="disabled")
self.reset_button.config(state="normal")

def start(self):
self.status_label.config(text=f"{self.labels.get('status_label')}: {State.RUNNING.name}")
Expand All @@ -255,6 +258,7 @@ def start(self):
self.start_button.config(state="disabled")
self.stop_button.config(state="normal")
self.emergency_button.config(state="normal")
self.reset_button.config(state="normal")

def stop(self):
self.status_label.config(text=f"{self.labels.get('status_label')}: {State.STOPPED.name}")
Expand All @@ -264,6 +268,17 @@ def stop(self):
self.start_button.config(state="normal")
self.stop_button.config(state="disabled")
self.emergency_button.config(state="normal")
self.emergency_button.config(state="normal")

def reset(self):
self.status_label.config(text=f"{self.labels.get('status_label')}: {State.IDLE.name}")
self.socketclient.send_message("Reset")
self.state = State.IDLE

self.start_button.config(state="normal")
self.stop_button.config(state="normal")
self.emergency_button.config(state="normal")
self.reset_button.config(state="normal")

def set_screen_blank(self):
blank_image = Image.new('RGB', (640, 480), (0, 0, 0))
Expand Down
1 change: 1 addition & 0 deletions run_client.bat
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
@echo off
title Client
call .\venv\Scripts\activate.bat
"py" "client.py"
pause
1 change: 1 addition & 0 deletions run_server.bat
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
@echo off
title Server
call .\venv\Scripts\activate.bat
"py" "server.py"
pause
18 changes: 14 additions & 4 deletions server.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,22 +34,32 @@


def broadcast(message):
for client in clients:
client.send(message)
for client in clients[:]: # Iterate over a copy of the list
try:
client.send(message)
except Exception as e:
print(f"Error broadcasting to client: {e}")
clients.remove(client)
client.close() # Ensure client socket is properly closed

def broadcast_except(message, sender):
for client in clients:
if client != sender:
client.send(message)
try:
client.send(message)
except Exception as e:
print(f"Error broadcasting to client: {e}")
clients.remove(client)

def handle_client(client):
while True:
try:
message = client.recv(1024)
if not message:
raise ConnectionError("Client disconnected")

# add newline to the end of the message
decoded_message = message.decode('utf-8')
decoded_message = decoded_message.strip() + '\n'
broadcast(decoded_message.encode('utf-8'))
print(f"Message from {client.getpeername()}: {decoded_message}")
except ConnectionError:
Expand Down
3 changes: 2 additions & 1 deletion src/labels.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ def __init__(self):
self.mgr = SettingsManager("messages.yaml")

messages = {
"window_title_label": "Linjasto Valvomo",
"window_title_label": "AI Sorter",
"confirm_exit": "Do you want to quit?",
"start_button_label": "Start",
"stop_button_label": "Stop",
Expand Down Expand Up @@ -37,6 +37,7 @@ def __init__(self):
'disconnected_from_server': 'Disconnected from server!',
'opening_camera': 'Opening camera...',
'draw_boxes_label': 'Draw boxes',
'reset_button_label': 'Reset',
}
self.settings = self.mgr.load_or_create_settings(messages)

Expand Down

0 comments on commit b207b7c

Please sign in to comment.