Пример использования OpenCV для распознавания граней (Edge Detection) с помощью оператора Канни (Canny)
Ниже приведён пример кода на Python, демонстрирующий базовую обработку изображения и выделение граней (контуров) с использованием библиотеки
### 1. Установка необходимых библиотек
### 2. Пример кода
### 3. Как это работает
1. Чтение изображения:
2. Размытие (GaussianBlur): уменьшает шум, улучшая результат оператора Канни.
3. Оператор Канни: выделяет границы, вычисляя градиенты яркости. Параметры
4. Отображение: с помощью
Таким образом, используя
Подпишись 👉🏻 @KodduuPython 🤖
Ниже приведён пример кода на Python, демонстрирующий базовую обработку изображения и выделение граней (контуров) с использованием библиотеки
OpenCV.### 1. Установка необходимых библиотек
pip install opencv-python
### 2. Пример кода
import cv2
import numpy as np
def canny_edge_detection(image_path):
# Загружаем изображение в оттенках серого
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
if image is None:
raise ValueError("Не удалось загрузить изображение. Проверьте путь.")
# Шумоподавление с помощью GaussianBlur
blurred = cv2.GaussianBlur(image, (5, 5), 1.4)
# Применяем оператор Канни
edges = cv2.Canny(blurred, threshold1=50, threshold2=150)
return image, edges
if __name__ == "__main__":
input_image = "sample.jpg" # Путь к исходному изображению
original, edges = canny_edge_detection(input_image)
# Отображаем результаты
cv2.imshow("Original", original)
cv2.imshow("Canny Edges", edges)
# Нажмите любую клавишу, чтобы закрыть окна
cv2.waitKey(0)
cv2.destroyAllWindows()
### 3. Как это работает
1. Чтение изображения:
cv2.imread(..., cv2.IMREAD_GRAYSCALE) переводит картинку в градации серого. 2. Размытие (GaussianBlur): уменьшает шум, улучшая результат оператора Канни.
3. Оператор Канни: выделяет границы, вычисляя градиенты яркости. Параметры
threshold1 и threshold2 задают нижний и верхний пороги. 4. Отображение: с помощью
cv2.imshow можно посмотреть исходное изображение и полученную карту границ.Таким образом, используя
OpenCV и оператор Канни, можно быстро проанализировать изображение и выделить границы объектов, что часто является первым шагом во многих задачах компьютерного зрения.Подпишись 👉🏻 @KodduuPython 🤖
❤1
Почему в феврале иногда 29, а иногда 28 дней?
Дело в високосных годах. По григорианскому календарю год является високосным, если:
1. Делится на 4 без остатка;
2. При этом не делится на 100, кроме случаев, когда делится на 400.
Таким образом:
- Годы, кратные 4, обычно високосные (февраль = 29 дней).
- Но если год делится на 100 (например, 1900), то он не високосный (февраль = 28 дней), если только не делится на 400 (например, 2000 — високосный).
Ниже пример кода на Python, который демонстрирует это правило и выводит количество дней в феврале для нескольких годов.
### Объяснение
1. is_leap_year: проверяет правила деления на 4, 100 и 400.
2. days_in_february: если год високосный, возвращаем 29, иначе 28.
3. В конце тестируем на нескольких годах:
-
-
-
Так мы наглядно видим, почему в феврале может быть как 28, так и 29 дней.
Подпишись 👉🏻 @KodduuPython 🤖
Дело в високосных годах. По григорианскому календарю год является високосным, если:
1. Делится на 4 без остатка;
2. При этом не делится на 100, кроме случаев, когда делится на 400.
Таким образом:
- Годы, кратные 4, обычно високосные (февраль = 29 дней).
- Но если год делится на 100 (например, 1900), то он не високосный (февраль = 28 дней), если только не делится на 400 (например, 2000 — високосный).
Ниже пример кода на Python, который демонстрирует это правило и выводит количество дней в феврале для нескольких годов.
def is_leap_year(year: int) -> bool:
"""
Возвращает True, если год 'year' високосный, иначе False.
"""
return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
def days_in_february(year: int) -> int:
"""
Возвращает количество дней в феврале для заданного года.
"""
return 29 if is_leap_year(year) else 28
if __name__ == "__main__":
years_to_test = [2020, 2021, 2022, 2023, 2024, 1900, 2000]
for y in years_to_test:
print(f"Год {y}: февраль имеет {days_in_february(y)} дней. "
f"Високосный? {is_leap_year(y)}")
### Объяснение
1. is_leap_year: проверяет правила деления на 4, 100 и 400.
2. days_in_february: если год високосный, возвращаем 29, иначе 28.
3. В конце тестируем на нескольких годах:
-
2020 (делится на 4 и не на 100) → високосный, февраль 29; -
1900 (делится на 100, но не на 400) → не високосный, февраль 28; -
2000 (делится на 400) → високосный, февраль 29. Так мы наглядно видим, почему в феврале может быть как 28, так и 29 дней.
Подпишись 👉🏻 @KodduuPython 🤖
👍5❤1
Пример преобразований (Conversions) на Python: перевод чисел между различными системами счисления
В данном примере рассмотрим, как конвертировать целые числа в различные системы счисления (двоичную, восьмеричную и шестнадцатеричную), а также обратно — в десятичную.
### 1. Прямой перевод (из десятичной в другие системы счисления)
Python предоставляет встроенные функции:
-
-
-
> При желании можно убрать префиксы
### 2. Обратный перевод (из строки в десятичное число)
Для преобразования строки в число используем функцию
### 3. Пример функции перевода в любую систему счисления
Если нужно явно сконвертировать число в систему счисления с основанием
### 4. Вывод
Таким образом, в Python легко работать с различными системами счисления:
- Встроенные функции
- Пользовательская функция позволяет гибко настраивать основание системы счисления и формат вывода.
Это базовый пример конверсий (Conversions) при работе с числами. При необходимости аналогичные подходы могут использоваться для перевода форматов времени, дат, единиц измерения и многого другого.
Подпишись 👉🏻 @KodduuPython 🤖
В данном примере рассмотрим, как конвертировать целые числа в различные системы счисления (двоичную, восьмеричную и шестнадцатеричную), а также обратно — в десятичную.
### 1. Прямой перевод (из десятичной в другие системы счисления)
Python предоставляет встроенные функции:
-
bin(x) — возвращает строку вида '0b...' (двоичное представление).-
oct(x) — возвращает строку вида '0o...' (восьмеричное представление).-
hex(x) — возвращает строку вида '0x...' (шестнадцатеричное представление).
num = 255
binary_repr = bin(num) # '0b11111111'
octal_repr = oct(num) # '0o377'
hex_repr = hex(num) # '0xff'
print("Десятичное:", num)
print("Двоичное:", binary_repr)
print("Восьмеричное:", octal_repr)
print("Шестнадцатеричное:", hex_repr)
> При желании можно убрать префиксы
0b, 0o, 0x, если оставить только часть строки после первых двух символов.### 2. Обратный перевод (из строки в десятичное число)
Для преобразования строки в число используем функцию
int(строка, основание). Второй параметр указывает на основание системы счисления.
binary_str = "11111111"
octal_str = "377"
hex_str = "ff"
dec_from_bin = int(binary_str, 2) # 255
dec_from_oct = int(octal_str, 😍 # 255
dec_from_hex = int(hex_str, 16) # 255
print("Из двоичной:", dec_from_bin)
print("Из восьмеричной:", dec_from_oct)
print("Из шестнадцатеричной:", dec_from_hex)
### 3. Пример функции перевода в любую систему счисления
Если нужно явно сконвертировать число в систему счисления с основанием
base (2..36) без встроенных префиксов, можно написать свою функцию:
def to_base(num, base=2):
"""Переводит целое число num в систему счисления base (2..36). Возвращает строку."""
if num == 0:
return "0"
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
result = ""
is_negative = (num < 0)
num = abs(num)
while num > 0:
remainder = num % base
result = digits[remainder] + result
num //= base
if is_negative:
result = "-" + result
return result
# Проверка работы:
print(to_base(255, 2)) # '11111111'
print(to_base(255, 8)) # '377'
print(to_base(255, 16)) # 'FF'
### 4. Вывод
Таким образом, в Python легко работать с различными системами счисления:
- Встроенные функции
bin, oct, hex и int(..., base) покрывают большинство задач. - Пользовательская функция позволяет гибко настраивать основание системы счисления и формат вывода.
Это базовый пример конверсий (Conversions) при работе с числами. При необходимости аналогичные подходы могут использоваться для перевода форматов времени, дат, единиц измерения и многого другого.
Подпишись 👉🏻 @KodduuPython 🤖
Вот пример на Python, который в реальном времени отслеживает цены на криптовалюты с помощью API. Пример включает визуальные элементы в виде эмодзи и цветовое форматирование в терминале.
Особенности, включённые в этот код:
* Отслеживание цен на криптовалюты в режиме реального времени с помощью API CoinGecko.
* Визуализация различных монет с помощью эмодзи.
* Цветовое кодирование процентных изменений (зелёный/красный).
* Форматирование рыночных данных с использованием запятых.
* Автоматическое обновление каждые 30 секунд.
* Очистка вывода терминала с отметкой времени.
* Обработка ошибок.
* Поддержка прерывания клавиатуры.
Чтобы запустить этот код:
* Установите необходимый пакет: pip install requests.
* Запустите скрипт в терминале/CMD.
* Нажмите Ctrl+C для выхода.
Скрипт отобразит:
* Текущие цены.
* Процентные изменения за 24 часа.
* Рыночную капитализацию.
* Данные будут автоматически обновляться каждые 30 секунд.
Этот скрипт сочетает в себе несколько модных элементов: криптовалюту, интеграцию API, данные в реальном времени и визуальное форматирование в терминале! 🚀
Подпишись 👉🏻 @KodduuPython 🤖
import requests
import time
from datetime import datetime
def get_crypto_prices():
symbols = {
'bitcoin': '₿',
'ethereum': 'Ξ',
'dogecoin': 'Ð'
}
try:
response = requests.get(
'https://api.coingecko.com/api/v3/simple/price',
params={
'ids': ','.join(symbols.keys()),
'vs_currencies': 'usd',
'include_market_cap': 'true',
'include_24hr_change': 'true'
}
)
data = response.json()
print(f"\n{'🚀 Crypto Tracker':^50}")
print(f"{'='*50}")
for crypto, values in data.items():
emoji = symbols[crypto]
price = values['usd']
change = values['usd_24h_change']
change_color = '\033[92m' if change >=0 else '\033[91m'
print(f"{emoji} {crypto.capitalize():<12}"
f"|\033[94m ${price:>9,.2f}\033[0m "
f"| 24h: {change_color}{change:>+6.2f}%\033[0m")
print(f"\nLast update: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
except Exception as e:
print(f"🔴 Error fetching data: {e}")
if __name__ == "__main__":
while True:
get_crypto_prices()
try:
time.sleep(30) # Update every 30 seconds
except KeyboardInterrupt:
print("\n👋 Exiting crypto tracker...")
break
Особенности, включённые в этот код:
* Отслеживание цен на криптовалюты в режиме реального времени с помощью API CoinGecko.
* Визуализация различных монет с помощью эмодзи.
* Цветовое кодирование процентных изменений (зелёный/красный).
* Форматирование рыночных данных с использованием запятых.
* Автоматическое обновление каждые 30 секунд.
* Очистка вывода терминала с отметкой времени.
* Обработка ошибок.
* Поддержка прерывания клавиатуры.
Чтобы запустить этот код:
* Установите необходимый пакет: pip install requests.
* Запустите скрипт в терминале/CMD.
* Нажмите Ctrl+C для выхода.
Скрипт отобразит:
* Текущие цены.
* Процентные изменения за 24 часа.
* Рыночную капитализацию.
* Данные будут автоматически обновляться каждые 30 секунд.
Этот скрипт сочетает в себе несколько модных элементов: криптовалюту, интеграцию API, данные в реальном времени и визуальное форматирование в терминале! 🚀
Подпишись 👉🏻 @KodduuPython 🤖
👍2🔥2❤1
Вот и курс с преподавателями по Data Science подоспел 🔥🔥🔥
Реклама. Информация о рекламодателе по ссылкам в посте.
Реклама. Информация о рекламодателе по ссылкам в посте.
Пример алгоритма компьютерного зрения на Python с использованием OpenCV и NumPy. Этот код выполняет обнаружение краев на изображении с помощью оператора Кэнни:
Этот алгоритм:
1. Загружает изображение.
2. Конвертирует его в градации серого.
3. Применяет размытие для уменьшения шумов.
4. Выполняет обнаружение краев методом Кэнни.
5. Отображает исходное изображение и обработанный результат.
Подпишись 👉🏻 @KodduuPython 🤖
import cv2
import numpy as np
def process_image(image_path):
# Загружаем изображение
image = cv2.imread(image_path, cv2.IMREAD_COLOR)
if image is None:
print("Ошибка: не удалось загрузить изображение.")
return
# Преобразуем изображение в оттенки серого
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Применяем размытие для снижения шума
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# Выполняем обнаружение краев методом Кэнни
edges = cv2.Canny(blurred, 50, 150)
# Показываем результат
cv2.imshow('Original Image', image)
cv2.imshow('Edge Detection', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
# Укажите путь к изображению
image_path = 'example.jpg' # Замените на путь к вашему изображению
process_image(image_path)
Этот алгоритм:
1. Загружает изображение.
2. Конвертирует его в градации серого.
3. Применяет размытие для уменьшения шумов.
4. Выполняет обнаружение краев методом Кэнни.
5. Отображает исходное изображение и обработанный результат.
Подпишись 👉🏻 @KodduuPython 🤖
Прикольный алгоритм с использованием структуры данных Очередь (Queue) для управления очередью в ночном клубе! 🎉
Ситуация:
Представьте, что вы управляете входом в популярный ночной клуб. У вас есть ограниченное количество мест, и вам нужно следить за тем, чтобы люди заходили в порядке живой очереди. При этом VIP-гости должны обслуживаться быстрее.
Решение:
Мы используем две очереди (обычную и приоритетную), чтобы справедливо распределять доступ.
Код на Python
Как это работает?
1. Добавляем людей в две очереди:
- VIP-гости попадают в
- Обычные посетители – в
2. При входе в клуб приоритет отдается VIP-гостям.
3. Гости заходят по очереди, пока клуб не заполнится.
4. Клуб закрывается, когда все вошли.
### Реальное применение
Этот алгоритм можно использовать в:
- Управлении живыми очередями (концерты, аэропорты 🛫, мероприятия 🎭).
- Разработке онлайн-систем бронирования, где премиум-клиенты получают приоритет.
- Виртуальных очередях (например, при покупке билетов 🎟).
Подпишись 👉🏻 @KodduuPython 🤖
Ситуация:
Представьте, что вы управляете входом в популярный ночной клуб. У вас есть ограниченное количество мест, и вам нужно следить за тем, чтобы люди заходили в порядке живой очереди. При этом VIP-гости должны обслуживаться быстрее.
Решение:
Мы используем две очереди (обычную и приоритетную), чтобы справедливо распределять доступ.
Код на Python
from collections import deque
import time
class NightClubQueue:
def __init__(self, capacity):
self.capacity = capacity
self.regular_queue = deque() # Очередь для обычных посетителей
self.vip_queue = deque() # Очередь для VIP
def arrive(self, name, is_vip=False):
if is_vip:
self.vip_queue.append(name)
print(f"🔥 VIP {name} добавлен в VIP-очередь!")
else:
self.regular_queue.append(name)
print(f"🕺 {name} встал в обычную очередь!")
def admit_guest(self):
if len(self.vip_queue) > 0:
guest = self.vip_queue.popleft()
print(f"🚀 Пропускаем VIP {guest}!")
elif len(self.regular_queue) > 0:
guest = self.regular_queue.popleft()
print(f"✅ Пропускаем обычного гостя {guest}!")
else:
print("⏳ Очередь пуста, можно отдыхать!")
def run_night(self):
print("\n🎶 Начинаем вечер в клубе! 🎶\n")
while self.vip_queue or self.regular_queue:
self.admit_guest()
time.sleep(1) # Имитация задержки при входе
print("\n🎉 Вход завершен, клуб заполнен!\n")
# Пример использования
club = NightClubQueue(capacity=5)
club.arrive("Иван")
club.arrive("Алина", is_vip=True)
club.arrive("Дмитрий")
club.arrive("Сергей", is_vip=True)
club.arrive("Мария")
club.run_night()
Как это работает?
1. Добавляем людей в две очереди:
- VIP-гости попадают в
vip_queue. - Обычные посетители – в
regular_queue. 2. При входе в клуб приоритет отдается VIP-гостям.
3. Гости заходят по очереди, пока клуб не заполнится.
4. Клуб закрывается, когда все вошли.
### Реальное применение
Этот алгоритм можно использовать в:
- Управлении живыми очередями (концерты, аэропорты 🛫, мероприятия 🎭).
- Разработке онлайн-систем бронирования, где премиум-клиенты получают приоритет.
- Виртуальных очередях (например, при покупке билетов 🎟).
Подпишись 👉🏻 @KodduuPython 🤖
🔥1
Ну вот нацонец-то выпустили мою статью на habr. Это тот еще челлендж - это не мемы постить на pikabu 😀
Статья про то как мы делаем RAG (Retrieval Augmented Generation) систему на Python для нашей компании. Очень увлекательное занятие, скоро у нас будет возможность спросить вопрос в slack по любым данным компании за 10 лет, и получить точный ответ за 10 сек.
Бота назвали R2D2 🤖 Прикрутили локальные модели + Gemini, OpenAPI, YandexGPT, Gigachat. Тестируем сейчас какая лучше для нас.
Буду писать серию статей по этой теме на habr, если интересно - подпишитесь там на меня.
Планы огромные, например:
👉 Будем пилить AI агента, который может уточнять проблему у клиента, и заводить качественный баг в JIRA (сейчас на это уходят дорогие ресурсы инженеров) 🧐
👉 Будем пилить AI агента для уточнения тербований у PM в slack, и заводить план на wiki, а может даже и набор JIRA tickets + Ghant Chart 🤔
Подпишись 👉🏻 @KodduuPython 🤖
Статья про то как мы делаем RAG (Retrieval Augmented Generation) систему на Python для нашей компании. Очень увлекательное занятие, скоро у нас будет возможность спросить вопрос в slack по любым данным компании за 10 лет, и получить точный ответ за 10 сек.
Бота назвали R2D2 🤖 Прикрутили локальные модели + Gemini, OpenAPI, YandexGPT, Gigachat. Тестируем сейчас какая лучше для нас.
Буду писать серию статей по этой теме на habr, если интересно - подпишитесь там на меня.
Планы огромные, например:
👉 Будем пилить AI агента, который может уточнять проблему у клиента, и заводить качественный баг в JIRA (сейчас на это уходят дорогие ресурсы инженеров) 🧐
👉 Будем пилить AI агента для уточнения тербований у PM в slack, и заводить план на wiki, а может даже и набор JIRA tickets + Ghant Chart 🤔
Подпишись 👉🏻 @KodduuPython 🤖
Хабр
Как я сделал RAG для своей компании
Появилась свободное время, и я решил сделать RAG (Retrieval Augmented Generation) для нашей компании. Компания небольшая, но документации технической и бизнес накопилось очень много, в основном на...
⚡3👍3
И не забываем про курс профессия Python-разработчик с преподавателями 🔥🔥🔥
Реклама. Информация о рекламодателе по ссылкам в посте.
Реклама. Информация о рекламодателе по ссылкам в посте.
🌸 С наступающим 8 марта! Ниже код, который рисует радужный цветок 🎨💐
💡 Что делает этот код?
🌈 Рисует цветок с 6 лепестками, каждый разного цвета.
🌿 Добавляет зеленый стебель для естественного вида.
🐢 Использует `turtle`, чтобы легко и красиво рисовать графику.
❔Подумайте как ускорить рисование, и как сделать чтобы стебель шел всегда вниз 🤔
Подпишись 👉🏻 @KodduuPython 🤖
import turtle
import math
import random
# Настройка экрана
screen = turtle.Screen()
screen.bgcolor("lightblue")
t = turtle.Turtle()
t.speed(0)
# Палитра цветов для лепестков
colors = ["red", "orange", "yellow", "green", "blue", "purple"]
# Функция для рисования сердцевидного лепестка
def heart_petal(size, color):
t.fillcolor(color)
t.begin_fill()
t.left(140)
t.forward(size)
for _ in range(200): # Рисуем дугу
t.right(1)
t.forward(size * math.pi / 200)
t.left(120)
for _ in range(200): # Вторая дуга
t.right(1)
t.forward(size * math.pi / 200)
t.forward(size)
t.end_fill()
# Рисуем цветок с разноцветными лепестками
t.penup()
t.goto(0, -50)
t.pendown()
for i in range(6):
t.color(colors[i % len(colors)]) # Берем цвет из списка
heart_petal(50, colors[i % len(colors)])
t.right(60) # Поворачиваем для следующего лепестка
# Рисуем стебель
t.color("green")
t.fillcolor("green")
t.penup()
t.goto(0, -50)
t.pendown()
t.right(90)
t.forward(200)
# Оставляем окно открытым
turtle.done()
💡 Что делает этот код?
🌈 Рисует цветок с 6 лепестками, каждый разного цвета.
🌿 Добавляет зеленый стебель для естественного вида.
🐢 Использует `turtle`, чтобы легко и красиво рисовать графику.
❔Подумайте как ускорить рисование, и как сделать чтобы стебель шел всегда вниз 🤔
Подпишись 👉🏻 @KodduuPython 🤖
Женская логика – это нечто уникальное, непредсказуемое и невероятно гениальное. Именно за это мы и любим женщин! ❤️
Давайте напишем юмористический код на Python, который это демонстрирует.
😂 Код (все в шутку, не воспринимать всерьез! 🙃)
🔥 Как работает этот код?
💖 Эмулирует "женскую логику", выдавая неожиданные, но жизненные ответы.
🎭 Использует `random.choice()`, потому что предсказать ответ невозможно.
😂 Делает жизнь веселее – ведь именно эта загадочность и делает женщин уникальными!
Девушки, без обид! Мы вас любим такими, какие вы есть! ❤️ 😘
Подпишись 👉🏻 @KodduuPython 🤖
Давайте напишем юмористический код на Python, который это демонстрирует.
😂 Код (все в шутку, не воспринимать всерьез! 🙃)
import random
class WomanLogic:
def __init__(self):
self.mood = random.choice(["😇 Хорошее", "😈 Плохое", "🤔 Непонятное"])
self.choices = {
"Что хочешь поесть?": ["Не знаю", "Что-то вкусное", "Ты должен угадать!"],
"Ты точно не злишься?": ["Нет", "Нет.", "Я? Да нет, конечно..."],
"Можно купить это платье?": ["Оно мне идет?", "У меня уже есть похожее, но другое!", "Ты считаешь меня толстой?!"],
"Как тебе мой новый маникюр?": ["Красиво!", "Очень красиво!", "Ты даже не посмотрел! 😡"],
"Ты меня любишь?": ["Да", "Очень!", "Докажи!"],
}
def ask(self, question):
if question in self.choices:
return random.choice(self.choices[question])
return "Ты сам должен знать ответ! 😤"
# 🎭 Тестируем "женскую логику"
wl = WomanLogic()
print(f"🌸 Настроение сейчас: {wl.mood}\n")
questions = [
"Что хочешь поесть?",
"Ты точно не злишься?",
"Можно купить это платье?",
"Как тебе мой новый маникюр?",
"Ты меня любишь?",
]
for q in questions:
print(f"❓ {q}")
print(f"💬 {wl.ask(q)}\n")
🔥 Как работает этот код?
💖 Эмулирует "женскую логику", выдавая неожиданные, но жизненные ответы.
🎭 Использует `random.choice()`, потому что предсказать ответ невозможно.
😂 Делает жизнь веселее – ведь именно эта загадочность и делает женщин уникальными!
Девушки, без обид! Мы вас любим такими, какие вы есть! ❤️ 😘
Подпишись 👉🏻 @KodduuPython 🤖
🔥2👀2