Тест-режим: показывать метрики кадра из /check/ (какой кадр измерил сайт)
This commit is contained in:
Binary file not shown.
@@ -368,6 +368,7 @@ async def photo_module_handler(msg: Message):
|
|||||||
check_res.get('forced_moderation'),
|
check_res.get('forced_moderation'),
|
||||||
check_res.get('timings'),
|
check_res.get('timings'),
|
||||||
check_res.get('ai_metrics'),
|
check_res.get('ai_metrics'),
|
||||||
|
frame=check_res.get('frame'),
|
||||||
),
|
),
|
||||||
parse_mode="html"
|
parse_mode="html"
|
||||||
)
|
)
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
+17
-3
@@ -301,7 +301,7 @@ def _photo_test_receiving(emojis: dict) -> str:
|
|||||||
|
|
||||||
def _photo_test_result(verdict: str, reason: str, cv_approved=None, cv_reason: str = '',
|
def _photo_test_result(verdict: str, reason: str, cv_approved=None, cv_reason: str = '',
|
||||||
forced=None, timings: dict = None, ai_metrics: dict = None,
|
forced=None, timings: dict = None, ai_metrics: dict = None,
|
||||||
emojis: dict = None) -> str:
|
frame: dict = None, emojis: dict = None) -> str:
|
||||||
emojis = emojis or {}
|
emojis = emojis or {}
|
||||||
icons = {"Прошел": "✅", "Не прошел": "❌", "На модерацию": "⏳"}
|
icons = {"Прошел": "✅", "Не прошел": "❌", "На модерацию": "⏳"}
|
||||||
icon = icons.get(verdict, "ℹ️")
|
icon = icons.get(verdict, "ℹ️")
|
||||||
@@ -326,6 +326,19 @@ def _photo_test_result(verdict: str, reason: str, cv_approved=None, cv_reason: s
|
|||||||
else:
|
else:
|
||||||
parts.append("🎯 <b>CV-проверка:</b> —\n")
|
parts.append("🎯 <b>CV-проверка:</b> —\n")
|
||||||
|
|
||||||
|
# Метрики кадра, которые реально измерил сайт (виден именно проверенный кадр)
|
||||||
|
if frame:
|
||||||
|
bb = frame.get('face_bbox_px') or {}
|
||||||
|
try:
|
||||||
|
box = f"[{bb.get('x1')}..{bb.get('x2')}]×[{bb.get('y1')}..{bb.get('y2')}]"
|
||||||
|
parts.append(
|
||||||
|
f"📐 <b>Кадр (измерено сайтом):</b> {frame.get('img_w')}×{frame.get('img_h')} px, "
|
||||||
|
f"бокс лица {box}, голова <b>{frame.get('head_pct')}%</b> "
|
||||||
|
f"(норма ≥ {int(frame.get('min_head_percent', 30))}%)\n"
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
if forced:
|
if forced:
|
||||||
parts.append("ℹ️ <i>На сайте включён режим принудительной модерации: в реальном режиме фото ушло бы модератору, а не было опубликовано сразу.</i>\n")
|
parts.append("ℹ️ <i>На сайте включён режим принудительной модерации: в реальном режиме фото ушло бы модератору, а не было опубликовано сразу.</i>\n")
|
||||||
|
|
||||||
@@ -475,9 +488,10 @@ PHOTO_TEST_AI_CHECKING_TEXT = _photo_test_ai_checking(EMOJI_DIGITS)
|
|||||||
PHOTO_TEST_RECEIVING_TEXT = _photo_test_receiving(EMOJI_DIGITS)
|
PHOTO_TEST_RECEIVING_TEXT = _photo_test_receiving(EMOJI_DIGITS)
|
||||||
|
|
||||||
def photo_test_result(verdict: str, ai_reason: str = '', cv_approved=None, cv_reason: str = '',
|
def photo_test_result(verdict: str, ai_reason: str = '', cv_approved=None, cv_reason: str = '',
|
||||||
forced=None, timings: dict = None, ai_metrics: dict = None) -> str:
|
forced=None, timings: dict = None, ai_metrics: dict = None,
|
||||||
|
frame: dict = None) -> str:
|
||||||
return _photo_test_result(verdict, ai_reason, cv_approved, cv_reason,
|
return _photo_test_result(verdict, ai_reason, cv_approved, cv_reason,
|
||||||
forced, timings, ai_metrics, EMOJI_DIGITS)
|
forced, timings, ai_metrics, frame, EMOJI_DIGITS)
|
||||||
|
|
||||||
def photo_test_ai_error(error: str = '') -> str:
|
def photo_test_ai_error(error: str = '') -> str:
|
||||||
return _photo_test_ai_error(EMOJI_DIGITS, error)
|
return _photo_test_ai_error(EMOJI_DIGITS, error)
|
||||||
|
|||||||
Reference in New Issue
Block a user