1. OCR API
1.1 initOcrv4
初始化OCR
初始化 OCR 引擎,初始化后才能调用 ocr
识别接口。
入参
入参 | 类型 | 说明 |
---|---|---|
nThreads | int | 线程数,取值范围 1~12 ,建议设置为 CPU 核心数,超出范围将默认为1 |
返回值
返回值 | 类型 | 说明 |
---|---|---|
1 | int | 初始化成功 |
4 | int | 初始化失败,抛出异常,可以通过 getLastError() 获取报错信息 |
c# 示例
int res = DllLkinferApi.initOcrv4(3);
if (res == 1)
{
isInitOCR = true;
MessageBox.Show("ocr 初始化完成,生命周期中只需要初始化一次!");
}
else
{
MessageBox.Show("ocr 初始化失败:" + res);
}
1.2 ocrv4DetectParam
图片OCR识别
识别图片中的文字。需要先调用 initOcrv4
初始化 OCR 引擎。
入参
入参 | 类型 | 说明 |
---|---|---|
img_path | string | 待识别的图片所在路径,绝对路径 |
sim | float | 相似度,通常设置为 0.5 |
padding | int | 图片预处理,识别文字边框,用于提升识别率,通常设置为 50 |
max_size | int | 按图片最长边的长度,调整与预处理图像,如果图片最长边长小于此值,按图片最长边长算,如果图片边长太长会消耗更多的计算资源。通常设置为 1024 |
box_thresh | float | 边界框置信度阈值,自行探索,0~1之间 通常设置为 0.3 |
un_clip_ratio | float | 调整多边形的扩展比例,影响最终检测框的紧密度,图片中文字越大,此值越大,1.5~2.0之间 通常设置为 1.6 。若文本区域漏检(如长文本被截断),可增大;若文本框包含过多背景噪声,可减小 |
use_angle_cls | int | 是否启用文本方向分类模型,1 启用, 0 关闭。通常设置为 0 关闭方向检测以提升识别速度 已知所有文本均为水平方向(如扫描的PDF) 。典型场景:手机拍摄的文档图片(可能旋转90°或180°)可能需要启用 |
most_angle | int | 只有在use_angle_cls=1 的情况下有用。用于后处理阶段来确定图像或文本区域的主要旋转方向,1 启用,0 关闭,通常设置为 0 |
返回值
返回值是一个指针地址
(IntPtr/int),需要自行读取。注意,返回值是 UTF-8
编码的 json
字符串。例如:
[{"sim":"0.840","text":"由 Lkinfer 开发驱动","x":85,"x4":213,"y":16,"y4":35},{"sim":"0.661","text":"Copyright @ 2025-present htp://it.top","x":14,"x4":285,"y":38,"y4":64}]
[]
空结果4
识别失败,抛出异常,可以通过getLastError()
获取报错信息
json
说明:
字段 | 类型 | 说明 |
---|---|---|
sim | float | 相似度,识别到文字的可信度 |
text | string | 识别到的文字 |
x | int | 位于图片上开始 坐标x(左上角为起点) |
y | int | 位于图片上开始 坐标y(左上角为起点) |
x4 | int | 位于图片上结束 坐标x(左上角为起点) |
y4 | int | 位于图片上结束 坐标y(左上角为起点) |
坐标解释:{"sim":"0.840","text":"由 Lkinfer 开发驱动","x":85,"x4":213,"y":16,"y4":35}
的坐标为:(85,16)
到 (213,35)
。
位置 | 坐标 |
---|---|
左上 | (x,y) 85,16 |
右上 | (x4,y) 213,16 |
左下 | (x,y4) 85,35 |
右下 | (x4,y4) 213,35 |
图片例示:
c# 示例
private string 指针地址转为UTF8(IntPtr point)
{
int length = 0;
while (Marshal.ReadByte(point, length) != 0)
{
length++;
}
byte[] buffer = new byte[length];
Marshal.Copy(point, buffer, 0, length);
string result = Encoding.UTF8.GetString(buffer);
return result;
}
IntPtr point = DllLkinferApi.ocrv4DetectParam("D:\\1.png", 0.5f, 50, 1024, 0.3f, 1.6f, 0, 0);
string result = 指针地址转为UTF8(point);
Debug.WriteLine(result);// [{"sim":"0.840","text":"由 Lkinfer 开发驱动","x":85,"x4":213,"y":16,"y4":35},{"sim":"0.661","text":"Copyright @ 2025-present htp://it.top","x":14,"x4":285,"y":38,"y4":64}]
2. Yolov8 检测 API
基于YOLOv8的目标检测API,用于在图像中识别和定位特定的目标。
2.1 loadYolov8Model
加载模型
加载YOLOv8模型,设置模型的名称与路径(绝对路径)。
入参
入参 | 类型 | 说明 |
---|---|---|
name | string | 模型名称,用于区分不同的模型 |
modelPath | string | 模型文件的绝对路径 |
返回值
返回值 | 类型 | 说明 |
---|---|---|
1 | int | 加载模型成功 |
4 | int | 初始化失败,抛出异常,可以通过 getLastError() 获取报错信息 |
示例
int res = DllLkinferApi.loadYolov8Model("c#", "d:\\yolov8n.onnx");// 注意 c# 这个名字
if (res == 1)
{
MessageBox.Show("加载模型成功: " + res);
}
else
{
MessageBox.Show("加载模型失败: " + res);
}
2.2 yolov8Detect
图片目标检测
使用模型对图像执行目标检测,返回检测到的目标信息。需要先调用 loadYolov8Model
加载模型。
入参
入参 | 类型 | 说明 |
---|---|---|
name | string | 模型名称,用于区分不同的模型 |
imgPath | string | 需要检测的图片路径(绝对路径) |
返回值
返回值是一个指针地址
(IntPtr/int),需要自行读取。注意,返回值是 UTF-8
编码的 json
字符串。例如:
[{"h":500,"id":0,"name":"person","sim":"0.890","w":139,"x":671,"y":381}]
json
说明:
字段 | 类型 | 说明 |
---|---|---|
id | int | yolo模型的标签的索引 |
name | string | yolo模型的标签的名字 |
sim | float | 目标相似度、置信度 |
x | int | 目标左上角的x坐标 |
y | int | 目标左上角的y坐标 |
w | int | 目标的宽度 |
h | int | 目标的高度 |
[{"h":500,"id":0,"name":"person","sim":"0.890","w":139,"x":671,"y":381}]
中,推算出目标的坐标:
- 左上角:
(x, y)
-->(671, 381)
- 右上角:
(x+w, y)
-->(810, 381)
- 左下角:
(x, y+h)
-->(671, 881)
- 右下角:
(x+w, y+h)
-->(810, 881)
c# 示例
private string 指针地址转为UTF8(IntPtr point)
{
int length = 0;
while (Marshal.ReadByte(point, length) != 0)
{
length++;
}
byte[] buffer = new byte[length];
Marshal.Copy(point, buffer, 0, length);
string result = Encoding.UTF8.GetString(buffer);
return result;
}
// 注意 c# 这个名字与上面加载的模型相同
IntPtr potion = DllLkinferApi.yolov8Detect("c#", "d:\\yourPic.png");
string res = 指针地址转为UTF8(potion);
Debug.WriteLine(res);// [{"h":500,"id":0,"name":"person","sim":"0.890","w":139,"x":671,"y":381}]
2.3 yolov8DetectDraw
图片目标检测并绘制边框
使用模型对图像执行目标检测,并在图像上绘制检测到的目标边界框。需要先调用 loadYolov8Model
加载模型。
入参
入参 | 类型 | 说明 |
---|---|---|
name | string | 模型名称,用于区分不同的模型 |
imgPath | string | 需要检测的图片路径(绝对路径) |
outPath | string | 保存绘制边界框后的图片路径(绝对路径),当为空时,将弹出图片绘制的窗口,不为空时将绘制的图片输出到此路径 |
返回值
返回值与 yolov8Detect
一致,不再重复。
c# 示例
// 将结果绘制到图片上并保存到 d:\\result_pic.png
// IntPtr potion = DllLkinferApi.yolov8DetectDraw("c#", textBox4.Text, "d:\\result_pic.png");
IntPtr potion = DllLkinferApi.yolov8DetectDraw("c#", d:\\your_pic.png, "");
string res = 指针地址转为UTF8(potion);
Debug.WriteLine(res);// 与上面的 yolov8Detect 输出一致
图片例示
yolov8DetectDraw
的 outPath
为空时,将弹出图片绘制的窗口:
2.4 getYolov8Info
获取模型信息
获取YOLOv8模型的信息,包括名称、标签、inputs、outputs、imgz等。
// 注意 c# 这个名字与上面加载的模型相同
IntPtr point = DllLkinferApi.getYolov8Info("c#");
string res = 指针地址转为UTF8(point);
Debug.WriteLine(res);// 模型信息,自行探索
2.5 getAllYolov8Name
获取所有已加载的模型名
IntPtr point = DllLkinferApi.getAllYolov8Name();
string res = 指针地址转为UTF8(point);
Debug.WriteLine(res);// [] 空结果,或 ["c#"] 注意 c# 这个名字与上面加载的模型相同
2.6 setYolov8Sim
设置模型的置信度(相似度)
设置模型的置信度(相似度),用于控制模型对目标的检测阈值。
入参
入参 | 类型 | 说明 |
---|---|---|
name | string | 模型名称,用于区分不同的模型 |
sim | float | 目标相似度,取值范围 0~1 ,通常设置为 0.5 |
返回值
返回值 | 类型 | 说明 |
---|---|---|
1 | int | 设置成功 |
0 | int | 设置失败,通常是模型 name 对应的模型不存在 |
c# 示例
DllLkinferApi.setYolov8Sim("c#", 0.5);// 设置相似度为 0.5
IntPtr potion = DllLkinferApi.yolov8Detect("c#", "d:\\yourPic.png");
string res = 指针地址转为UTF8(potion);
// sim 小于 0.5 的结果将被过滤掉
Debug.WriteLine(res);// [{"h":500,"id":0,"name":"person","sim":"0.890","w":139,"x":671,"y":381}]
2.7 setYolov8Iou
NMS的合并阈值
IoU 阈值,控制 NMS(非极大值抑制)时框的合并阈值,用于过滤重叠的目标框。
入参
入参 | 类型 | 说明 |
---|---|---|
name | string | 模型名称,用于区分不同的模型 |
iou | float | 目标框的合并阈值,取值范围 0~1 ,通常设置为 0.3 ,太大可能会漏掉目标,太小可能出现太多结果或干扰项 |
返回值
返回值 | 类型 | 说明 |
---|---|---|
1 | int | 设置成功 |
0 | int | 设置失败,通常是模型 name 对应的模型不存在 |
c# 示例
DllLkinferApi.setYolov8Iou("c#", 0.3);// IoU 阈值,太大可能会漏掉目标,太小可能出现太多结果或干扰项
IntPtr potion = DllLkinferApi.yolov8Detect("c#", "d:\\yourPic.png");
string res = 指针地址转为UTF8(potion);
Debug.WriteLine(res);
3. 其他接口
3.1 getLastError
获取最后一次错误信息
获取最近一次发生的错误信息,用于调试和错误处理。
入参
无
返回值
返回值是一个指针地址
(IntPtr/int),需要自行读取。注意,返回值是 UTF-8
编码的字符串。
c# 示例
IntPtr point = DllLkinferApi.getLastError();
string res = 指针地址转为UTF8(point);
Debug.WriteLine(res);// 错误信息,自行探索
3.2 version
获取Lkinfer的版本
获取Lkinfer的版本信息。
入参
无
返回值
返回值是一个指针地址
(IntPtr/int),需要自行读取。注意,返回值是 UTF-8
编码的字符串。
c# 示例
IntPtr point = DllLkinferApi.version();
string res = 指针地址转为UTF8(point);
Debug.WriteLine(res);// 版本信息,自行探索
3.3 log_off
关闭日志输出
关闭Lkinfer的日志输出,将不再输出日志信息。
入参
无
返回值
值 | 说明 |
---|---|
1 | 关闭成功 |
0 | 关闭失败 |
c# 示例
int res = DllLkinferApi.log_off();
if (res == 1)
{
MessageBox.Show("关闭日志输出成功!");
}
else
{
MessageBox.Show("关闭日志输出失败!");
}
3.4 utf8ToGBK
utf-8字符串转gbk字符串
将UTF-8编码的字符串转换为GBK编码的字符串。通常用于处理中文字符,例如易语言调用时的返回值是UTF-8编码的字符串,需要转换为GBK编码的字符串才能正确显示。
入参
参数 | 类型 | 说明 |
---|---|---|
utf8Str | string | UTF-8编码的字符串 |
返回值
返回值是一个指针地址
(IntPtr/int),需要自行读取。注意,返回值是 UTF-8
编码的字符串。
c# 示例
IntPtr point = DllLkinferApi.utf8ToGBK("你好");
string res = 指针地址转为UTF8(point);
Debug.WriteLine(res);// 转换后的GBK字符串,自行探索