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);