PHP code example of qwen / image-ocr
1. Go to this page and download the library: Download qwen/image-ocr library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
qwen / image-ocr example snippets
$client = new Client('sk-xxxxxxxx', [
'model' => 'qwen-vl-plus',
]);
Qwen\ImageOcr\Client;
$client = new Client('sk-xxxxxxxx');
$result = $client->recognize('https://example.com/image.jpg');
print_r($result->getData());
echo $result->toJson();
$instruction = '请识别图片中的所有文字,并按表格形式输出为 JSON';
$result = $client->recognizeWithPrompt('https://example.com/table.jpg', $instruction);
echo $result->toJson();
use Qwen\ImageOcr\OcrType\FrontIdCard;
use Qwen\ImageOcr\OcrType\BusinessLicense;
// 身份证正面
$result = $client->recognizeAs('https://example.com/id-front.jpg', new FrontIdCard());
echo $result->get('idNumber'); // 18位身份证号码
// 营业执照
$result = $client->recognizeAs('https://example.com/license.jpg', new BusinessLicense());
echo $result->get('companyName'); // 企业名称
$base64Image = 'data:image/jpeg;base64,/9j/4AAQSkZJRg...';
$result = $client->recognize($base64Image);
Qwen\ImageOcr\Client;
use Qwen\ImageOcr\OcrType\BusinessLicense;
use Qwen\ImageOcr\OcrType\Certificate;
use Qwen\ImageOcr\OcrType\FrontIdCard;
use Qwen\ImageOcr\OcrType\BackIdCard;
use Qwen\ImageOcr\OcrType\CarInvoice;
use Qwen\ImageOcr\OcrType\FrontLicense;
use Qwen\ImageOcr\OcrType\BackLicense;
use Qwen\ImageOcr\OcrType\FrontDrivingLicense;
use Qwen\ImageOcr\OcrType\BackDrivingLicense;
use Qwen\ImageOcr\OcrType\VehicleLicense;
use Qwen\ImageOcr\Exception\ApiException;
use Qwen\ImageOcr\Exception\OcrException;
$client = new Client('sk-xxxxxxxx');
// 营业执照
$result = $client->recognizeAs('https://example.com/business-license.jpg', new BusinessLicense());
// 输出字段:creditCode, companyName, companyType, businessAddress, legalPerson,
// businessScope, registeredCapital, RegistrationDate, validPeriod,
// validFromDate, validToDate, companyForm, issueDate, title
// 车辆合格证
$result = $client->recognizeAs('https://example.com/certificate.jpg', new Certificate());
// 输出字段:certificateNumber, vinCode, vehicleModel, vehicleName, vehicleBrand,
// manufactureName, engineModel, engineNumber, fuelType, displacement 等 38 个字段
// 身份证正面
$result = $client->recognizeAs('https://example.com/id-front.jpg', new FrontIdCard());
// 输出字段:name, sex, ethnicity, birthDate, address, idNumber
// 身份证背面
$result = $client->recognizeAs('https://example.com/id-back.jpg', new BackIdCard());
// 输出字段:issueAuthority, validPeriod
// 发票
$result = $client->recognizeAs('https://example.com/invoice.jpg', new CarInvoice());
// 输出字段:invoiceCode, invoiceNumber, invoiceDate, purchaserName, sellerName,
// totalAmount, invoiceDetails[] 等 27 个字段
// 行驶证正页
$result = $client->recognizeAs('https://example.com/vehicle-front.jpg', new FrontLicense());
// 输出字段:licensePlateNumber, vehicleType, owner, model, vinCode, engineNumber 等
// 行驶证副页
$result = $client->recognizeAs('https://example.com/vehicle-back.jpg', new BackLicense());
// 输出字段:licensePlateNumber, passengerCapacity, totalWeight, curbWeight 等
// 驾驶证正面
$result = $client->recognizeAs('https://example.com/driving-front.jpg', new FrontDrivingLicense());
// 输出字段:licenseNumber, name, sex, approvedType, validFromDate, validPeriod 等
// 驾驶证背面
$result = $client->recognizeAs('https://example.com/driving-back.jpg', new BackDrivingLicense());
// 输出字段:name, recordNumber, record, licenseNumber
// 车牌
$result = $client->recognizeAs('https://example.com/license-plate.jpg', new VehicleLicense());
// 输出字段:license_plate(车牌号码,自动去除 "·" 和空格)
// 使用 API Key 字符串
$client = new Client('sk-xxxxxxxx');
// 自定义配置
$client = new Client('sk-xxxxxxxx', [
'timeout' => 120,
'model' => 'qwen-vl-max',
]);
// 使用 Config 对象
$config = new Config('sk-xxxxxxxx', [
'base_url' => 'https://custom-endpoint.com/v1',
'model' => 'qwen-vl-max',
'timeout' => 90,
]);
$client = new Client($config);
$result = $client->recognizeAs($url, new FrontIdCard());
$result->get('idNumber'); // "110101199001011234"
$result->get('name'); // "张三"
$result->get('notExist', '默认值'); // "默认值"
$result->getData(); // 完整数组
$result->toJson(); // JSON 字符串
$result->getRawText(); // 模型原始输出
$result->getRawResponse(); // API 完整响应
use Qwen\ImageOcr\OcrType\AbstractOcrType;
class BankCard extends AbstractOcrType
{
public function getTypeName(): string
{
return 'bankCard';
}
public function getUserPrompt(): string
{
return <<<'PROMPT'
请识别银行卡图片中的信息,以 JSON 格式输出以下字段:
{
"bankName": "银行名称",
"cardNumber": "银行卡号",
"cardType": "卡类型(借记卡/信用卡)",
"holderName": "持卡人姓名"
}
只输出 JSON,不要包含任何额外说明。如某字段无法识别,对应值设为空字符串。
PROMPT;
}
public function processResult(array $data): array
{
// 去除卡号中的空格
if (!empty($data['cardNumber'])) {
$data['cardNumber'] = preg_replace('/\s/', '', $data['cardNumber']);
}
return $data;
}
}
// 使用自定义类型
$result = $client->recognizeAs('https://example.com/bank-card.jpg', new BankCard());
echo $result->get('cardNumber');
use Qwen\ImageOcr\Exception\ApiException;
use Qwen\ImageOcr\Exception\OcrException;
try {
$result = $client->recognizeAs($imageUrl, new FrontIdCard());
} catch (ApiException $e) {
// API 请求失败(网络错误、认证失败、模型返回错误等)
echo "API 错误:" . $e->getMessage();
echo "状态码:" . $e->getStatusCode();
echo "响应体:" . $e->getResponseBody();
} catch (OcrException $e) {
// JSON 解析失败或其他业务错误
echo "OCR 错误:" . $e->getMessage();
}
use Qwen\ImageOcr\Prompt\PromptBuilder;
$builder = new PromptBuilder('请识别图片中的发票信息,输出为 JSON');
$client->setPromptBuilder($builder);
$result = $client->recognize($imageUrl);
use Qwen\ImageOcr\Config;
use Qwen\ImageOcr\Client;
$config = new Config('sk-xxxxxxxx', [
'base_url' => 'https://dashscope.aliyuncs.com/compatible-mode/v1',
'model' => 'qwen-vl-ocr',
'timeout' => 90,
'temperature' => 0,
'top_k' => 20,
'enable_thinking' => false,
]);
$client = new Client($config);