Сборка без OpenCV
Build and push Docker image / docker (push) Successful in 10s
Details
Build and push Docker image / docker (push) Successful in 10s
Details
This commit is contained in:
parent
2161bbe015
commit
6ca9e7e933
|
|
@ -118,7 +118,7 @@ BLOCKED_PUBLIC_FIGURES=
|
|||
- экстремизм + инструкции/символика;
|
||||
- обходные написания (`n_u_d_e`, `l0li`, `ch1ld` и т.п.).
|
||||
|
||||
Для i2i OpenCV проверяет наличие лица/человека на входном фото: NSFW-промпт в этом случае блокируется.
|
||||
Для i2i: если установлен OpenCV, проверяется наличие лица/человека. В базовом образе OpenCV нет, поэтому NSFW-промпты в i2i блокируются консервативно — как если бы на фото был человек.
|
||||
|
||||
При блокировке пользователь получает «Запрос нарушает правила. Звёзды не списаны.», а запись с `user_id`, временем, промптом и причиной сохраняется в таблицу `blocked_requests`.
|
||||
|
||||
|
|
|
|||
|
|
@ -324,7 +324,7 @@ ON requests(user_id) WHERE status IN ('queued', 'running');
|
|||
- [x] Админы из `ADMIN_USER_IDS` обходят фильтр.
|
||||
- [x] Логирование блокировок в `blocked_requests`.
|
||||
- [x] Ответ «Запрос нарушает правила. Звёзды не списаны.».
|
||||
- [x] i2i: детекция лица/человека через OpenCV.
|
||||
- [x] i2i: OpenCV-детекция при наличии; иначе консервативный ручной флаг.
|
||||
- [x] Тесты правил и очереди.
|
||||
|
||||
**DoD:** небезопасный промпт не попадает в очередь, причина пишется в БД, админ может отправлять без фильтра.
|
||||
|
|
|
|||
|
|
@ -301,12 +301,18 @@ def is_prompt_allowed(
|
|||
|
||||
|
||||
def detect_person(path: str | Path) -> bool:
|
||||
"""Ищет лицо или человека через OpenCV. При ошибке считает, что человека нет."""
|
||||
"""Ищет лицо или человека через OpenCV.
|
||||
|
||||
Если OpenCV не установлен, консервативно считаем, что человек есть:
|
||||
NSFW-запросы в i2i будут блокироваться.
|
||||
"""
|
||||
try:
|
||||
import cv2 # type: ignore[import-not-found]
|
||||
except ImportError:
|
||||
logger.warning("OpenCV не установлен, детекция людей отключена")
|
||||
return False
|
||||
logger.warning(
|
||||
"OpenCV не установлен: для i2i считаем, что на фото есть человек"
|
||||
)
|
||||
return True
|
||||
|
||||
try:
|
||||
image = cv2.imread(str(path))
|
||||
|
|
|
|||
|
|
@ -7,4 +7,3 @@ fastapi>=0.115,<1
|
|||
uvicorn>=0.30,<1
|
||||
jinja2>=3.1,<4
|
||||
pillow>=10,<13
|
||||
opencv-python-headless>=4.10,<5
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ def test_extra_public_figures() -> None:
|
|||
|
||||
|
||||
def test_detect_person_blank_image(tmp_path) -> None:
|
||||
pytest.importorskip("cv2")
|
||||
path = tmp_path / "blank.png"
|
||||
with Image.new("RGB", (320, 240), (255, 255, 255)) as image:
|
||||
image.save(path)
|
||||
|
|
|
|||
Loading…
Reference in New Issue