105 lines
5.3 KiB
Python
105 lines
5.3 KiB
Python
# coding=utf-8
|
||
|
||
import os
|
||
import time
|
||
|
||
CAIHUI_DATABASE = {
|
||
'name': os.environ.get('DISH_DB_NAME', 'goods'),
|
||
'host': os.environ.get('CARC_CRAWLER_DB_HOST', '127.0.0.1'),
|
||
'port': int(os.environ.get('CARC_CRAWLER_DB_PORT', 3306)),
|
||
'user': os.environ.get('CARC_CRAWLER_DB_USER', 'root'),
|
||
'password': os.environ.get('CARC_CRAWLER_DB_PASSWORD', '123456'),
|
||
}
|
||
|
||
# SQLite 本地临时缓存(识别读此库;变更后从 MySQL 拉取刷新)
|
||
DISH_SQLITE_PATH = os.environ.get(
|
||
'DISH_SQLITE_PATH',
|
||
os.path.join(os.path.dirname(__file__), 'dish_templates.db'),
|
||
)
|
||
|
||
# 本机基地编码(学菜写入 source_base_id;结果 API 的 base_id 默认也用它)
|
||
# 建议填管理系统返回的 code,例如「上海路基地-1788059884828-e55vu」
|
||
DISH_BASE_CODE = os.environ.get('DISH_BASE_CODE', 'BASE_LOCAL_01')
|
||
DISH_BASE_NAME = os.environ.get('DISH_BASE_NAME', '奥体基地')
|
||
DISH_BASE_REGION = os.environ.get('DISH_BASE_REGION', '')
|
||
|
||
# 管理系统:公开接口(X-API-Key)
|
||
# 完整 Key 见 docs/第三方接口文档_mgmt.md(含 dish_ 前缀)
|
||
DISH_MGMT_API_ORIGIN = os.environ.get(
|
||
'DISH_MGMT_API_ORIGIN',
|
||
'https://cpsb.ruimeida.cc',
|
||
).rstrip('/')
|
||
DISH_MGMT_API_URL = os.environ.get(
|
||
'DISH_MGMT_API_URL',
|
||
f'{DISH_MGMT_API_ORIGIN}/api/public/bases',
|
||
)
|
||
DISH_MGMT_RESULT_API_URL = os.environ.get(
|
||
'DISH_MGMT_RESULT_API_URL',
|
||
f'{DISH_MGMT_API_ORIGIN}/api/public/recognition-orders',
|
||
)
|
||
DISH_MGMT_MEAL_API_URL = os.environ.get(
|
||
'DISH_MGMT_MEAL_API_URL',
|
||
f'{DISH_MGMT_API_ORIGIN}/api/public/meal-schedules/today',
|
||
)
|
||
DISH_MGMT_DEVICE_STATUS_URL = os.environ.get(
|
||
'DISH_MGMT_DEVICE_STATUS_URL',
|
||
f'{DISH_MGMT_API_ORIGIN}/api/public/devices/status',
|
||
)
|
||
DISH_MGMT_DISHES_API_URL = os.environ.get(
|
||
'DISH_MGMT_DISHES_API_URL',
|
||
f'{DISH_MGMT_API_ORIGIN}/api/public/dishes',
|
||
)
|
||
DISH_MGMT_DISH_LEARNING_STATUS_URL = os.environ.get(
|
||
'DISH_MGMT_DISH_LEARNING_STATUS_URL',
|
||
f'{DISH_MGMT_API_ORIGIN}/api/public/dishes/learning-status',
|
||
)
|
||
DISH_MGMT_API_KEY = os.environ.get(
|
||
'DISH_MGMT_API_KEY',
|
||
'dish_a4f7a1287198179fdc6a6571aa14064c2afc6338c6730e2b668ac5be15bdf769',
|
||
)
|
||
DISH_MGMT_API_TIMEOUT = float(os.environ.get('DISH_MGMT_API_TIMEOUT', '10'))
|
||
DISH_MGMT_SYNC_ON_START = os.environ.get('DISH_MGMT_SYNC_ON_START', '1') == '1'
|
||
DISH_MGMT_MEAL_ON_START = os.environ.get('DISH_MGMT_MEAL_ON_START', '1') == '1'
|
||
|
||
# 本机设备(上报设备状态)
|
||
DISH_DEVICE_CODE = os.environ.get('DISH_DEVICE_CODE', '') or os.environ.get('DISH_BASE_CODE', DISH_BASE_CODE)
|
||
DISH_DEVICE_NAME = os.environ.get('DISH_DEVICE_NAME', '') or os.environ.get('DISH_BASE_NAME', DISH_BASE_NAME)
|
||
DISH_DEVICE_STATUS_INTERVAL = int(os.environ.get('DISH_DEVICE_STATUS_INTERVAL', '60')) # 秒
|
||
DISH_DEVICE_STATUS_ENABLED = os.environ.get('DISH_DEVICE_STATUS_ENABLED', '1') == '1'
|
||
|
||
# 启动时是否从 MySQL 拉取;后台定时同步间隔(秒,含上传队列 flush + 拉取)
|
||
DISH_SYNC_ON_START = os.environ.get('DISH_SYNC_ON_START', '1') == '1'
|
||
DISH_SYNC_INTERVAL = int(os.environ.get('DISH_SYNC_INTERVAL', 300)) # 默认 5 分钟
|
||
|
||
# 识别框是否显示「似xx 检xx」(默认关;需要时 set DISH_SHOW_BOX_SCORES=1)
|
||
DISH_SHOW_BOX_SCORES = os.environ.get('DISH_SHOW_BOX_SCORES', '0') == '1'
|
||
|
||
# 当前餐段匹配:有当日排餐时仅在「今日当前餐段」菜品中比对,未命中直接未知(不回退大库)
|
||
# 1) 最高分 ≥ 0.80 → 认定;2) 未达 0.80 但最高分 > 0.75 → 仍认定;否则未知
|
||
DISH_MEAL_SMALL_LIB_THRESHOLD = float(os.environ.get('DISH_MEAL_SMALL_LIB_THRESHOLD', '0.80'))
|
||
DISH_MEAL_SMALL_LIB_SOFT_THRESHOLD = float(os.environ.get('DISH_MEAL_SMALL_LIB_SOFT_THRESHOLD', '0.75'))
|
||
# 早于该时刻且尚无当日排餐 → 不做当前餐段限制,直接走大库
|
||
DISH_MEAL_CUTOFF_HOUR = int(os.environ.get('DISH_MEAL_CUTOFF_HOUR', '7'))
|
||
# 每餐开始前多少分钟拉取排餐(默认 60 = 开餐前 1 小时)
|
||
DISH_MEAL_PREFETCH_MINUTES = int(os.environ.get('DISH_MEAL_PREFETCH_MINUTES', '60'))
|
||
# 尚无餐段信息时的兜底拉取时刻(启动后第一次排餐未到位时用)
|
||
DISH_MEAL_REFRESH_HOUR = int(os.environ.get('DISH_MEAL_REFRESH_HOUR', '6'))
|
||
DISH_MEAL_REFRESH_MINUTE = int(os.environ.get('DISH_MEAL_REFRESH_MINUTE', '0'))
|
||
|
||
# 实时扫描:未知菜写入待学习前的最短稳定秒数(客人放盘短,默认 1 秒)
|
||
# 盘子移走时不刷入,避免移盘过程中的误检未知
|
||
DISH_LIVE_PENDING_STABLE_SECONDS = float(os.environ.get('DISH_LIVE_PENDING_STABLE_SECONDS', '1.0'))
|
||
# 运动判定:从动到静后需保持静止的秒数,达到后 YOLO 识别一次;持续静止不再识别,
|
||
# 须再经历「静→动→静」才触发下一次
|
||
DISH_LIVE_STILL_HOLD_SECONDS = float(os.environ.get('DISH_LIVE_STILL_HOLD_SECONDS', '0.1'))
|
||
# 已有订单时,菜品区域相似度阈值(更低=更宽松,手在中间晃仍算静止,减少误触发)
|
||
DISH_LIVE_MOTION_SIM_WITH_ORDER = float(os.environ.get('DISH_LIVE_MOTION_SIM_WITH_ORDER', '0.970'))
|
||
# 同一批菜品订单防抖:菜名未变不重复存图/统计;短间隔内亦抑制重复落单
|
||
DISH_LIVE_ORDER_DEBOUNCE_SECONDS = float(os.environ.get('DISH_LIVE_ORDER_DEBOUNCE_SECONDS', '0.5'))
|
||
|
||
DEBUG = True
|
||
|
||
|
||
LOG_DIR = os.path.join(os.getcwd(), f'log/{time.strftime("%Y-%m-%d")}.log')
|
||
LOG_FORMAT = '<level>{level: <8}</level> <green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> - <cyan>{name}</cyan>:<cyan>{function}</cyan> - <level>{message}</level>'
|