Находится ли точка внутри многоугольника? Проблема с методом

Первый пост в stackoverflow. Я работаю с TfPoseEstimator в python, и мне нужно знать, находится ли точка человеческого тела внутри области, которую я выделил в многоугольнике. Моя проблема в том, что блок try говорит: «Не работает» для каждой части тела. Может ли кто-нибудь помочь мне?

def punto_en_poligono(x, y, poligono):
    i = 0
    j = len(poligono) - 1
    salida = False
    for i in range(len(poligono)):
        if (poligono[i][1] < y and poligono[j][1] >= y) or (poligono[j][1] < y and poligono[i][1] >= y):
            if poligono[i][0] + (y - poligono[i][1]) / (poligono[j][1] - poligono[i][1]) * (poligono[j][0] - poligono[i][0]) < x:
                salida = not salida
        j = i
    return salida 


humans1 = e.inference(recto, resize_to_default=(w > 0 and h > 0), upsample_size=args.resize_out_ratio)
poly1 = geometry.Polygon([[450,350],[478,0],[638,0],[638,350],[450,350]])

for j in humans1:
    for i in j.body_parts:
        try:
             pos_X = int(j.body_parts[i].x*960)                         
             pos_Y = int(j.body_parts[i].y*640) 
             is_Inside = punto_en_poligono(pos_X,pos_Y,poly1)
        except:
             print("Not working")

Ожидаемый True или False. Фактические результаты: «Не работает»

у вас есть функция в shapely, которая дает результат? вы знаете ?

Frenchy 10.04.2019 12:03

Если вы ожидаете, что программа заработает, я бы не рекомендовал использовать необработанное за исключением, или даже за исключением. Запустить свой код и посмотреть на ошибку может быть намного лучше ^^

Born Tbe Wasted 10.04.2019 12:11
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вот решение с использованием shapely:

from shapely.geometry import Point
from shapely.geometry.polygon import Polygon

point0 = Point(500, 200)
point1 = Point(500, 0) 
poly1 = Polygon([[450,350],[478,0],[638,0],[638,350],[450,350]])

print(poly1.contains(point0)) #True
print(poly1.contains(point1)) #False

в вашей программе вы просто заменяете строку: и вы можете удалить функцию punto_en_poligono

is_Inside = poly1.contains(Point(pos_X,pos_Y)

Большое спасибо за ваш ответ. Я новичок в питоне и не знал этого. :D

Luis Bleda Torres 10.04.2019 12:26

это упрощает вашу программу..!! если это поможет, не забудьте проголосовать/подтвердить ответ

Frenchy 10.04.2019 12:28

Другие вопросы по теме