当用户在Django restapi中发布图像时如何调用函数

2024-06-28 18:45:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个人脸检测api,它将图像作为用户的输入。当用户创建POST请求时,如何调用函数? 我有使用opencv制作的人脸检测代码,我想把它集成到我的api中。你知道吗

你知道吗型号.py你知道吗

from django.db import models
import uuid

from .validators import validate_file_extension
def scramble_uploaded_filename(instance,filename):
    extension = filename.split(".")[-1]

    reformated = "{}.{}".format(uuid.uuid4(),extension)

    return reformated

def scramble_uploaded_filename1(instance,filename):
    extension = filename.split(".")[-1]

    return "{}.{}".format(uuid.uuid4(),extension)

class UploadVideo(models.Model):
    video = models.FileField('Uploaded Video',upload_to=scramble_uploaded_filename1, validators=[validate_file_extension] )
class UploadImage(models.Model):
    image = models.ImageField('Uploaded Image', upload_to=scramble_uploaded_filename)

你知道吗网址.py在resp api中

from django.conf.urls import url, include
from rest_framework import routers
from imageupload_rest.viewsets import UploadImageViewSet, UploadVideoViewSet

router = routers.DefaultRouter()
router.register('images', UploadImageViewSet, 'images')
router.register('videos', UploadVideoViewSet, 'videos')
app_name = 'reviews'
urlpatterns = [
    url(r'^',include(router.urls)),
]

你知道吗序列化程序.py你知道吗

from rest_framework import serializers
from imageupload.models import UploadImage, UploadVideo

class UploadImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = UploadImage
        fields = ('pk', 'image', )

class UploadVideoSerializer(serializers.ModelSerializer):
    class Meta:
        model = UploadVideo
        fields = ('pk', 'video' , )

你知道吗视图集.py你知道吗

from rest_framework import viewsets
from imageupload_rest.serializers import UploadImageSerializer, UploadVideoSerializer
from imageupload.models import UploadImage, UploadVideo

class UploadImageViewSet(viewsets.ModelViewSet):
queryset = UploadImage.objects.all()
    serializer_class = UploadImageSerializer

class UploadVideoViewSet(viewsets.ModelViewSet):
    queryset = UploadVideo.objects.all()
    serializer_class = UploadVideoSerializer

你知道吗图像函数.py这与视图集存储在同一文件夹中

#when the user posts an image this function should run
import cv2
import os
import numpy as np
def image(path):
    recognizer = cv2.face.LBPHFaceRecognizer_create()
    #trainingData.yml is my pretrained model which includes a unique id for each user
    recognizer.read('recognizer/trainingData.yml')
    detector = `cv2.CascadeClassifier('cascades\data\haarcascade_frontalface_alt2.xml')`   
    im = cv2.imread(path)
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    faces = detector.detectMultiScale(gray, scaleFactor=1.5, minNeighbors=5)
    for (x, y, w, h) in faces:
        cv2.rectangle(im, (x, y), (x + w, y + h), (225, 0, 0), 2)
        Id, conf = recognizer.predict(gray[y:y + h, x:x + w])
        if 2 < conf < 125:
            cv2.putText(im, str(Id), (x, y + h),fontface, fontscale, fontcolor)
    cv2.imshow('Recognition', im)
    cv2.imwrite("image.jpg",im)
    cv2.waitKey(0)
    res = "true"
    return res

我希望这个函数在用户发布图像后运行。你知道吗


Tags: frompyimageimportrestmodelsextensionfilename
1条回答
网友
1楼 · 发布于 2024-06-28 18:45:14

在使用modelViewset时,需要覆盖modelViewset生命周期方法的现有post方法。检查CreateAPIView

from .imagefunction import image
from rest_framework import status

class UploadImageViewSet(viewsets.ModelViewSet):
    queryset = UploadImage.objects.all()
    serializer_class = UploadImageSerializer
    def post(self, request, *args, **kwargs):
         serializer = self.get_serializer(data=request.data)
         serializer.is_valid(raise_exception=True)
         self.perform_create(serializer)
         // call your image recognition funciton, what should response some thing 
         is_face_include = image(serializer.data.get('image')) // or may be image(serializer.data.get('image')).url 
         if is_face_include: // we need our success method 
            return Response({message: "succesfully upload image"}, status=status.HTTP_201_CREATED)
         else:
            Response({message: "no face found"}, status=status.HTTP_400_BAD_REQUEST)

相关问题 更多 >