Skip to content

1. OCR API

1.1 initOcrv4 初始化OCR

初始化 OCR 引擎,初始化后才能调用 ocr 识别接口。

入参

入参类型说明
nThreadsint线程数,取值范围 1~12,建议设置为 CPU 核心数,超出范围将默认为1

返回值

返回值类型说明
1int初始化成功
4int初始化失败,抛出异常,可以通过 getLastError() 获取报错信息

c# 示例

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_pathstring待识别的图片所在路径,绝对路径
simfloat相似度,通常设置为 0.5
paddingint图片预处理,识别文字边框,用于提升识别率,通常设置为 50
max_sizeint按图片最长边的长度,调整与预处理图像,如果图片最长边长小于此值,按图片最长边长算,如果图片边长太长会消耗更多的计算资源。通常设置为 1024
box_threshfloat边界框置信度阈值,自行探索,0~1之间 通常设置为 0.3
un_clip_ratiofloat调整多边形的扩展比例,影响最终检测框的紧密度,图片中文字越大,此值越大,1.5~2.0之间 通常设置为 1.6。若文本区域漏检(如长文本被截断),可增大;若文本框包含过多背景噪声,可减小
use_angle_clsint是否启用文本方向分类模型,1启用, 0 关闭。通常设置为 0 关闭方向检测以提升识别速度 已知所有文本均为水平方向(如扫描的PDF)。典型场景:手机拍摄的文档图片(可能旋转90°或180°)可能需要启用
most_angleint只有在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 说明:

字段类型说明
simfloat相似度,识别到文字的可信度
textstring识别到的文字
xint位于图片上开始坐标x(左上角为起点)
yint位于图片上开始坐标y(左上角为起点)
x4int位于图片上结束坐标x(左上角为起点)
y4int位于图片上结束坐标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# 示例

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模型,设置模型的名称与路径(绝对路径)。

入参

入参类型说明
namestring模型名称,用于区分不同的模型
modelPathstring模型文件的绝对路径

返回值

返回值类型说明
1int加载模型成功
4int初始化失败,抛出异常,可以通过 getLastError() 获取报错信息

示例

c#
int res = DllLkinferApi.loadYolov8Model("c#", "d:\\yolov8n.onnx");// 注意 c# 这个名字
if (res == 1)
{
    MessageBox.Show("加载模型成功: " + res);
}
else
{
    MessageBox.Show("加载模型失败: " + res);
}

2.2 yolov8Detect 图片目标检测

使用模型对图像执行目标检测,返回检测到的目标信息。需要先调用 loadYolov8Model 加载模型。

入参

入参类型说明
namestring模型名称,用于区分不同的模型
imgPathstring需要检测的图片路径(绝对路径)

返回值

返回值是一个指针地址 (IntPtr/int),需要自行读取。注意,返回值是 UTF-8 编码的 json 字符串。例如:

  • [{"h":500,"id":0,"name":"person","sim":"0.890","w":139,"x":671,"y":381}]

json 说明:

字段类型说明
idintyolo模型的标签的索引
namestringyolo模型的标签的名字
simfloat目标相似度、置信度
xint目标左上角的x坐标
yint目标左上角的y坐标
wint目标的宽度
hint目标的高度

[{"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# 示例

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 加载模型。

入参

入参类型说明
namestring模型名称,用于区分不同的模型
imgPathstring需要检测的图片路径(绝对路径)
outPathstring保存绘制边界框后的图片路径(绝对路径),当为空时,将弹出图片绘制的窗口,不为空时将绘制的图片输出到此路径

返回值

返回值与 yolov8Detect 一致,不再重复。

c# 示例

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 输出一致

图片例示

yolov8DetectDrawoutPath 为空时,将弹出图片绘制的窗口:

draw

2.4 getYolov8Info 获取模型信息

获取YOLOv8模型的信息,包括名称、标签、inputs、outputs、imgz等。

c#
// 注意 c# 这个名字与上面加载的模型相同
IntPtr point = DllLkinferApi.getYolov8Info("c#");
string res = 指针地址转为UTF8(point);
Debug.WriteLine(res);// 模型信息,自行探索

2.5 getAllYolov8Name 获取所有已加载的模型名

c#
IntPtr point = DllLkinferApi.getAllYolov8Name();
string res = 指针地址转为UTF8(point);
Debug.WriteLine(res);// [] 空结果,或 ["c#"]  注意 c# 这个名字与上面加载的模型相同

2.6 setYolov8Sim 设置模型的置信度(相似度)

设置模型的置信度(相似度),用于控制模型对目标的检测阈值。

入参

入参类型说明
namestring模型名称,用于区分不同的模型
simfloat目标相似度,取值范围 0~1,通常设置为 0.5

返回值

返回值类型说明
1int设置成功
0int设置失败,通常是模型 name 对应的模型不存在

c# 示例

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(非极大值抑制)时框的合并阈值,用于过滤重叠的目标框。

入参

入参类型说明
namestring模型名称,用于区分不同的模型
ioufloat目标框的合并阈值,取值范围 0~1,通常设置为 0.3,太大可能会漏掉目标,太小可能出现太多结果或干扰项

返回值

返回值类型说明
1int设置成功
0int设置失败,通常是模型 name 对应的模型不存在

c# 示例

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# 示例

c#
IntPtr point = DllLkinferApi.getLastError();
string res = 指针地址转为UTF8(point);
Debug.WriteLine(res);// 错误信息,自行探索

3.2 version 获取Lkinfer的版本

获取Lkinfer的版本信息。

入参

返回值

返回值是一个指针地址 (IntPtr/int),需要自行读取。注意,返回值是 UTF-8 编码的字符串。

c# 示例

c#
IntPtr point = DllLkinferApi.version();
string res = 指针地址转为UTF8(point);
Debug.WriteLine(res);// 版本信息,自行探索

3.3 log_off 关闭日志输出

关闭Lkinfer的日志输出,将不再输出日志信息。

入参

返回值

说明
1关闭成功
0关闭失败

c# 示例

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编码的字符串才能正确显示。

入参

参数类型说明
utf8StrstringUTF-8编码的字符串

返回值

返回值是一个指针地址 (IntPtr/int),需要自行读取。注意,返回值是 UTF-8 编码的字符串。

c# 示例

c#
IntPtr point = DllLkinferApi.utf8ToGBK("你好");
string res = 指针地址转为UTF8(point);
Debug.WriteLine(res);// 转换后的GBK字符串,自行探索