Перейти к содержимому

Как написать бесконечность в питоне

  • автор:

Как написать бесконечность в питоне

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно.
Необходимо обновить браузер или попробовать использовать другой.

B правой части каждого сообщения есть стрелки ⇧ и ⇩ . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок ✔ в правой части сообщения.

Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе «Анализ защищенности веб-приложений» �� Записаться бесплатно!

CTF с учебными материалами Codeby Games Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Распознавание знака бесконечности

Контуры могут смежаться, человека может быть видно - он может держать лист, цвет не важен

Как можно распознать знак бесконечности (именно его) на фото или видео? Буду признателен, если приведете код к ответу. UPD: Объясните, как, например, с помощью контурного анализа понять, есть ли на фотографии знак бесконечности. Пример ниже (в центре может быть полное соединение, человека может быть видно — он может держать лист, цвет не важен).

Отслеживать
user177227
задан 15 июн 2016 в 7:02
Timur Musharapov Timur Musharapov
1,358 4 4 золотых знака 19 19 серебряных знаков 45 45 бронзовых знаков

Дочка спрашивает, как пишется цифра 8 — папа отвечает: а ты переверни знак безконечности на 90 градусов — и получишь что надо.

15 июн 2016 в 7:04
Т.е. как распознать всё остальное, вы знаете? Полагаю, нужно обучить каскады на поиск этого знака.
15 июн 2016 в 7:07
Gino Pane, а так обычно все и распознается — обучаются каскады на соответствующей выборке?
15 июн 2016 в 7:09
@nick_n_a не на 90 градусов, а на пи пополам.
17 июн 2016 в 12:17

не хватает деталей. Что на входе может быть? (кто вырезает изображение, чтобы один символ остался? сколько мусора может быть на картинке (цветов, других символов)? Сколько вариантов шрифтов, начертаний хотите поддерживать? Является ли цифра 8 знаком бесконечности (кто правильную ориентацию рисунка задаёт?) итд.

25 июн 2016 в 2:21

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

OpenCV предоставляет множество инструментов для распознавания образов, в том числе и посредством контурного анализа. В третьей версии фреймворка практически всё, что касается сравнения контуров было выделено в отдельный модуль с говорящим названием Shape Distance and Matching.

Автор вопроса не уточнил, с какими фигурами (наборами фигур) будет сравниваться знак бесконечности, и отметил лишь, что интерес представляет только факт похожести кандидата искомому объекту.

Очевидно, что само по себе понятие «бесконечность» машине ничего не скажет, а потому придётся предложить ей некий образ в виде эталона. Пусть этот образ будет выглядеть так (файл model1.jpg):

Между тем, чтобы убедиться, что раскрытый далее метод позволяет различать и другие фигуры, добавим к эталонной модели ещё несколько различных изображений (файлы model2.jpg, model3.jpg и model4.jpg соответственно):

На самом деле все изображения одинакового размера и приведены в уменьшенном виде лишь с целью экономии места на странице.

Начнём с выделения объекта, изображение которого предоставил автор вопроса:

cv::Mat tst_src_mat = cv::imread("test.jpg", cv::IMREAD_GRAYSCALE); if(tst_src_mat.empty()) return; cv::Mat tst_bin_mat; cv::threshold(tst_src_mat, tst_bin_mat, 0, 255 , cv::THRESH_OTSU | cv::THRESH_BINARY_INV); 

После проведения бинаризации окажется, что помимо объекта интереса на изображении в левом нижнем углу присутствует и артефакт:

Можно от него избавиться посредством простого и в чём-то философского подхода — не обращать внимания, оставив в поле зрения лишь тот контур, что наоборот — представляет интерес. Это можно сделать, например, ориентируясь на максимальную площадь и соответствующий индекс в векторе:

std::vector > tst_cs; cv::findContours(tst_bin_mat.clone(), tst_cs , cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE); int ci = -1; double max_area = 0.; for(int i = 0, n = tst_cs.size(); i < n; ++i) < const double area = cv::contourArea(tst_cs.at(i)); if(area >max_area) > if(ci == -1) return; 

Далее следует нюанс, который подразумевает, что любые сравниваемые контуры должны иметь одинаковое количество точек в своём составе. Разумеется, что различные фигуры таковому правилу обычно следовать не будут, а значит придётся «на ручнике» им в этом помочь, просто добавив необходимое количество точек, но только с теми координатами, что и так уже имеются в фигуре:

const int num_pts = 300; for(int i = tst_cs.at(ci).size()-1, d = 0; i < num_pts; ++i) tst_cs[ci].push_back(tst_cs[ci][d++]); 

Константа num_pts - это произвольное число. Оно в принципе зависит от того, с какой сложностью фигур предстоит работа. В идеале оно должно быть равно максимальному количеству точек у самого э-э-э. многоточечного контура из сравниваемых.

Пожалуй, настало время перейти к ранее рассмотренным эталону и изображениям сильно отличающихся от тестового фигур:

// Герой настоящей статьи, который собственно // и будет производить сравнение контуров. cv::Ptr sc = cv::createShapeContextDistanceExtractor(); for(int i = 0; i < 4; ++i) < std::string fname = std::string("model") + std::to_string(i+1) + std::string(".jpg"); cv::Mat src_mat = cv::imread(fname, cv::IMREAD_GRAYSCALE); if(src_mat.empty()) return -1; cv::Mat bin_mat; cv::threshold(src_mat, bin_mat, 0, 255 , cv::THRESH_OTSU | cv::THRESH_BINARY_INV); std::vector> cs; cv::findContours(bin_mat.clone(), cs , cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE); for(int i = cs.at(0).size()-1, d = 0; i < num_pts; ++i) cs[0].push_back(cs[0][d++]); std::cout computeDistance(tst_cs[ci], cs[0])

Результатом работы кода окажутся такие значения:

model1.jpg - 2.84489

model2.jpg - 112.033

model3.jpg - 32.8308

model4.jpg - 524.659

Изображение model1.jpg содержит знак бесконечности, а соответственно имеет и наименьшую дистанцию различия с тестовой фигурой. Изображения со знаком "собаки" (model2.jpg) и "серпа с молотом" (model4.jpg) в виду очевидных различий завершают список непохожести. Но кто бы мог подумать, что "бэтмену" (model3.jpg) здесь достанется второе место. А впрочем, если приглядеться, вполне возможно уловить общие с бесконечностью черты.

Отслеживать
ответ дан 18 июн 2016 в 19:49
user177227 user177227
Замечательный и очень подробный ответ - большое спасибо, alexis031182!
21 июн 2016 в 7:07

alexis031182, а как можно найти именно эту фигуру на фотографии, где присутствуют и другие объекты, что присуще фотографиям? Тогда использовать каскад Хаара или есть способ проще?

21 июн 2016 в 7:26

@TimurMusharapov , это зависит от входных условий. В ответе этим условием являлся размер объекта интереса, но можно было не производить отсеивание артефакта, и точно также сравнить его с эталоном. То есть, если в кадре будет обнаружено множество контуров, которые простым образом по какому-либо очевидному признаку отсеять нельзя, то анализируем их в общем порядке в качестве обычных кандидатов.

– user177227
21 июн 2016 в 7:34

Данный ответ устарел и соответствует вопросу в его изначальной версии.

Как обучают детей алфавиту? Показывают картинки в букваре, произносят соответствующие им звуки. Как затем дети начинают распознавать символы букв, встречая их не в букваре? Очевидно, что на этот момент времени они уже достаточно затратили ресурсов, чтобы запомнить практически все возможные особенности форм начертания этих самых символов.

Как шимпанзе обнаруживает бананы? Наверное в большей мере потому, что ей в своё время показали его, выделив в качестве самостоятельного и очень вкусного объекта.

Любимая, я тебя поведу к самому краю Вселенной! Я подарю тебе эту звезду, светом нетленным будет она озарять нам путь в бесконечность.

На что надеялась Любимая, принимая предложение двигать в бесконечность? Вероятнее всего, что заложенные ранее ассоциации позволили ей понять, что это будет как минимум приятное путешествие.

А что же машина? А у машины нет того опыта, что получают ребёнок, шимпанзе и Любимая. С машиной придётся работать, чтобы она могла начать различать бесконечность, нарисованную на бумаге в виде знака, бесконечность бананового чревоугодия и бесконечность пути под светом нетленным.

Заценив масштаб трагедии, сколько сделано и сколько всего ещё нужно сделать, разработчики (некоторые уже на Седьмой день) начинают понимать, что необходимо срочно сужать поле деятельности, ограничив творческий потенциал локальными изменениями.

Кто-то выбирает набор изображений с конкретным начертанием символа бесконечности на определённом фоне, чтобы иметь возможность работать с контурами. Кто-то выбирает видеоряд, но всё с теми же конкретизирующими выборку условиями. В любом случае, творец более не ограничивает себя стремлением объять необъятное, а если даже и спросит у соседей, ковыряющихся в своих мирах, помощи, то максимально конкретизирует вопрос, предложив им на рассмотрение пару примеров собственного виденья предмета. И все довольны.

Бесконечность в Python – Установите значение переменной Python в бесконечность

Простое число не может представлять ваш набор данных? Как насчет установки вашей переменной значения в бесконечность в Python? Сегодня мы говорим только о том, что!

  • Автор записи Автор: Pankaj Kumar
  • Дата записи 14.04.2021

Простое число не может представлять ваш набор данных? Как насчет установки вашей переменной значения в бесконечность в Python? Сегодня мы говорим только о том, что!

При кодировании в Python нам часто нужно инициализировать переменную с большим положительным или большим отрицательным значением. Это очень распространено при сравнении переменных для расчета минимального или максимума в наборе.

Позитивная бесконечность В Python считается самым большим положительным значением и Отрицательная бесконечность считается самым большим отрицательным числом.

В этом руководстве мы узнаем три способа инициализации переменных с положительной и отрицательной бесконечностью. Наряду с этим мы также узнаем, как проверить, является ли переменная бесконечность или нет, а также выполняет некоторые арифметические операции на этих переменных.

Инициализация поплавок переменных с бесконечности в Python

Самый простой способ установить переменную к положительной или отрицательной бесконечности без использования каких-либо модулей, используя Float.

Вы можете установить переменную к положительной бесконечности, используя следующую строку кода:

p_inf = float('inf')

Чтобы распечатать значение переменной использования:

print('Positive Infinity = ',p_inf)
Positive Infinity = inf

Чтобы инициализировать переменную с отрицательным использованием бесконечности:

n_inf = float('-inf') print('Negative Infinity = ',n_inf)
Negative Infinity = -inf

Инициализация переменных с бесконечностью, используя numpy модуль

Вы также можете использовать популярный модуль Numpy для инициализации переменных с положительной или отрицательной бесконечнойностью.

Давайте начнем, импортируя модуль Numpy.

import Numpy as np

Теперь мы можем использовать модуль для инициализации переменной к положительной бесконечности, как показано ниже:

p_inf = np.inf print('Positive Infinity = ',p_inf)

Выход выходит как:

Positive Infinity = inf

Чтобы инициализировать переменную с отрицательным использованием бесконечности:

n_inf = -np.inf print('Negative Infinity = ',n_inf)

Выход выходит как:

Negative Infinity = -inf

Полный код

Полный код из этого раздела приведен ниже.

import Numpy as np #positive inf p_inf = np.inf print('Positive Infinity = ',p_inf) #negative inf n_inf = -np.inf print('Negative Infinity = ',n_inf)

Инициализация переменных с бесконечностью в Python с использованием математического модуля

Третий метод инициализации переменных до бесконечности является использованием математического модуля в Python.

Давайте начнем, импортируя модуль.

import math

Чтобы установить переменную к положительной бесконечности, используя математический модуль, используйте следующую строку кода:

p_inf = math.inf print('Positive Infinity = ',p_inf)
Positive Infinity = inf

Чтобы установить переменную к отрицательной бесконечности, используя математический модуль, используйте следующую строку кода:

n_inf = -math.inf print('Negative Infinity = ',n_inf)
Negative Infinity = -inf

Помимо этого, математический модуль также дает вам метод, который позволяет проверять, установлена ли переменная на бесконечность или нет.

Вы можете проверить это, используя следующую строку кода:

math.isinf(p_inf)
True
math.isinf(n_inf)
True

Полный код

Полный код из этого раздела приведен ниже:

import math #positive inf p_inf = math.inf print('Positive Infinity = ',p_inf) #negative inf n_inf = -math.inf print('Negative Infinity = ',n_inf) #check print(math.isinf(p_inf)) print(math.isinf(n_inf))

Арифметические операции на бесконечности в Python

Давайте попробуем выполнять некоторые арифметические операции с переменными, установленными как положительную и отрицательную бесконечность.

1. Работа добавления на значения бесконечности

Посмотрим, что произойдет, когда мы добавляем номер к положительной бесконечности и отрицательной бесконечности.

a = p_inf + 100 print(a)

float

Числовые литералы, содержащие точку (десятичный разделитель) или знак экспоненты создают тип чисел с плавающей запятой.

 my_float = 1.2 
my_float = float('1.2')

my_float = float('nan') # nan - «не число» (NaN - not-a-number)

my_float = float('inf') # inf - бесконечность
my_float = float('+inf') # inf - бесконечность
my_float = float('-inf') # -inf - минус бесконечность

На заметку

Числа с плавающей запятой обычно реализованы при помощи типа числа двойной точности (double) в Си. Информация о точности и внутреннем представлении чисел с плавающей запятой для конкретной машины доступна из sys.float_info .

Синонимы поиска: float, inf, бесконечность, nan

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *