Да, вы можете использовать Python для извлечения уникальных кадров из видео. Для этой задачи можно использовать библиотеки `OpenCV` для обработки видео и `imagehash` для сравнения изображений.
Вот пример, как это можно реализовать:
1. Установите необходимые библиотеки, если они еще не установлены:
```bash
pip install opencv-python imagehash Pillow
```
2. Используйте следующий код для извлечения уникальных кадров:
```python
import cv2
import imagehash
from PIL import Image
import numpy as np
def get_unique_frames(video_path, threshold=0.5):
# Открываем видео
cap = cv2.VideoCapture(video_path)
# Для хранения уникальных кадров
unique_frames = []
# Считываем первый кадр
ret, previous_frame = cap.read()
if not ret:
print("Не удалось прочитать видео.")
return unique_frames
previous_hash = imagehash.average_hash(Image.fromarray(previous_frame))
while True:
# Считываем следующий кадр
ret, frame = cap.read()
if not ret:
break
# Вычисляем хеш текущего кадра
current_hash = imagehash.average_hash(Image.fromarray(frame))
# Вычисляем расстояние Хэмминга между хешами
difference = previous_hash - current_hash
# Если разница больше заданного порога, считаем кадр уникальным
if difference / len(previous_hash.hash) ** 2 > threshold:
unique_frames.append(frame)
previous_hash = current_hash
cap.release()
return unique_frames
# Использование функции
video_path = 'path_to_your_video.mp4'
unique_frames = get_unique_frames(video_path)
# Сохраняем уникальные кадры
for i, frame in enumerate(unique_frames):
cv2.imwrite(f'unique_frame_{i}.jpg', frame)
print(f'Извлечено {len(unique_frames)} уникальных кадров')
```
### Объяснение кода:
- Мы открываем видеофайл и читаем кадры с помощью OpenCV.
- Для каждого кадра вычисляем средний хеш с помощью библиотеки `imagehash`.
- Сравниваем хеш текущего кадра с предыдущим. Если расстояние Хэмминга превышает порог (50% различия), то добавляем кадр в список уникальных кадров.
- В конце сохраняем уникальные кадры в файлы.
### Примечание:
- Вы можете изменять значение `threshold` в зависимости от ваших потребностей. Значение `0.5` означает, что кадры должны отличаться на 50% по хешу.
- Обратите внимание, что алгоритм может быть адаптирован под разные задачи. Например, можно использовать другие методы сравнения изображений.