Сценарий Mediapipe Python аварийно завершает работуPython

Программы на Python
Ответить
Anonymous
 Сценарий Mediapipe Python аварийно завершает работу

Сообщение Anonymous »

У меня есть сценарий mediapipe, который дает сбой, вызывая сбой самого Python. Вот базовый сценарий:

Код: Выделить всё

img = cv2.imread(os.sep.join(["test-imgs", path]))
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

mp_img = mp.Image(image_format=mp.ImageFormat.SRGB, data=rgb)

obj_res = obj_detector.detect(mp_img)
mp_cropped = None

for idx, human in enumerate([dt for dt in obj_res.detections if len([ct for ct in dt.categories if ct.category_name == "person"]) > 0]):
x1, x2 = human.bounding_box.origin_x, human.bounding_box.origin_x + human.bounding_box.width
y1, y2 = human.bounding_box.origin_y, human.bounding_box.origin_y + human.bounding_box.height

cropped = img[y1:y2, x1:x2]
p = os.sep.join(["test-imgs", "-".join(["cropped", str(idx), path.split(".")[0]])]) + ".jpg"
cv2.imwrite(p, cropped)

cropped_rgb = cv2.cvtColor(np.ascontiguousarray(cropped), cv2.COLOR_BGR2RGB)
mp_cropped = mp.Image(image_format=mp.ImageFormat.SRGB, data=cropped_rgb)

pos_res = pose_detector.detect(mp_cropped)

if pos_res.segmentation_masks is None:
print(f"img: {path}-{idx}: 0")
continue

print(f"img: {path}-{idx} {len(pos_res.segmentation_masks)} ~ {cropped.shape}")

for ix0, seg in enumerate(pos_res.segmentation_masks):
print(f"i: {ix0} {seg.width}x{seg.height} - {mp_cropped.numpy_view().shape} - {seg.channels} - {mp_cropped.is_contiguous()}")
data = seg.numpy_view()
теперь строка, которая на самом деле приводит к сбою, это data = seg.numpy_view(), ошибка, которая приходит в терминал:

Код: Выделить всё

F0000 00:00:1771447031.969185 25790645 image_frame.cc:415] Check failed: 1 == ChannelSize() (1 vs. 4)
*** Check failure stack trace: ***
@        0x130bcef5c  absl::log_internal::LogMessage::SendToLog()
@        0x130bceef4  absl::log_internal::LogMessage::Flush()
@        0x130857d68  mediapipe::ImageFrame::CopyToBuffer()
@        0x12faa6e08  mediapipe::tasks::vision::core::GenerateContiguousDataArray()
@        0x12faa53cc  mediapipe::tasks::vision::core::GetCachedContiguousDataAttr()
@        0x12faa52e8  MpImageDataFloat32
@        0x1a38f0050  ffi_call_SYSV
@        0x1a38f9604  ffi_call_int
@        0x109de32f0  _ctypes_callproc
@        0x109de090c  PyCFuncPtr_call
@        0x1052e63d8  _PyObject_MakeTpCall
@        0x10540ea18  _PyEval_EvalFrameDefault
@        0x10540c1ec  PyEval_EvalCode
@        0x10547c7d4  run_eval_code_obj
@        0x10547c21c  run_mod
@        0x10547aafc  pyrun_file
@        0x105479e3c  _PyRun_SimpleFileObject
@        0x105479ad0  _PyRun_AnyFileObject
@        0x1054a1738  pymain_run_file_obj
@        0x1054a13f4  pymain_run_file
@        0x1054a0600  Py_RunMain
@        0x1054a0c74  pymain_main
@        0x1054a0d14  Py_BytesMain
@        0x18f22dd54  start
Это фактически приводит к сбою самой среды выполнения Python, я уже потратил несколько часов на отладку этого, и самое худшее то, что я понятия не имею, почему это происходит, агенты ИИ тоже не помогли.
Моя цель — выполнить следующую последовательность шагов:
  • Обнаружить объекты на изображении (в частности, людей)
  • Обрезать обнаруженные люди
  • Использование ориентир позы, получить сегментацию человека (я использую ориентир позы, чтобы дополнительно убедиться, что обнаруженный человек не является ложным срабатыванием)
  • Извлеките сегментированные пиксели человека и вставьте/сохраните
Я действительно столкнулся со стеной и был бы признателен за любую помощь, если есть другой способ сделать это, я весь в ушах, просто то, что меня ест заживо, это то, что я не могу понять, в чем здесь фактическая ошибка, любые обходные пути - тоже приветствую, спасибо.
P.S. Если я передам необрезанное изображение вpose_landmarker, ошибка не возникнет

Подробнее здесь: https://stackoverflow.com/questions/798 ... hes-script
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»