首页 > 解决方案 > 如何使用 django 上传的 tensorflow 读取文件

问题描述

我已经使用 django 和 django rest 框架上传了一个文件,一个我们有InMemoryUploadedFile的图像。现在我想使用 tensorlfow 读取这个文件。

序列化程序.py

class ImageClassificationSerializer(serializers.Serializer):
    image = serializers.ImageField()

视图.py

class ImageClassificationView(APIView):
    parser_classes = (MultiPartParser, FormParser)
    serializer_class = ImageClassificationSerializer

    def post(self, request):
        serializer = self.serializer_class(data=request.data)
        if serializer.is_valid():
            input_name = "file_reader"
            file_reader = tensorflow.read_file(serializer.validated_data['image'], input_name)

            print file_reader
        response = {
            "success": True
        }
        return Response(response, status=status.HTTP_200_OK)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

当我阅读文件时,我收到下面提到的错误:

Expected string passed to parameter 'filename' of op 'ReadFile', got <InMemoryUploadedFile: mobile_image.jpeg (image/jpeg)> of type 'InMemoryUploadedFile' instead.

标签: djangopython-3.xtensorflowdjango-rest-framework

解决方案


Tensorflow 似乎需要本地文件的文件名,而不是现在传递的文件对象。您可以将上传内容写入临时文件,然后将该文件的路径传递给 Tensorflow,如下所示:

import tempfile
with tempfile.NamedTemporaryFile() as tempfile:
    tempfile.write(serializer.validated_data['image'].read())
    tempfile.flush()
    file_reader = tensorflow.read_file(tempfile.name)

这不是一个非常有效的方法,如果您要上传大文件,请小心。


推荐阅读