chatgpt-web-dev / chatgpt-web

A third-party ChatGPT Web UI page built with Express and Vue3, through the official OpenAI completion API. / 用 Express 和 Vue3 搭建的第三方 ChatGPT 前端页面, 基于 OpenAI 官方 completion API.
https://chatgpt-web.dev
MIT License
1.54k stars 437 forks source link

vision模型图片上传没压缩? #539

Open lehhair opened 1 month ago

lehhair commented 1 month ago

上传大文件模型就报错,小的就正常

BobDu commented 1 month ago

chagpt 自己会压缩分辨率的啊。 是大小直接超过20MB了都? 这个确实没有进一步处理。一般图片不至于这么大吧...

lehhair commented 1 month ago

chagpt 自己会压缩分辨率的啊。 是大小直接超过20MB了都? 这个确实没有进一步处理。一般图片不至于这么大吧...

我也不知道为啥,实测nextweb是没问题的,小文件也没问题,4MB左右的都不行,下次我再排查一下试试吧,我用的oneapi转换的

BobDu commented 1 month ago

前面加nginx了嘛? 如果有加的话需要调一下 nginx的 client_max_body_size

lehhair commented 1 month ago

前面加nginx了嘛? 如果有加的话需要调一下 nginx的 client_max_body_size

加过了,不知道报错在什么地方,等我有空再次复现仔细查看一下日志再向您反馈,感谢

lehhair commented 1 month ago

前面加nginx了嘛? 如果有加的话需要调一下 nginx的 client_max_body_size

确定了一下,就是我的api不兼容大文件,确实是需要压缩一下才能用🙃

lehhair commented 1 month ago

前面加nginx了嘛? 如果有加的话需要调一下 nginx的 client_max_body_size

为了解决这个问题我用python弄了个图片压缩服务器,在请求api的时候多一次图片压缩的请求体转发

from flask import Flask, request, jsonify
import base64
import io
from PIL import Image

app = Flask(__name__)

@app.route('/', defaults={'path': ''}, methods=['POST'])
@app.route('/<path:path>', methods=['POST'])
def compress_image(path):
    data = request.get_json()

    image_data = data.get('image')

    image_bytes = base64.b64decode(image_data)

    image = Image.open(io.BytesIO(image_bytes))

    image = image.convert('RGB')

    quality = 80

    compressed_image_buffer = io.BytesIO()

    image.save(compressed_image_buffer, format='JPEG', optimize=True, quality=quality)

    compressed_image_buffer.seek(0)

    compressed_image_base64 = base64.b64encode(compressed_image_buffer.getvalue()).decode('utf-8')

    return jsonify({'image': compressed_image_base64})

if __name__ == '__main__':
    app.run()
BobDu commented 1 month ago

nodejs有合适的库能干这个么。有的话可以考虑把这个功能集成到项目里面来。

lehhair commented 1 month ago

nodejs有合适的库能干这个么。有的话可以考虑把这个功能集成到项目里面来。

前端的压缩方法挺多的,我只是不会js😵