Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

663
Vistas
python: un problema de imagen i/o basado en fastapi

Trato de hacer un código para la transferencia de estilo de imagen basado en fastapi.

Hice el código haciendo referencia a muchos artículos en Github y stack overflow, lo encontré efectivo para convertir el byte de la imagen en base64 y transmitirlo.

Entonces, diseñé el código de mi cliente, se codificó en base64 y envié una solicitud, y mi servidor la recibió perfectamente.

Sin embargo, enfrenté dificultades para restaurar bytes de imagen a ndarray.

Mi código me dice los siguientes errores:

 image_array = np.frombuffer(base64.b64decode(image_byte)).reshape(image_shape) ValueError: cannot reshape array of size 524288 into shape (512,512,4)

Este es mi código de cliente:

 import base64 import requests import numpy as np import json from matplotlib.pyplot import imread from skimage.transform import resize if __name__ == '__main__': path_to_img = "my image path" image = imread(path_to_img) image = resize(image, (512, 512)) image_byte = base64.b64encode(image.tobytes()) data = {"shape": image.shape, "image": image_byte.decode()} response = requests.get('http://127.0.0.1:8000/myapp/v1/filter/a', data=json.dumps(data))

y, Este es mi código de servidor:

 import json import base64 import uvicorn import model_loader import numpy as np from fastapi import FastAPI from typing import Optional app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"} @app.get("/myapp/v1/filter/a") async def style_transfer(data: dict): image_byte = data.get('image').encode() image_shape = tuple(data.get('shape')) image_array = np.frombuffer(base64.b64decode(image_byte)).reshape(image_shape) if __name__ == '__main__': uvicorn.run(app, port='8000', host="127.0.0.1")

Por favor revisa mi código y dame algunos consejos. Realmente no sé lo que me estoy perdiendo.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Como se mencionó anteriormente aquí , aquí y aquí , se debe usar UploadFile para cargar archivos desde aplicaciones cliente. Por ejemplo:

lado del servidor:

 @app.post("/upload") async def upload(file: UploadFile = File(...)): try: contents = await file.read() with open(file.filename, 'wb') as f: f.write(contents) except Exception: return {"message": "There was an error uploading the file"} finally: await file.close() return {"message": f"Successfuly uploaded {file.filename}"}

lado del cliente:

 import requests url = 'http://127.0.0.1:8000/upload' file = {'file': open('images/1.png', 'rb')} resp = requests.post(url=url, files=file) print(resp.json())

Sin embargo, si aún necesita enviar una imagen codificada en base64 , puede hacerlo como se describió anteriormente aquí (Opción 2). En el lado del cliente, puede codificar la imagen en base64 y enviarla mediante una solicitud POST de la siguiente manera:

 with open("photo.png", "rb") as image_file: encoded_string = base64.b64encode(image_file.read()) payload ={"filename": "photo.png", "filedata": encoded_string} resp = requests.post(url=url, data=payload)

En el lado del servidor, puede recibir la imagen usando un campo de Form y decodificar la imagen de la siguiente manera:

 @app.post("/upload") async def upload(filename: str = Form(...), filedata: str = Form(...)): image_as_bytes = str.encode(filedata) # convert string to bytes img_recovered = base64.b64decode(image_as_bytes) # decode base64string try: with open("uploaded_" + filename, "wb") as f: f.write(img_recovered) except Exception: return {"message": "There was an error uploading the file"} return {"message": f"Successfuly uploaded {filename}"}
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda