Files
2026-07-13 12:07:56 +08:00

234 lines
8.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 目录
### 图片识别
1. [图片OCR:参数查询](api_ocr.md#/api/ocr/get_options)
2. [图片OCRBase64 识别](api_ocr.md#/api/ocr)
### 文档识别(PDF识别)
- [文档识别流程](api_doc.md#/api/doc)
### 二维码识别
1. [二维码:Base64 识别](#/api/qrcode)
2. [二维码:从文本生成图片](#/api/qrcode/text)
### 命令行
- [命令行接口](argv.md#/argv)
---
<a id="/api/qrcode"></a>
## 1. 二维码:Base64 识别接口
URL`/api/qrcode`
例:`http://127.0.0.1:1224/api/qrcode`
### 1.1. 请求格式
方法:`POST`
参数:`json` 字典,值为:
- **base64** 必填。待识别图像的 Base64 编码字符串,无需 `data:image/png;base64,` 等前缀。
- **options** :可选。参数字典,可选项为:
- **preprocessing.median_filter_size** :中值滤波器的大小。取值范围:1~9的奇数。默认不进行滤波。
- **preprocessing.sharpness_factor** :锐度增强因子。取值范围:0.1~10.0。默认不调整锐度。
- **preprocessing.contrast_factor** :对比度增强因子。取值范围:0.1~10.0。大于1增强对比度,小于1但大于0减少对比度,1保持原样。默认不调整对比度。
- **preprocessing.grayscale** :是否将图像转换为灰度图像。true为转换,false为不转换。默认为false。
- **preprocessing.threshold** :二值化阈值,用于灰度图像的二值化处理。取值范围:0~255 整数。只有当 `"preprocessing.grayscale"=true` 时,此参数才生效。默认为false。
参数示例:
```json
{
"base64": "iVBORw0KGgoAAAAN……",
"options": {
"preprocessing.sharpness_factor": 1.0,
"preprocessing.contrast_factor": 1.0,
"preprocessing.grayscale": false,
"preprocessing.threshold": false,
}
}
```
### 1.2. 响应格式
返回 `json` ,与 OCR 结果的格式非常相似。
| 字段 | 类型 | 描述 |
| --------- | ------ | -------------------------------------------------- |
| code | int | 任务状态码。`100`为成功,`101`为无文本,其余为失败 |
| data | list | 识别结果,格式见下 |
| time | double | 识别耗时(秒) |
| timestamp | double | 任务开始时间戳(秒) |
#### `data` 格式
图片中无文本(`code==101`),或识别失败(`code!=100 and code!=101`)时:
- `["data"]` 为string,内容为错误原因。例: `{"code": 204, "data": "【Error】zxingcpp 二维码解析失败。\n[Error] zxingcpp read_bar……"}`
识别成功(`code==100`)时:
- `["data"]` 为list,记录图片中每个二维码的结果(一张图片可能含多个码)。每项结果的子元素为:
| 参数名 | 类型 | 描述 |
| ----------- | ------ | --------------------------------------------------- |
| text | string | 二维码文本。 |
| format | string | 二维码格式,如 `"QRCode"` 等,具体见下。 |
| box | list | 文本框顺时针四个角的xy坐标:`[左上,右上,右下,左下]` |
| orientation | int | 二维码方向。0为正上。 |
| score | int | 为了与OCR格式兼容而设,永远为1,无意义。 |
<a id="qrcode_format"></a>
##### 二维码格式 format
`"Aztec","Codabar","Code128","Code39","Code93","DataBar","DataBarExpanded","DataMatrix","EAN13","EAN8","ITF","LinearCodes","MatrixCodes","MaxiCode","MicroQRCode","PDF417","QRCode","UPCA","UPCE"`
结果示例:
```json
{
"code": 100,
"data": [ {
"orientation": 0,
"box": [[4,4],[25,4],[25,25],[4,25]],
"score": 1,
"format": "QRCode",
"text": "abc"
} ],
"time": 0,
"timestamp": 1711521012.625574
}
```
### 1.3. 调用接口 示例代码
<details>
<summary>JavaScript 示例:(点击展开)</summary>
```javascript
const url = "http://127.0.0.1:1224/api/qrcode";
const base64 = "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAdAB0BAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APU/GfjM+EjAzW9o0DW8txNPdXEkSxKkkMYAEcUjMS069hjBrn3+K0yi3B0/RozO52y3OtG3gaPy7WRWV5IVJO27DFSoIEbYycCrF18Sb2z1a20u70rTbO8uLiKzigutRl3NcNDBIyAxW7rhTcIu4sAcE8Cu00LU/wC2/D2mat5Pk/brSK58rdu2b0Dbc4GcZxnAri/iSdPGs6AuqySW+nzpcW11dg27xwIzQspkimikDIZUiG/5QhK5PzCuPI1qz8ISalajUtNu1czLGsxnt7tHhhhiijNmkSF22W8aFeFWZ2RjIjeVXvrq0t/EWmaTpq3d9rTXFpCqpa2iRW92sCJOUP2WZYjEsNszrG7Bd/GNhr2zQtP/ALI8PaZpuMfY7SK3x5nmY2IF+9tXd067Vz6DpXH/ABK1LVrN7SLTIr6622k159isYYnknkjuLVUI8yGXGzzWfhc5UHPFeeSyav4dtI9R8O+Ho5dYS4WNrSK1EV2sb29ncFJY7aOPzIkkYhjhSGaME7WdHy72y8NWthbfDxrrfDDdpdXH2eVvtIu/IcStcOUaCGFMqGKNKUELZDEsU+g/DUcMXhXSI7cRrAllCsYjIKhQgxgh3BGP9t/95upk1PQtH1vyv7W0qxv/ACc+X9rt0l2ZxnG4HGcDp6Co7Xw1oNiipaaJptuiPvVYbVEAbcjZGB13RxnPqin+EYksdC0fTIo4rDSrG0jjlM6JBbpGFkKlC4AHDFSVz1wcdKuQQQ2tvFb28UcMESBI441CqigYAAHAAHGK/9k="
const data = { "base64": base64 };
fetch(url, {
method: "POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => {
if(data.code === 100) {
console.log("QRCode count:", data.data.length);
for (let d of data.data) {
console.log(" text: ", d.text);
console.log(" format: ", d.format);
console.log(" orientation: ", d.orientation);
console.log(" ====");
}
}
else {
console.log("Error! Code", data.code, " Msg: ", data.data);
}
})
.catch(error => { console.error(error); });
```
</details>
<a id="/api/qrcode/text"></a>
---
## 2. 二维码:从文本生成图片
传入文本,根据文本生成二维码图片,返回图片base64。
URL`/api/qrcode` (与二维码识别接口一致,只是参数不同)
例:`http://127.0.0.1:1224/api/qrcode`
### 2.1. 请求格式
方法:`POST`
参数:`json` 字典,值为:
- **text** : 必填。要写入二维码的文本。
- **options** :可选。参数字典,可选项为:
- **format** :二维码码格式,可选值 [见上文](#qrcode_format)。默认为 `"QRCode"`
- **w** :生成图像宽度,整数。默认 `0` 为自动设为最小宽度。
- **h** :生成图像高度,整数。默认 `0` 为自动设为最小高度。
- **quiet_zone** :二维码四周的空白边缘宽度,整数。默认 `-1` 为自动调节。
- **ec_level** :纠错等级,整数。默认 `-1` 。可选值: `-1`:自动, `1`:7%,`0`:15%,`3`:25%, `2`:30%。仅在这些格式下生效:`Aztec``PDF417``QRCode`
参数示例:
```json
{
"text": "要写入二维码的文本",
"options": {
"format": "QRCode",
"w": 0,
"h": 0,
"quiet_zone": -1,
"ec_level": -1,
}
}
```
### 2.2. 响应格式
`json`
| 字段名 | 类型 | 描述 |
| ------ | ------ | ------------------------------- |
| code | int | 任务状态。`100`成功,其余为失败 |
| data | string | 生成结果,格式见下 |
- 生成图片成功(`code==100`)时:`"data"` 为图片的base64字符串,图片编码为`jpeg`
- 生成图片失败(`code!=100`)时:`"data"` 为错误信息字符串。
### 2.3. 调用接口 示例代码
<details>
<summary>JavaScript 示例:(点击展开)</summary>
```javascript
const url = "http://127.0.0.1:1224/api/qrcode";
const data = {
"text": "test abc 123 !!!",
// "options": {
// "format": "QRCode",
// "w": 0,
// "h": 0,
// "quiet_zone": -1,
// "ec_level": -1,
// }
};
fetch(url, {
method: "POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => {
if(data.code === 100) {
console.log("Image base64: \n", data.data);
}
else {
console.log("Error! Code", data.code, " Msg: ", data.data);
}
})
.catch(error => { console.error(error); });
```
</details>