WebAPIã«ã€ããŠãã£ããïŒLLMãšå¯Ÿè©±ããªãããŸãšããŸããïŒééã£ãŠããç®æããã£ããïŒã³ã¡ã³ãã§æããŠãã ããïŒ
ð§© èŠããã«äœïŒ
ãµãŒããŒã«ããªã¯ãšã¹ãïŒãé¡ãïŒããéããšã
ãµãŒããŒããã¬ã¹ãã³ã¹ïŒè¿äºïŒããšããŠããŒã¿ãè¿ããŠãããã
ãã®**ãããšãã®ã«ãŒã«ã決ããä»çµã¿ãWeb APIã§ãã
ã€ãŸããHTTP ãšããéä¿¡ã®ä»çµã¿ã䜿ã£ãŠã
ãããã¯ãŒã¯è¶ãã«ã¯ã©ã€ã¢ã³ãïŒãé¡ãããåŽïŒãšãµãŒããŒïŒåŠçããåŽïŒããããšãããããã®çªå£ïŒã€ã³ã¿ãŒãã§ãŒã¹ïŒ ã®ããšã§ãã
ãµãŒããŒã®äžã§ã©ããªããã°ã©ã ãåããŠããã®ãã¯ç¥ããªããŠãã
ã¯ã©ã€ã¢ã³ãã¯URIïŒã¢ãã¬ã¹ïŒãæå®ããŠåŒã³åºãã ãã§OKã
ããã«ãã£ãŠãç°ãªãã¢ããªããµãŒãã¹å士ã§ãæ å ±ãå ±æãããã飿ºãããã§ããããã«ãªããŸãã
ðž äŸïŒç»åãçœé»ã«ããWebAPI
ã¯ã©ã€ã¢ã³ããããã®ç»åãçœé»ã«ããããªããç»åãçœé»ã«ããWebAPIã䜿ããïŒã
ã¯ã©ã€ã¢ã³ãããµãŒããŒããããã®ç»åãçœé»ã«ããŠãããªãïŒãïŒãªã¯ãšã¹ãïŒ
ãµãŒããŒããããã倿ããããïŒå
éšã§åŠçïŒ
ãµãŒããŒãã¯ããã§ããããïŒã¬ã¹ãã³ã¹ïŒ
ã¯ã©ã€ã¢ã³ããããããšããã¡ãããšçœé»ã«ãªã£ãŠãïŒã
ãã®ãšããã¯ã©ã€ã¢ã³ãã¯ãµãŒããŒãã©ããªæ¹æ³ã§çœé»ã«ããŠãããç¥ããªããŠãOKã§ãã
WebAPIãéããŠããé¡ãããšãçµæãããããšãããŠããã ããªã®ã§ãã
ãã®ãšãã® ãã¯ã©ã€ã¢ã³ããéãå ŽæïŒURLïŒããšãéãå 容ã®åœ¢åŒããããŠãè¿ã£ãŠããããŒã¿ã®åœ¢åŒã ãæ±ºããŠãããã®ã WebAPI ã§ãã
WebAPIãäœããšã¯ïŒ
WebAPIãäœããšãã¯ãçœé»ã®å€æåŠçãã®ãã®ïŒãã®åŠçãåŒã³åºãããå ¥å£ïŒãšã³ããã€ã³ãïŒãã®äž¡æ¹ãå®è£ ããŸãã
â çœé»å€æåŠçãäœã
ããã¯æ®éã®ããã°ã©ã åŠçã§ãã
ããšãã°PythonãªãïŒ
from PIL import Image
def convert_to_grayscale(image_path):
image = Image.open(image_path)
gray_image = image.convert("L") # "L"ã¯çœé»ã¢ãŒã
gray_image.save("gray.png") return "gray.png"
ããã¯ç»åãçœé»ã«å€æãã颿°ã§ãã
ãã®éšåã ãã§ã¯ãWebAPIãã§ã¯ãªãããã ã®ããã°ã©ã ïŒé¢æ°ïŒã§ãã
â¡ WebAPIãšããŠå ¬éãã(WebAPIãäœã)
次ã«ãã¯ã©ã€ã¢ã³ããããHTTPãªã¯ãšã¹ããã§ãã®åŠçãåŒã³åºããããã«ããŸãã
Pythonãªã Flask ãšããã©ã€ãã©ãªã§ããæžããŸãïŒ
from flask import Flask, request, send_file
from PIL import Image
import io
app = Flask(__name__)
@app.route("/api/convert-to-grayscale", methods=["POST"])
def convert_image():
file = request.files["image"] # ã¯ã©ã€ã¢ã³ãããéãããç»å
image = Image.open(file.stream)
gray_image = image.convert("L")
# 倿åŸã®ç»åãã¬ã¹ãã³ã¹ãšããŠè¿ã
img_io = io.BytesIO()
gray_image.save(img_io, "PNG")
img_io.seek(0)
return send_file(img_io, mimetype="image/png")
if __name__ == "__main__":
app.run()
ããã§ã
-
/api/convert-to-grayscaleã WebAPIã®ãšã³ããã€ã³ãïŒå ¥ãå£ïŒ -
convert_image()ã®äžã§ãã£ãŠããã®ã ãµãŒããŒã®åŠçéšå
ã§ãã
ð åŒã³åºãã®æµã
- ã¯ã©ã€ã¢ã³ãã
POST /api/convert-to-grayscaleã«ç»åãéã - Flaskããã®ãªã¯ãšã¹ããåãåã
-
convert_image()颿°ãåŒã°ããŠç»åãçœé»ã«ãã - çœé»ç»åãã¬ã¹ãã³ã¹ãšããŠè¿ã
ãã ããã°ã©ã ãæžãããšãããªãã
ãã®ããã°ã©ã ãâã€ã³ã¿ãŒãããè¶ãã«åŒã³åºããããã«ããä»çµã¿âãäœãããšãªã®ã ïŒ
å®éã«åŒã³åºãã«ã¯ïŒ
â æ¹æ³â ïŒcurlã³ãã³ãã§åŒã³åºãïŒç°¡åã«è©Šãæ¹æ³ïŒ
ããœã³ã³ã®ã¿ãŒããã«ïŒã³ãã³ãããã³ããïŒã§ããæã¡ãŸãð
curl -X POST -F "image=@cat.png" http://localhost:5000/api/convert-to-grayscale --output gray.png
ð æå³ïŒ
-
-X POSTâ ãPOSTãªã¯ãšã¹ããéãã -
-F "image=@cat.png"â ãcat.pngãšããç»åãã¡ã€ã«ãéãã -
http://localhost:5000/api/convert-to-grayscaleâ ãµãŒããŒã®WebAPIã®å ¥å£ -
--output gray.pngâ è¿ã£ãŠããçµæïŒçœé»ç»åïŒãgray.pngãšããååã§ä¿åãã
ð¬ ã€ãŸãïŒ
ããã®ç»åéãããçœé»ã«ããŠïŒããšãµãŒããŒã«ãé¡ãããŠã
çµæãåãåã£ãŠä¿åããŠããããšããããšã§ãã
â æ¹æ³â¡ïŒPythonã§åŒã³åºãïŒããã°ã©ã ãã䜿ãå ŽåïŒ
PythonåŽããåŒã³åºããªããrequests ãšããã©ã€ãã©ãªã䜿ããŸãã
import requests
url = "http://localhost:5000/api/convert-to-grayscale"
files = {"image": open("cat.png", "rb")}
response = requests.post(url, files=files)
with open("gray.png", "wb") as f:
f.write(response.content)
â æ¹æ³â¢ïŒWebãã©ãŠã¶ãJavaScriptããåŒã³åºã
ããWebã¢ããªïŒããã³ããšã³ãïŒã§åŒã³åºããããªããJavaScriptã§ããæžããŸãïŒ
const formData = new FormData();
formData.append("image", fileInput.files[0]);
fetch("http://localhost:5000/api/convert-to-grayscale", {
method: "POST",
body: formData
})
.then(response => response.blob())
.then(blob => {
const url = URL.createObjectURL(blob);
document.querySelector("#result").src = url; // çµæã衚瀺
});
ããã§ããã¿ã³ãæŒãããç»åãéä¿¡ããŠã
ãµãŒããŒããè¿ã£ãŠããçœé»ç»åããã©ãŠã¶ã§è¡šç€ºã§ããŸãã
ãŸãšã
WebAPIã¯ã決ãŸã£ãURIïŒäœæïŒ ã«å¯ŸããŠãHTTPãªã¯ãšã¹ããéãã ãã§äœ¿ããä»çµã¿ãã