Spaces:
Sleeping
Sleeping
from django.shortcuts import get_object_or_404 | |
from django.core.files.base import ContentFile | |
from .models import UserImageRecognition | |
from .emotion_recognition import emotionImage, emotionImageFromArray | |
from io import BytesIO | |
import cv2 | |
import numpy as np | |
from PIL import Image | |
def proccess_uploaded_image(image_data_id): | |
image_data = None | |
image_data = get_object_or_404(UserImageRecognition, pk=image_data_id) | |
final_image, predicted_emotions, recognized_emotion = emotionImage( | |
image_data.uploaded_image.name) | |
final_image = converter_to_django_file(final_image) | |
image_data.final_image = final_image | |
image_data.predicted_emotions = predicted_emotions | |
image_data.recognized_emotion = recognized_emotion | |
image_data.status = "COM" | |
image_data.save() | |
def process_image_from_api(image_file): | |
""" | |
Обрабатывает изображение, переданное через API, и возвращает финальное изображение и данные эмоций. | |
Args: | |
image_file (InMemoryUploadedFile): Исходное изображение, полученное через API. | |
Returns: | |
tuple: (final_image, predicted_emotions, recognized_emotion) | |
- final_image: обработанное изображение в формате numpy array. | |
- predicted_emotions: словарь с предсказанными эмоциями и их вероятностями. | |
- recognized_emotion: самая вероятная эмоция. | |
""" | |
# Конвертируем загруженный файл в OpenCV-совместимый формат | |
file_bytes = np.frombuffer(image_file.read(), np.uint8) | |
image = cv2.imdecode(file_bytes, cv2.IMREAD_COLOR) | |
# Обрабатываем изображение с помощью emotionImageFromArray | |
final_image, predicted_emotions, recognized_emotion = emotionImageFromArray(image) | |
return final_image, predicted_emotions, recognized_emotion | |
def converter_to_django_file(image): | |
img_io = BytesIO() | |
image = Image.fromarray(image) | |
image.save(img_io, format='JPEG', quality=100) | |
img_content = ContentFile(img_io.getvalue(), 'final_image.jpg') | |
return img_content | |
def convert_image_to_bytes(image): | |
# Конвертируем обработанное изображение в байты | |
_, buffer = cv2.imencode('.jpg', image) | |
output_image = BytesIO(buffer) | |
return output_image |