django - 如何使用 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.
解决方案
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)
这不是一个非常有效的方法,如果您要上传大文件,请小心。
推荐阅读
- java - 如何获取输出并获取数组/矩阵中的列总和?
- node.js - 异步回调函数
- android - 回购同步挂在 96%(Orangefox 恢复)
- c++ - 不存在从“std::string”到“const char *”的合适转换函数c++
- python - 带有 shell 脚本的 aws cli:上传失败:无法找到凭据
- r - R绘图限制和轴标签/标题之间的通用距离
- python-3.x - 替换 Python F 字符串的选项
- javascript - 为什么我在弹出模式下的切换模式不动?
- python - Python - 删除行索引并插入列标题
- laravel - 如何在laravel中为同一路由组动态设置前缀中的角色名称