<?php
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
exit;
}
function callVlmApi($imgPath, $prompt = "") {
$baseUrl = "xxxxxxxxxxxxxxxxxxxxxx";
$modelName = "Qwen/Qwen2.5-VL-7B-Instruct";
// ✅【关键】强化指令:禁止markdown,只输出纯JSON,无任何多余内容
$prompt = <<<PROMPT
你是一名专注身份证信息提取的AI助手,精准从图片中提取**身份证姓名+身份证号码**。
规则:
1. 只提取真实姓名和18位身份证号
2. 未识别到身份证号则填空字符串
3. **只输出纯JSON,不要加任何解释、文字、换行、代码块、```json```标记**
4. 输出格式必须严格为:{"name":"","idcard":""}
PROMPT;
if (!file_exists($imgPath)) {
throw new Exception("图片不存在");
}
// 图片转 base64
$mime = mime_content_type($imgPath);
$data = file_get_contents($imgPath);
$base64 = "data:$mime;base64," . base64_encode($data);
// 请求体
$postData = [
"model" => $modelName,
"messages" => [
[
"role" => "user",
"content" => [
["type" => "text", "text" => $prompt],
["type" => "image_url", "image_url" => ["url" => $base64]]
]
]
],
"max_tokens" => 2048,
"stream" => false
];
// CURL 请求
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $baseUrl . "/chat/completions",
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode($postData),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
]);
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
throw new Exception("请求失败:" . $error);
}
$result = json_decode($response, true);
$content = $result['choices'][0]['message']['content'] ?? '';
// ✅【核心净化】自动清理模型返回的 markdown 代码块、换行、空格
$content = trim($content);
$content = str_replace(['```json', '```', "\n", "\r"], '', $content);
$content = trim($content);
// 验证是否为合法JSON
json_decode($content);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new Exception("格式错误:" . $content);
}
return $content;
}
// 接收上传
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
$dir = './uploads/';
if (!is_dir($dir)) mkdir($dir, 0777, true);
$file = $_FILES['file'];
$target = $dir . uniqid() . '_' . basename($file['name']);
if (!move_uploaded_file($file['tmp_name'], $target)) {
echo json_encode(["code" => -1, "msg" => "上传失败"]);
exit;
}
try {
$res = callVlmApi($target);
unlink($target);
// ✅ 直接返回干净的JSON结构,前端可直接解析
echo json_encode([
"code" => 0,
"data" => json_decode($res, true)
], JSON_UNESCAPED_UNICODE);
} catch (Exception $e)
{
@unlink($target);
echo json_encode(["code" => -1, "msg" => $e->getMessage()]);
}
exit;
}
echo json_encode(["code" => -1, "msg" => "请上传图片"]);
?>
Qwen/Qwen2.5-VL-7B-Instruct图片检测
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 一、前言 前段时候阿里开源了千问Omni多模态模型,根据官方介绍以及效果演示视频可以了解到,这个模型是多模态模型,...
- 本机配置i9 4090 32G 需注册 SwanLab[https://github.com/swanhubx/s...
- 今日,通义千问Qwen2.5-Omni-7B正式开源,作为通义系列首个端到端全模态大模型,它能够同时处理文本、图像...
- 最近qwen2.5系列模型有点火,在昇腾上跑了一下,发现性能稍微有点弱,于是想采用量化推理来提升一下性能,在昇腾官...
- 摘要 我们介绍Qwen2.5-VL,这是Qwen视觉-语言系列的最新旗舰模型,它在基础能力和创新功能方面都取得了显...