一、编写 server.py Flask 服务代码(云服端布置)
from flask import Flask, request, jsonify
import base64
from openai import OpenAI
app = Flask(__name__)
# 替换为你的正确API Key
API_KEY = "sk-ws-H.EMXEPHH.Nzuj.MEYCIQCMTWx_h4kUIKbXNUTNKrCbpQOjx-"
BASE_URL = "https://llm-ab2cpkcjl1182sqz.cn-beijing.maas.aliyuncs.com/compatible-mode/v1"
MODEL_ID = "qwen3.7-plus"
client = OpenAI(api_key=API_KEY, base_url=BASE_URL)
def img_to_base64(raw_bytes):
return base64.b64encode(raw_bytes).decode("utf-8")
@app.route("/scan_card", methods=["POST"])
def scan():
try:
img_file = request.files["img"]
img_b64 = img_to_base64(img_file.read())
prompt = """
这是30题标准单选题答题卡,选项只有A/B/C/D,仅判断被2B铅笔完整涂黑的唯一选项
严格按题号1~30顺序输出结果,格式仅允许:1:A,2:B,3:C
严禁编造答案、严禁额外文字、换行、注释、解释,只输出逗号分隔结果!
逐题精准定位方框位置,以实际填涂色块为准!
"""
completion = client.chat.completions.create(
model=MODEL_ID,
messages=[
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img_b64}"}},
{"type": "text", "text": prompt}
]
}
],
temperature=0.0,
top_p=0.0,
max_tokens=200
)
result_text = completion.choices[0].message.content.strip()
return jsonify({"code": 0, "result": result_text})
except Exception as err:
return jsonify({"code": -1, "msg": str(err)})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8081, debug=False)
- 保存:
Ctrl+O→ 回车确认保存 - 退出 nano 编辑器:
Ctrl+X
步骤 2:运行客户端脚本
import requests
import os
SERVER_IP = "9.1694.197.176"
SERVER_URL = f"http://{SERVER_IP}:8081/scan_card"
def scan_image(img_path):
try:
with open(img_path, "rb") as f:
upload_file = {"img": f}
res = requests.post(SERVER_URL, files=upload_file, timeout=60)
data = res.json()
if data"code" == 0:
return f"【{os.path.basename(img_path)}】识别结果:{data'result'}"
else:
return f"【{os.path.basename(img_path)}】识别失败:{data'msg'}"
except Exception as e:
return f"【{img_path}】网络请求错误:{str(e)}"
if name == "main":
img_folder = r"D:\text-07"
output_txt = r"D:\text-07\识别结果.txt"
all_result = \[\]
for name in os.listdir(img_folder):
if name.lower().endswith((".jpg", ".png", ".jpeg")):
full_path = os.path.join(img_folder, name)
print(f"正在识别:{name}")
res_text = scan_image(full_path)
all_result.append(res_text)
print(res_text)
with open(output_txt, "w", encoding="utf-8") as f:
f.write("\n".join(all_result))
print(f"\n全部识别完成,结果保存在:{output_txt}")
三、Ubuntu 服务器环境配置 一步一步详细教程
(适配:Ubuntu 22.04,阿里云 ECS,root 用户,全程复制命令执行)
前置
- 已通过 final shell的SSH 登录服务器:
- 步骤 1:更新系统软件包sudo apt update
- 然后执行升级sudo apt upgrade -y
步骤 2:安装基础工具 & Python3 环境
2.1 安装常用工具 + Python3 + pip
python3:主程序python3-pip:Python 包管理器nano:文本编辑器curl/net-tools:调试网络 / 端口
步骤 3:安装项目依赖包(Flask、openai SDK)
pip install flask openai
步骤 4:配置防火墙(放行端口:22 SSH、8081 Flask 接口)
步骤 5:编写 Flask 服务代码 server.py