Бесконечность
Напишите программу для выбора воспоминаний по заданному критерию.
В файле infinity.csv записаны воспоминания с заголовками (разделители – символы нижнего подчеркивания):
n, date, place, name, tag, members
номер, дата, место, название, тег, участники
В поле участники (members) значения записаны через запятую и пробел.
Через параметры командной строки вводятся:
number – наименьшее количество участников, по умолчанию 2;
place – место.
В файл memories.json запишите список словарей для выбранных воспоминаний в порядке следования в исходном файле с ключами:
date, name, tag
дата, название, тег
ПРИМЕР
Ввод:
# Пример запуска:
python3 solution.py —number 5 —place Aldebaran
# Содержимое файла infinity.csv:
n_date_place_name_tag_members
8_2074_Aldebaran_life detection_life_K, L, M, N, O, I
12_2099_Vega_black hole_singularity_K, U
13_2101_Aldebaran_molecular cloud_particle_D, M, N
17_2100_Moon_superstar bang_star_G, H, J
21_2098_Aldebaran_eclipse_shadow_A, B, C, D, E
——————————————————————-(это просто для разделения)
Вывод:
# Содержимое файла memories.json:
[
«date»: 2074,
«name»: «life detection»,
«tag»: «life»
>,
«date»: 2098,
«name»: «eclipse»,
«tag»: «shadow»
>
]
Добавлено через 49 минут
Вот моя попытка:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
import json import argparse parser = argparse.ArgumentParser(description='Выбор воспоминаний по заданным критериям') parser.add_argument('--number', type=int, default=2, help='наименьшее количество участников') parser.add_argument('--place', required=True, help='место') args = parser.parse_args() with open('infinity.csv', 'r') as f: headers = f.readline().strip().split('') memories = [] for line in f: values = line.strip().split('') memory = dict(zip(headers, values)) memory['members'] = memory['members'].split(', ') if len(memory['members']) >= args.number and memory['place'] == args.place: memories.append({'date': int(memory['date']), 'name': memory['name'], 'tag': memory['tag']}) with open('memories.json', 'w') as f: json.dump(memories, f)
Знак бесконечности
Правило на проверку символов.Если есть один знак, поставить в конце знак, если есть два знака, то поставить в конце
Собственно, вот сабж. История такова. На входе имеем файлы формата HOST: "127.0.0.1" NAME.
Знак бесконечности
Как в свойствах указывается этот значок (восьмёрка на бок)?
Знак бесконечности
Ребята привет Есть проблема, написал программу по выводу красивого знака бесконечности в объеме. В.
Как пишется знак бесконечности в маткаде?
Как пишется знак бесконечности в маткаде?
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Как обозначить знак бесконечности при решении определенного интеграла?
Здравствуйте форумчани. Столкнулся с интересной проблемой. Решаю определенный интеграл. Пределы.
Как представить знак бесконечности при решении определенного интеграла?
Здравствуйте форумчани. Проблема следующая. Решаю интеграл определенный. Пределы заданны от 8 до.
Как доказать, что тот же интеграл от минус бесконечности до бесконечности равен sqrt(pi/2)
Интеграл от нуля до бесконечность sin(x^2) dx = 1/2 sqrt (pi/2) Как доказать , что тот же интеграл.
Чем отличается плюс бесконечность от минус бесконечности и от бесконечности
Чем отличается плюс бесконечность от минус бесконечности и от бесконечности?
Найти сумму от минус бесконечности до плюс бесконечности
Добрый всем вечер. Подскажите пожалуйста как правильно решать по формуле, которую приложу в.
Как посчитать интеграл от — бесконечности до x0 и от x0 до +бесконечности
Проблема: Warning: Infinite or Not-a-Number function value encountered. > In quad at 100 .
Распознавание знака бесконечности
Как можно распознать знак бесконечности (именно его) на фото или видео? Буду признателен, если приведете код к ответу. UPD: Объясните, как, например, с помощью контурного анализа понять, есть ли на фотографии знак бесконечности. Пример ниже (в центре может быть полное соединение, человека может быть видно — он может держать лист, цвет не важен).
Отслеживать
user177227
задан 15 июн 2016 в 7:02
Timur Musharapov Timur Musharapov
1,358 4 4 золотых знака 18 18 серебряных знаков 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
Данный ответ устарел и соответствует вопросу в его изначальной версии.
Как обучают детей алфавиту? Показывают картинки в букваре, произносят соответствующие им звуки. Как затем дети начинают распознавать символы букв, встречая их не в букваре? Очевидно, что на этот момент времени они уже достаточно затратили ресурсов, чтобы запомнить практически все возможные особенности форм начертания этих самых символов.
Как шимпанзе обнаруживает бананы? Наверное в большей мере потому, что ей в своё время показали его, выделив в качестве самостоятельного и очень вкусного объекта.
Любимая, я тебя поведу к самому краю Вселенной! Я подарю тебе эту звезду, светом нетленным будет она озарять нам путь в бесконечность.
На что надеялась Любимая, принимая предложение двигать в бесконечность? Вероятнее всего, что заложенные ранее ассоциации позволили ей понять, что это будет как минимум приятное путешествие.
А что же машина? А у машины нет того опыта, что получают ребёнок, шимпанзе и Любимая. С машиной придётся работать, чтобы она могла начать различать бесконечность, нарисованную на бумаге в виде знака, бесконечность бананового чревоугодия и бесконечность пути под светом нетленным.
Заценив масштаб трагедии, сколько сделано и сколько всего ещё нужно сделать, разработчики (некоторые уже на Седьмой день) начинают понимать, что необходимо срочно сужать поле деятельности, ограничив творческий потенциал локальными изменениями.
Кто-то выбирает набор изображений с конкретным начертанием символа бесконечности на определённом фоне, чтобы иметь возможность работать с контурами. Кто-то выбирает видеоряд, но всё с теми же конкретизирующими выборку условиями. В любом случае, творец более не ограничивает себя стремлением объять необъятное, а если даже и спросит у соседей, ковыряющихся в своих мирах, помощи, то максимально конкретизирует вопрос, предложив им на рассмотрение пару примеров собственного виденья предмета. И все довольны.
Как написать бесконечность в питоне
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно.
Необходимо обновить браузер или попробовать использовать другой.
B правой части каждого сообщения есть стрелки ⇧ и ⇩ . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок ✔ в правой части сообщения.
Киберколизей II Прими участие в международных CTF-соревнованиях по кибербезопасности и получи крутые призы! Начало 11 ноября, 10:00 мск, Jeopardy, онлайн. Принять участие!