13.1.13.4.4. 전체 예제#
Create Default Config 는 아래 파일을 작성하고 엽니다. 이것은 데모이며 – 실제 장치 설정이 아닙니다 – 모든 컨트롤 유형을 한 번에 시연하기 위해 만들어졌습니다: 레이블, 두 종류의 컨테이너, 일곱 개의 값 컨트롤 전부, options/values 매핑, 삼중 상태 체크박스, 16진수 스핀박스, 입력 마스크, 정규식, 비밀번호 필드, 그리고 비활성화된 필드. 각 키를 맥락 속에서 보려면 레퍼런스 페이지와 함께 읽은 다음, 자신의 애플리케이션에 필요한 설정만 남기고 줄이세요.
{
"title": "Camera Settings",
"controls": [
{
"type": "label",
"align": "center",
"text": "<b>This is a demo configuration.</b><br/>The controls below are examples that show off every setting type you can build — they are <i>not</i> a real device config. Replace them with the controls your own application needs, then edit the values, click <b>Save</b>, and read them back in your script with <code>json.load()</code>. See the <a href='https://docs.openmv.io'>documentation</a> for details."
},
{
"type": "tabs",
"tab_position": "north",
"tabs": [
{
"title": "Camera",
"tooltip": "Sensor and capture settings",
"controls": [
{ "type": "label", "text": "<b>Image capture</b>" },
{
"type": "group",
"title": "Manual Exposure",
"checkable": true,
"name": "manual_exposure",
"value": false,
"controls": [
{ "type": "slider", "name": "exposure_us", "label": "Exposure", "value": 10000, "min": 0, "max": 33000, "step": 100, "suffix": " us", "ticks": 5500, "tooltip": "Shutter time in microseconds" },
{ "type": "slider", "name": "gain_db", "label": "Gain", "value": 8, "min": 0, "max": 24, "suffix": " dB", "ticks": 4 }
]
},
{
"type": "group",
"title": "Format",
"controls": [
{ "type": "combobox", "name": "resolution", "label": "Resolution", "value": "qvga", "options": ["QQVGA", "QVGA", "VGA"], "values": ["qqvga", "qvga", "vga"] },
{ "type": "combobox", "name": "pixformat", "label": "Pixel Format", "value": 1, "options": ["Grayscale", "RGB565"] },
{ "type": "checkbox", "name": "h_mirror", "label": "Horizontal Mirror", "value": false },
{ "type": "checkbox", "name": "v_flip", "label": "Vertical Flip", "value": false },
{ "type": "slider", "name": "digital_zoom", "label": "Digital Zoom", "value": 1, "min": 1, "max": 8, "prefix": "x", "ticks": 1 }
]
}
]
},
{
"title": "Processing",
"tooltip": "Detection and overlays",
"controls": [
{
"type": "group",
"title": "Detection",
"controls": [
{ "type": "radio", "name": "mode", "label": "Mode", "value": "idle", "options": ["Idle", "Track", "Record"], "values": ["idle", "track", "record"], "orientation": "horizontal" },
{ "type": "slider", "name": "threshold", "label": "<b>Threshold</b>", "value": 50, "min": 0, "max": 100, "suffix": " %", "ticks": 25 },
{ "type": "spinbox", "name": "min_area", "label": "Min Area", "value": 100, "min": 0, "max": 10000, "suffix": " px", "special_value_text": "Off", "group_separator": true },
{ "type": "doublespinbox", "name": "sensitivity", "label": "Sensitivity", "value": 50, "min": 0, "max": 100, "step": 0.5, "decimals": 1, "suffix": " %", "special_value_text": "Auto" },
{ "type": "checkbox", "name": "draw_overlays", "label": "Draw Overlays", "value": true }
]
},
{
"type": "group",
"title": "Recording",
"controls": [
{ "type": "radio", "name": "quality", "label": "Quality", "value": 1, "options": ["Low", "Medium", "High"] },
{ "type": "checkbox", "name": "capture_mode", "label": "Capture (off / single / continuous)", "tristate": true, "value": 1 }
]
}
]
},
{
"title": "Network",
"tooltip": "Wi-Fi and server",
"controls": [
{ "type": "label", "text": "<i>Network configuration</i>" },
{
"type": "group",
"title": "Wi-Fi",
"checkable": true,
"name": "wifi_enabled",
"value": true,
"controls": [
{ "type": "lineedit", "name": "wifi_ssid", "label": "SSID", "value": "", "placeholder": "Network name", "max_length": 32, "clear_button": true },
{ "type": "lineedit", "name": "wifi_password", "label": "Password", "value": "", "password": true, "clear_button": true },
{ "type": "lineedit", "name": "static_ip", "label": "Static IP", "value": "192.168.001.100", "mask": "000.000.000.000;_", "tooltip": "Set to 0.0.0.0 for DHCP" }
]
},
{
"type": "group",
"title": "Server",
"controls": [
{ "type": "spinbox", "name": "server_port", "label": "Port", "value": 8080, "min": 0, "max": 65535, "group_separator": true },
{ "type": "lineedit", "name": "hostname", "label": "Hostname", "value": "openmv-cam", "regex": "[A-Za-z0-9-]+", "placeholder": "letters, digits, dashes", "clear_button": true }
]
}
]
},
{
"title": "System",
"tooltip": "Device and power",
"controls": [
{
"type": "group",
"title": "Device",
"controls": [
{ "type": "lineedit", "name": "device_name", "label": "Device Name", "value": "openmv-cam", "clear_button": true },
{ "type": "combobox", "name": "led", "label": "LED", "value": 0, "options": ["Off", "Red", "Green", "Blue"] },
{ "type": "spinbox", "name": "i2c_address", "label": "I2C Address", "value": 48, "min": 0, "max": 255, "base": 16, "prefix": "0x" },
{ "type": "lineedit", "name": "firmware", "label": "Firmware", "value": "4.5.0", "enabled": false }
]
},
{
"type": "group",
"title": "Power",
"controls": [
{ "type": "radio", "name": "power_mode", "label": "Power Mode", "value": "balanced", "options": ["Performance", "Balanced", "Low Power"], "values": ["perf", "balanced", "low"] },
{ "type": "slider", "name": "led_brightness", "label": "LED Brightness", "value": 80, "min": 0, "max": 100, "suffix": " %", "ticks": 20 }
]
},
{
"type": "group",
"title": "Storage",
"controls": [
{ "type": "doublespinbox", "name": "storage_limit", "label": "Storage Limit", "value": 1024.5, "min": 0, "max": 65536, "step": 0.5, "decimals": 1, "prefix": "max ", "suffix": " MB", "group_separator": true }
]
}
]
}
]
},
{
"type": "label",
"align": "right",
"text": "<i>Edit the values, then click Save.</i>"
}
]
}
13.1.13.4.4.1. 다시 읽어오기#
이 레이아웃을 직접 작성했으므로 각 값에 이르는 경로를 알고 있습니다. 개요 에 나오는 find 헬퍼를 사용하여 탭과 컨트롤의 이름을 지정하세요 – find 는 탭 스트립과 그 사이에 있는 이름 없는 그룹을 차례로 거쳐 갑니다:
enabled = find(config, "Camera", "manual_exposure")["value"] # the group's checkbox
exposure = find(config, "Camera", "manual_exposure", "exposure_us")["value"] # 10000
resolution = find(config, "Camera", "resolution")["value"] # "qvga"
Manual Exposure 그룹에는 name 이 있으므로 경로의 한 단계가 됩니다 – 그리고 find(config, "Camera", "manual_exposure") 가 그 체크박스를 읽습니다. Format 그룹에는 name 이 없으므로 투명하게 처리됩니다: resolution 은 Camera 탭에서 곧바로 도달합니다.
values 배열을 가진 combobox 가 사용자가 선택한 레이블("QVGA")이 아니라 저장된 값("qvga")을 반환하는 점에 유의하세요 – 스크립트가 분기 조건으로 삼고 싶은 바로 그 값입니다.