Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

665
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!