Skip to content

Commit 00c99d8

Browse files
committed
implement driver camera preview in settings
rebase master
1 parent 8220599 commit 00c99d8

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

selfdrive/ui/layouts/settings/device.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
from openpilot.system.ui.lib.application import Widget
22
from openpilot.system.ui.lib.list_view import ListView, text_item, button_item
3+
from openpilot.selfdrive.ui.onroad.driver_camera_view import DriverCameraView
34
from openpilot.common.params import Params
45
from openpilot.system.hardware import TICI
6+
from openpilot.system.ui.lib.application import gui_app
7+
58

69
# Description constants
710
DESCRIPTIONS = {
@@ -26,7 +29,7 @@ def __init__(self):
2629
text_item("Dongle ID", dongle_id),
2730
text_item("Serial", serial),
2831
button_item("Pair Device", "PAIR", DESCRIPTIONS['pair_device'], self._on_pair_device),
29-
button_item("Driver Camera", "PREVIEW", DESCRIPTIONS['driver_camera'], self._on_driver_camera),
32+
button_item("Driver Camera", "PREVIEW", DESCRIPTIONS['driver_camera'], callback=self._on_driver_camera),
3033
button_item("Reset Calibration", "RESET", DESCRIPTIONS['reset_calibration'], self._on_reset_calibration),
3134
button_item("Review Training Guide", "REVIEW", DESCRIPTIONS['review_guide'], self._on_review_training_guide),
3235
]
@@ -37,12 +40,18 @@ def __init__(self):
3740
items.append(button_item("Change Language", "CHANGE", callback=self._on_change_language))
3841

3942
self._list_widget = ListView(items)
43+
self._driver_camera = DriverCameraView()
4044

4145
def _render(self, rect):
4246
self._list_widget.render(rect)
4347

48+
def _on_driver_camera(self):
49+
if not self._driver_camera:
50+
self._driver_camera = DriverCameraView()
51+
52+
gui_app.set_modal_overlay(self._driver_camera, callback=lambda result: setattr(self, '_driver_camera', None))
53+
4454
def _on_pair_device(self): pass
45-
def _on_driver_camera(self): pass
4655
def _on_reset_calibration(self): pass
4756
def _on_review_training_guide(self): pass
4857
def _on_regulatory(self): pass

selfdrive/ui/onroad/driver_camera_view.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@
99

1010

1111
class DriverCameraView(CameraView):
12-
def __init__(self, stream_type: VisionStreamType):
13-
super().__init__("camerad", stream_type)
12+
def __init__(self):
13+
super().__init__("camerad", VisionStreamType.VISION_STREAM_DRIVER)
1414
self.driver_state_renderer = DriverStateRenderer()
1515

1616
def _render(self, rect):
1717
super()._render(rect)
1818

19+
if rl.is_mouse_button_pressed(rl.MouseButton.MOUSE_BUTTON_LEFT):
20+
return 1
21+
1922
if not self.frame:
2023
gui_label(
2124
rect,
@@ -24,13 +27,15 @@ def _render(self, rect):
2427
font_weight=FontWeight.BOLD,
2528
alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER,
2629
)
27-
return
30+
return -1
31+
32+
self._draw_face_detection(rect)
33+
self.driver_state_renderer.draw(rect)
2834

29-
self._draw_face_detection(rect, ui_state.sm)
30-
self.driver_state_renderer.draw(rect, ui_state.sm)
35+
return -1
3136

32-
def _draw_face_detection(self, rect: rl.Rectangle, sm) -> None:
33-
driver_state = sm["driverStateV2"]
37+
def _draw_face_detection(self, rect: rl.Rectangle) -> None:
38+
driver_state = ui_state.sm["driverStateV2"]
3439
is_rhd = driver_state.wheelOnRightProb > 0.5
3540
driver_data = driver_state.rightDriverData if is_rhd else driver_state.leftDriverData
3641
face_detect = driver_data.faceProb > 0.7
@@ -84,7 +89,7 @@ def _calc_frame_matrix(self, rect: rl.Rectangle) -> np.ndarray:
8489
if __name__ == "__main__":
8590
gui_app.init_window("Driver Camera View")
8691

87-
driver_camera_view = DriverCameraView(VisionStreamType.VISION_STREAM_DRIVER)
92+
driver_camera_view = DriverCameraView()
8893
try:
8994
for _ in gui_app.render():
9095
ui_state.update()

0 commit comments

Comments
 (0)