Kodduu Python
1.08K subscribers
311 photos
28 videos
186 links
Научись программировать на Python на интересных примерах

Самый быстрый курс https://stepik.org/a/187914
Самый нескучный курс https://stepik.org/a/185238

Во вопросам сотрудничества: @AlexErf
Download Telegram
Давайте создадим код для обнаружения дронов. Этот код будет учитывать размер объекта относительно размера кадра для более точного определения расстояния:


import cv2
import numpy as np

class DroneDetector:
def __init__(self):
self.camera = cv2.VideoCapture(0)
self.target_distance = 50 # Максимальная допустимая дистанция до цели
self.known_width = 50 # Знакованный размер объекта в метрах
self.known_distance = 10 # Знакованный расстояние до объекта в метрах

def detect_drones(self):
ret, frame = self.camera.read()

if not ret:
print("Ошибка при чтении кадра")
return None

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 100, 200)
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

detected_drones = []

for contour in contours:
area = cv2.contourArea(contour)

if area > 1000: # Простое условие для определения крупных объектов
x, y, w, h = cv2.boundingRect(contour)

# Вычисление отношения размера объекта к размеру кадра
ratio = max(w, h) / min(frame.shape[2], frame.shape[1])

# Корректировка расстояния
distance = np.sqrt(x**2 + y**2) * ratio

if distance < self.target_distance:
drone_size = max(w, h)
drone_ratio = drone_size / self.known_width

# Прогнозирование расстояния до дрона
predicted_distance = self.known_distance * drone_ratio

print(f"Обнаружен потенциальный дрон на расстоянии {predicted_distance:.2f} метров")

detected_drones.append({
'distance': predicted_distance,
'size': drone_size,
'ratio': drone_ratio
})

return frame, detected_drones

def display_frame(self):
ret, frame = self.camera.read()

if ret:
cv2.imshow('Drone Camera', frame)

if cv2.waitKey(1) & 0xFF == ord('q'):
self.camera.release()
cv2.destroyAllWindows()

return frame

def main():
detector = DroneDetector()

while True:
frame, detected_drones = detector.detect_drones()
if frame is not None:
detector.display_frame()

if len(detected_drones) > 0:
print("Детектированные дроны:")
for drone in detected_drones:
print(f"- Расстояние: {drone['distance']:.2f} м, Размер: {drone['size']} пикселей, Соотношение: {drone['ratio']:.2f}")

# Здесь можно добавить дополнительную логику обработки и действий

else:
print("Не удалось получить кадр")

if __name__ == "__main__":
main()


### Ключевые особенности этого кода:

1. Класс DroneDetector: Создан класс для управления процессом обнаружения дронов.

2. Метод detect_drones():
- Читает кадр из камеры.
- Преобразует кадр в оттенки серого и применяет алгоритм Canny для выделения границ.
- Находит контуры крупных объектов.
- Вычисляет отношение размера объекта к размеру кадра.
- Корректирует расстояние, учитывая размер объекта.
- Предполагает расстояние до дрона на основе знаковых значений.

3. Метод display_frame():
- Отображает видеоизображение с камеры.
- Позволяет пользователю прервать работу приложения нажатием клавиши 'q'.

4. Главная функция main():
- Инициализирует объект DroneDetector.
- Запускает бесконечный цикл обнаружения и отображения дронов.

Подпишись 👉🏻 @KodduuPython 🤖
3👀1
### Как работает обнаружение дронов:

1. Код ищет крупные объекты (с площадью более 1000 пикселей) в кадре.
2. Для каждого найденного объекта вычисляется соотношение его размера к размеру кадра.
3. Расстояние корректируется, умножая простое расстояние на это соотношение.
4. Предполагается расстояние до дрона на основе знаковых значений и соотношения размеров.

### Дополнительные возможности:

- Код предоставляет базовую структуру для дальнейшей разработки.
- Можно добавить дополнительную логику для безопасного подхода к обнаруженным дронам.
- Реализовать систему предупреждения о приближающихся дронах.
- Интегрировать систему распознавания дронов с использованием нейронных сетей для повышения точности.

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

Подпишись 👉🏻 @KodduuPython 🤖
Как работает обнаружение дронов:

1. Код ищет крупные объекты (с площадью более 1000 пикселей) в кадре.
2. Для каждого найденного объекта вычисляется соотношение его размера к размеру кадра.
3. Расстояние корректируется, умножая простое расстояние на это соотношение.
4. Предполагается расстояние до дрона на основе знаковых значений и соотношения размеров.

Доп.возможности:

- Код предоставляет базовую структуру для дальнейшей разработки.
- Можно добавить дополнительную логику для безопасного подхода к обнаруженным дронам.
- Реализовать систему предупреждения о приближающихся дронах.
- Интегрировать систему распознавания дронов с использованием нейронных сетей для повышения точности.

Этот код предоставляет основу для обнаружения дронов с учетом их размеров относительно размера кадра.

Подпишись 👉🏻 @KodduuPython 🤖
2
Для прогнозирования погоды на Python можно использовать различные методы и подходы, от машинного обучения до API для получения текущей метеорологической информации. Вот пример кода, который использует модель машинного обучения (например, линейную регрессию) для прогнозирования температуры на основе данных, таких как дата, время и другие исторические метеопараметры.


import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# Загрузка и подготовка данных
# Предположим, у нас есть данные о погоде с такими столбцами:
# "date", "temperature", "humidity", "wind_speed", "pressure"

# Загрузим примерные данные
data = pd.read_csv('weather_data.csv')
data['date'] = pd.to_datetime(data['date'])

# Выделяем день, месяц и год как отдельные признаки
data['day'] = data['date'].dt.day
data['month'] = data['date'].dt.month
data['year'] = data['date'].dt.year

# Убираем ненужные столбцы и определяем целевую переменную
X = data[['day', 'month', 'year', 'humidity', 'wind_speed', 'pressure']]
y = data['temperature']

# Разделяем данные на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Создаем и обучаем модель линейной регрессии
model = LinearRegression()
model.fit(X_train, y_train)

# Прогнозируем на тестовой выборке
y_pred = model.predict(X_test)

# Оцениваем точность модели
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")

# Пример прогноза на следующий день
next_day = pd.DataFrame({
'day': [13],
'month': [11],
'year': [2024],
'humidity': [65], # Примерные значения
'wind_speed': [5],
'pressure': [1013]
})
next_day_prediction = model.predict(next_day)
print(f"Predicted temperature for next day: {next_day_prediction[0]:.2f}°C")


Этот код:
1. Загружает данные о погоде и подготавливает их.
2. Выделяет дополнительные признаки из даты (день, месяц, год).
3. Использует линейную регрессию для обучения модели.
4. Оценивает модель и прогнозирует температуру на следующий день.

Для улучшения прогноза можно использовать сложные модели, такие как временные ряды или более мощные алгоритмы (например, Random Forest, XGBoost, или нейронные сети).

Подпишись 👉🏻 @KodduuPython 🤖
Отзывы на наш самый быстрый курс по Python 🤖 Спасибо за все комментарии, курс был еще раз значительно улучшен по результатам ваших вводных 🤝

Подпишись 👉🏻 @KodduuPython 🤖
👍2
Вот код для анимации движения частиц, которые следуют за полем ветра, визуализированным стрелками. В этом коде используется библиотека matplotlib для отображения стрелок, которые показывают направление и скорость ветра, и движущихся частиц, которые следуют этому полю.


import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from noise import pnoise2 # Убедитесь, что установлен пакет noise (pip install noise)

# Параметры сетки и шума
grid_size = 10
num_particles = 200
scale = 0.1 # Масштаб шума
speed = 0.05 # Скорость изменения шума
time_step = 0

# Инициализация начальных позиций частиц
particles_x = np.random.uniform(0, grid_size, num_particles)
particles_y = np.random.uniform(0, grid_size, num_particles)

# Функция для генерации поля ветра с использованием перлин-шума
def generate_wind_field(time):
U = np.zeros((grid_size, grid_size))
V = np.zeros((grid_size, grid_size))
for i in range(grid_size):
for j in range(grid_size):
U[i, j] = pnoise2(i * scale, j * scale, octaves=3, base=int(time)) * 5
V[i, j] = pnoise2(i * scale + 100, j * scale + 100, octaves=3, base=int(time)) * 5
return U, V

# Настройка графика
fig, ax = plt.subplots(figsize=(8, 8))
ax.set_xlim(0, grid_size)
ax.set_ylim(0, grid_size)

# Начальная визуализация частиц и стрелок
scat = ax.scatter(particles_x, particles_y, color='blue', s=2)
U, V = generate_wind_field(time_step)
quiver = ax.quiver(np.linspace(0, grid_size, grid_size), np.linspace(0, grid_size, grid_size), U, V, color='red')

# Функция инициализации
def init():
scat.set_offsets(np.c_[particles_x, particles_y])
quiver.set_UVC(U, V)
return scat, quiver

# Функция обновления анимации
def update(frame):
global particles_x, particles_y, time_step
U, V = generate_wind_field(time_step)
time_step += speed

# Обновление стрелок
quiver.set_UVC(U, V)

# Интерполяция скорости ветра для частиц
particle_u = np.interp(particles_x, np.linspace(0, grid_size, grid_size), U[:, int(particles_y[0]) % grid_size])
particle_v = np.interp(particles_y, np.linspace(0, grid_size, grid_size), V[int(particles_x[0]) % grid_size, :])

# Обновление позиций частиц
particles_x = (particles_x + particle_u * 0.1) % grid_size
particles_y = (particles_y + particle_v * 0.1) % grid_size
scat.set_offsets(np.c_[particles_x, particles_y])

return scat, quiver

# Запуск анимации
ani = animation.FuncAnimation(fig, update, frames=200, init_func=init, interval=50, blit=True)

plt.show()


### Объяснение:

1. Поле ветра: Используем pnoise2 для создания переменных U и V, которые определяют горизонтальные и вертикальные компоненты скорости ветра. Значения U и V изменяются со временем, создавая динамическое поле ветра.

2. Частицы: Частицы (синие точки) движутся по направлению ветра, обновляя свои позиции на каждом кадре на основе текущего значения U и V.

3. Стрелки (quiver): Красные стрелки отображают направление и скорость ветра в каждом кадре, обновляясь вместе с полем ветра.

4. Анимация: FuncAnimation обновляет позиции частиц и стрелок для каждого кадра, создавая плавное движение воздушных масс.

Подпишись 👉🏻 @KodduuPython 🤖
This media is not supported in your browser
VIEW IN TELEGRAM
Анимация движения ветра. Код выше 👆👆👆

Подпишись 👉🏻 @KodduuPython 🤖
👍2
Пример кода для прогнозирования спроса на продукт с использованием временных рядов и модели ARIMA. Этот код поможет предсказать будущий спрос на продукт на основе предыдущих данных о продажах. ARIMA (AutoRegressive Integrated Moving Average) — популярная модель для анализа и прогнозирования временных рядов.


import pandas as pd
import numpy as np
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error

# Загрузка данных о продажах
# Предположим, у нас есть временной ряд с ежедневными данными о продажах
data = pd.read_csv('sales_data.csv')
data['date'] = pd.to_datetime(data['date'])
data.set_index('date', inplace=True)

# Визуализируем данные
plt.figure(figsize=(10, 6))
plt.plot(data, label='Daily Sales')
plt.title('Sales Data')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.legend()
plt.show()

# Создание модели ARIMA
# (p, d, q) - параметры модели, их можно подбирать автоматически, но здесь поставим примерные значения
p, d, q = 5, 1, 2
model = ARIMA(data['sales'], order=(p, d, q))
fitted_model = model.fit()

# Прогноз на 30 дней вперед
forecast_steps = 30
forecast = fitted_model.forecast(steps=forecast_steps)

# Построение графика прогноза
plt.figure(figsize=(10, 6))
plt.plot(data, label='Historical Sales')
plt.plot(pd.date_range(data.index[-1], periods=forecast_steps+1, closed='right'), forecast, color='red', label='Forecast')
plt.title('Sales Forecast for Next 30 Days')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.legend()
plt.show()

# Оценка точности модели (например, среднеквадратичная ошибка на последних 30 днях)
train_size = int(len(data) * 0.8)
train, test = data['sales'][:train_size], data['sales'][train_size:]
model = ARIMA(train, order=(p, d, q))
fitted_model = model.fit()
forecast_test = fitted_model.forecast(steps=len(test))
mse = mean_squared_error(test, forecast_test)
print(f"Mean Squared Error: {mse}")


### Объяснение:

1. Подготовка данных: Загружаем временной ряд продаж и визуализируем данные.
2. Создание модели: Настраиваем параметры модели ARIMA и обучаем её на исторических данных.
3. Прогноз: Строим прогноз на 30 дней вперед.
4. Оценка модели: Вычисляем среднеквадратичную ошибку (MSE) для тестовой выборки, чтобы оценить точность прогноза.

### Примечания:
- Параметры модели ARIMA (`p`, d, q`) можно подобрать автоматически с помощью библиотек, таких как `pmdarima, которая содержит функцию auto_arima, чтобы выбрать лучшие параметры на основе критериев оценки модели.
- Этот пример подходит для анализа и прогнозирования временных рядов, таких как продажи, спрос, посещаемость и другие временные данные.

Подпишись 👉🏻 @KodduuPython 🤖
2
И не забываем про бесплатный курс "Язык программирования BrainFuck или ВыносМозга!", отзывы говорят сами за себя 😀 Курс для тех кто хочет напрячь мозг, и понять - как же все таки работает компьютер 💻

Подпишись 👉🏻 @KodduuPython 🤖