Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 29c943ca5a | |||
| c130566156 | |||
| 178457e199 | |||
| c860afc609 |
+10
-7
@@ -1,23 +1,26 @@
|
||||
import cv2
|
||||
|
||||
def enhance_image_for_ai(input_path: str) -> str:
|
||||
"""Enhances dark areas and contrast using CLAHE without blowing out bright areas."""
|
||||
"""Smooths camera sensor noise and brightens dark areas for vision LLMs."""
|
||||
img = cv2.imread(input_path)
|
||||
if img is None:
|
||||
return input_path
|
||||
|
||||
# Convert to LAB color space to modify luminance channel only
|
||||
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
|
||||
# 1. Remove ISO sensor noise (grain)
|
||||
denoised = cv2.fastNlMeansDenoisingColored(img, None, h=7, hColor=7, templateWindowSize=7, searchWindowSize=21)
|
||||
|
||||
# 2. Convert to LAB color space for luminance enhancement
|
||||
lab = cv2.cvtColor(denoised, cv2.COLOR_BGR2LAB)
|
||||
l, a, b = cv2.split(lab)
|
||||
|
||||
# Apply CLAHE to Lightness channel
|
||||
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8, 8))
|
||||
# 3. Apply softer CLAHE (lower clipLimit prevents noise amplification)
|
||||
clahe = cv2.createCLAHE(clipLimit=1.8, tileGridSize=(8, 8))
|
||||
cl = clahe.apply(l)
|
||||
|
||||
# Merge channels and convert back to BGR
|
||||
# 4. Merge channels back
|
||||
limg = cv2.merge((cl, a, b))
|
||||
enhanced = cv2.cvtColor(limg, cv2.COLOR_LAB2BGR)
|
||||
|
||||
enhanced_path = input_path.replace(".jpg", "_enhanced.jpg")
|
||||
cv2.imwrite(enhanced_path, enhanced)
|
||||
cv2.imwrite(enhanced_path, enhanced, [cv2.IMWRITE_JPEG_QUALITY, 90])
|
||||
return enhanced_path
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
# Configuration des ports (À remplacer par tes propres chemins by-path)
|
||||
# Pour trouver tes chemins : ls -l /dev/serial/by-path/
|
||||
PORT_ESP_WIFI="/dev/serial/by-path/pci-0000:00:14.0-usbv2-0:6.1:1.0-port0"
|
||||
PORT_ESP_LORA="/dev/serial/by-path/pci-0000:00:14.0-usbv2-0:6.2:1.0-port0"
|
||||
PORT_ESP_WIFI="/dev/serial/by-path/pci-0000:00:14.0-usb-0:2.1:1.0-port0"
|
||||
PORT_ESP_LORA="/dev/serial/by-path/pci-0000:00:14.0-usb-0:2.2:1.0-port0"
|
||||
# Ajoute les autres si besoin...
|
||||
|
||||
# Configuration Raspberry Pi
|
||||
|
||||
@@ -80,7 +80,7 @@ class MicrowaveScreen:
|
||||
|
||||
# self.lastUpdateTime = time.time() # Not Used right now
|
||||
|
||||
if (not microwave_state or microwave_state == MicrowaveState.DONE) and (not cooking_state or cooking_state.state == CookingStates.IDLE): # Is not currently cooking
|
||||
if (not microwave_state or microwave_state in (MicrowaveState.DONE, MicrowaveState.IDLE)) and (not cooking_state or cooking_state.state == CookingStates.IDLE): # Is not currently cooking
|
||||
self.h_centered_text("Ready !", 28, 1)
|
||||
else:
|
||||
# Screen center
|
||||
|
||||
+5
-1
@@ -1,6 +1,10 @@
|
||||
import time
|
||||
try:
|
||||
import asyncio
|
||||
import inspect
|
||||
ASYNCIO = True
|
||||
except ImportError:
|
||||
ASYNCIO = False
|
||||
|
||||
class AlertManager:
|
||||
def __init__(self):
|
||||
@@ -12,7 +16,7 @@ class AlertManager:
|
||||
|
||||
def call_on_alert_callback(self, alert):
|
||||
if self.on_alert_callback:
|
||||
if inspect.iscoroutinefunction(self.on_alert_callback):
|
||||
if ASYNCIO and inspect.iscoroutinefunction(self.on_alert_callback):
|
||||
# Schedule coroutine on the running loop without blocking
|
||||
try:
|
||||
loop = asyncio.get_running_loop()
|
||||
|
||||
Reference in New Issue
Block a user