Mediapipe дает разные результаты в двух случаях: путь к файлу изображения и ввод массива numpyPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Mediapipe дает разные результаты в двух случаях: путь к файлу изображения и ввод массива numpy

Сообщение Anonymous »

Как вы, возможно, знаете, Mediapipe предоставляет местоположения ориентиров на основе выровненного выходного изображения, а не входного изображения.Цель:
Я собираюсь выполнить обнаружение ориентиров на нескольких изображениях. Ниже я привел код, который использует PoseLandmarkerOptions для идентификации 33 ориентиров на теле. Найдя эти ориентиры, я планирую классифицировать угол лица как 0 градусов, 90 градусов, 180 градусов или 270 градусов. .
Данные:
Я включил образцы изображений из набора данных MARS, так как не смог использовать исходные изображения из-за проблемы — они имеют более высокое разрешение и размеры по сравнению с MARS. набор данных.
Изображение
Изображение
Изображение

Изображение
[img]https://i.sstatic. net/QD1M6onZ.jpg[/img]
Изображение
Изображение
Изображение
Изображение

все изображения в сжатом виде файл:
Код:
Я предоставил основной код для обнаружения ориентиров на изображениях.

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

import sys
import cv2
import numpy as np
import glob
import os
import base64
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
from typing import Dict

base_options = python.BaseOptions(
model_asset_path="./models/pose_landmarker.task",
delegate=python.BaseOptions.Delegate.GPU,
)

options = vision.PoseLandmarkerOptions(
base_options=base_options,
output_segmentation_masks=True,
min_pose_detection_confidence=0.5,
min_pose_presence_confidence=0.5,
min_tracking_confidence=0.5,
)
detector = vision.PoseLandmarker.create_from_options(options)

def check_landmarks(detection_result, img, address):
file_name = address.split("/")[-1]
w, h, _ = img.shape
for each_person_pose in detection_result.pose_landmarks:
for each_key_point in each_person_pose:
if each_key_point.presence > 0.5 and each_key_point.visibility > 0.5:
x_px = int(each_key_point.x * h)
y_px = int(each_key_point.y * w)
cv2.circle(img, (x_px, y_px), 3, (255, 0, 0), 2)
cv2.imwrite("./landmarks/" + file_name, img)

def rectifier(detector, image, address):
try:
srgb_image = mp.Image.create_from_file(address)
detection_result = detector.detect(srgb_image)
check_landmarks(detection_result, srgb_image.numpy_view(), address)
except Exception as e:
print(f"error {e}")

def rectify_image(rectify_image_request):
image = cv2.imdecode(
np.frombuffer(base64.b64decode(rectify_image_request["image"]), np.byte),
cv2.IMREAD_COLOR,
)
rectifier(detector, image, rectify_image_request["address"])

def read_image_for_rectify(address: str) -> Dict:
face_object = dict()
img = cv2.imread(address)
_, buffer = cv2.imencode(".jpg", img)
img = base64.b64encode(buffer).decode()
face_object["image"] = img
face_object["address"] = address
return face_object

folder_path = "./png2jpg"
file_paths = glob.glob(os.path.join(folder_path, "*.jpg"), recursive=True)
for id_file, file in enumerate(file_paths):
print(id_file, file)
rectify_image(read_image_for_rectify(file))
Проблема:
Изначально я использовал адреса изображений для подачи изображений напрямую в Mediapipe, и результаты показали приемлемую производительность. .
Изображение
Изображение
Изображение

Изображение
Изображение
Изображение

Изображение
Изображение
Изображение
< /p>
Однако теперь мне нужно получать изображения в виде словарей с изображениями, закодированными в base64. Я соответствующим образом изменил входные данные, но при просмотре выходных данных в этом сценарии Mediapipe не может обнаружить ориентиры на многих изображениях. Поэтому я передаю изображения в виде массива numpy в медиапайп, изменив эту строку на

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

srgb_image = mp.Image.create_from_file(address)
в

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

srgb_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=image)
выход во втором сценарии:
Изображение
Изображение
Изображение
Изображение

Изображение
Изображение
Изображение

Изображение
Изображение

Как добиться согласованного результата в обоих сценариях?

Подробнее здесь: https://stackoverflow.com/questions/792 ... py-array-i
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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