Inglês
pip install SwanAPI -i https://pypi.org/simple
1️⃣ Escreva um arquivo predict.py
Aqui usamos o exemplo de conversão de uma imagem para preto e branco:
Se você já escreveu Gradio antes, deve estar familiarizado com este método de escrita, que é muito semelhante ao método de definição
gr.Interface
.
from SwanAPI import SwanInference
import cv2
# 这是一个简单的图像转黑白的任务
def predict ( im ):
result_image = cv2 . cvtColor ( im , cv2 . COLOR_BGR2GRAY )
return "success" , result_image
if __name__ == "__main__" :
api = SwanInference ()
api . inference ( predict ,
inputs = [ 'image' ],
outputs = [ 'text' , 'image' ],
description = "a simple test" )
api . launch ()
2⃣️ Execute python predict.py
para executar um serviço de inferência de API em localhost://127.0.0.1:8000/
$ python predict.py
* Serving Flask app " SwanAPI Server" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)
3⃣️ Chamar API
from SwanAPI import SwanRequests , Files
response = SwanRequests (
url = "http://127.0.0.1:8000/predictions/" ,
inputs = { 'im' : Files ( "/path/to/image" )}) #填写图像文件的本地路径
print ( response )
Se você usar
curl
para enviar uma solicitação:
curl --location ' http://127.0.0.1:8000/predictions/ '
--form ' im=@"path/to/image" '
Quando as saídas são definidas como 'image', o fluxo de bytes codificado em base64 é retornado e convertido em np.ndarray em python:
from SwanAPI import SwanRequests , Files
import base64
import numpy as np
import cv2
response = SwanRequests (
url = "http://127.0.0.1:8000/predictions/" ,
inputs = { 'im' : Files ( "../Feedback/assets/FeedBack.png" )}) #填写图像文件的本地路径
image_base64 = response [ str ( 1 )][ 'content' ]
nparr = np . frombuffer ( base64 . b64decode ( image_base64 ), np . uint8 )
img_restore = cv2 . imdecode ( nparr , cv2 . IMREAD_COLOR )
cv2 . imwrite ( "output.jpg" , img_restore )
Após a conclusão do desenvolvimento predict.py
:
1⃣️ Crie um arquivo swan.yaml
, que guiará a construção da sua imagem
build :
gpu : false
system_packages :
- " libgl1-mesa-glx "
- " libglib2.0-0 "
python_version : " 3.10 "
python_packages :
- " numpy "
- " opencv-python "
predict :
port : 8000
construir:
gpu
: se deseja ativar o modo gpu. true selecionará automaticamente o melhor suporte da Nvidia com base na configuração de seu hardware, python_version e estrutura de aprendizado profundo.
system_packages
: Bibliotecas básicas do sistema Linux, apt-get install
.
python_version
: a versão básica do Python em que a imagem é executada oferece suporte a 3.8, 3.9 e 3.10.
python_packages
: Bibliotecas Python das quais seu modelo depende
- "torch==2.0.0 --index-url https://download.pytorch.org/whl/cpu"
python_source
: Especifique a fonte de download da biblioteca python, opcional cn
e us
, o padrão é us
. Selecione a fonte de download cn
usará清华源
prever:
port
: o número da porta quando o serviço de inferência é iniciado2⃣️Construa a imagem
swan build -t my-dl-image
Parâmetros opcionais de construção do cisne:
-t
: obrigatório. Especifique o nome da construção da imagem, como my-dl-image
.-r
: opcional. Se você adicionar este parâmetro, o contêiner será executado após a construção da imagem e o mapeamento da porta será feito: swan build -r -t my-dl-image
-s
: opcional. Se este parâmetro for adicionado, o Dokefile será salvo no diretório após a construção da imagem.3⃣️ Execute o contêiner
docker run my-dl-image
Se estiver executando em GPU
docker run --gpus all my-dl-image