ホームページ  >  記事  >  バックエンド開発  >  FastAPI で NumPy 画像配列をレンダリングするにはどうすればよいですか?

FastAPI で NumPy 画像配列をレンダリングするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-24 02:40:02754ブラウズ

How Do You Render a NumPy Image Array in FastAPI?

Rendering NumPy Array in FastAPI

記事「FastAPI を使用して numpy 配列を画像として返す方法?」は有益な情報を提供しますが、画像の表示の問題に直接対処するものではありません。これを解決するために、基礎となる技術をさらに詳しく見てみましょう。

オプション 1: 画像をバイトとして返す

この方法では、PIL や OpenCV などのライブラリを使用して画像データをバイトに変換します。結果のバイトは、適切なコンテンツ タイプとヘッダーを持つカスタム レスポンスとして提供できます。

PIL の使用:

<code class="python">from PIL import Image
import io

@app.get('/image', response_class=Response)
def get_image():
    im = Image.open('test.png')
    with io.BytesIO() as buf:
        im.save(buf, format='PNG')
        im_bytes = buf.getvalue()
    headers = {'Content-Disposition': 'inline; filename=&quot;test.png&quot;'}
    return Response(im_bytes, headers=headers, media_type='image/png')</code>

OpenCV の使用:

<code class="python">import cv2

@app.get('/image', response_class=Response)
def get_image():
    arr = cv2.imread('test.png', cv2.IMREAD_UNCHANGED)
    success, im = cv2.imencode('.png', arr)
    headers = {'Content-Disposition': 'inline; filename=&quot;test.png&quot;'}
    return Response(im.tobytes(), headers=headers, media_type='image/png')</code>

オプション 2: 画像を JSON エンコードされた NumPy 配列として返す

このアプローチは画像の表示には推奨されませんが、画像を JSON エンコードされた NumPy 配列に変換するために使用できます。 numpy 配列。後でクライアント側でイメージに変換できます。

PIL の使用:

<code class="python">from PIL import Image
import numpy as np

@app.get('/image')
def get_image():
    im = Image.open('test.png')
    arr = np.asarray(im)
    return json.dumps(arr.tolist())</code>

OpenCV の使用:

<code class="python">import cv2

@app.get('/image')
def get_image():
    arr = cv2.imread('test.png', cv2.IMREAD_UNCHANGED)
    return json.dumps(arr.tolist())</code>

このメソッドを使用して画像を表示するには、受信したバイトまたは JSON でエンコードされたデータをクライアント側で画像形式に変換し直す必要があります。

以上がFastAPI で NumPy 画像配列をレンダリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。