首页 > 其他分享 >易语言OCR文字识别api接口

易语言OCR文字识别api接口

时间:2024-12-15 17:29:26浏览次数:15  
标签:pResult utf8 top rate api str left OCR 易语言

 一.引言

文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技术的发展,文字识别技术已经成为信息管理、自动化办公和智能系统的关键组成部分。

二.简介

为了易于集成和使用,我们将文字识别OCR封装为DLL(动态链接库)。这种封装方式不仅保留了算法的性能优势,还提供了跨平台和跨语言的兼容性,目前支持编程语言如下:

  • C++
  • Python
  • 易语言

1.C++头文件




#ifndef __SN_OCR__H__
#define __SN_OCR__H__

#include "windows.h"


//返回参数
typedef struct SN_STATU {

	int code;			//错误码,如果为 0 表示成功,否则表示错误号
	char message[4096];	//错误信息,如果为 "OK" 表示成功,否则返回错误信息

}SN_STATU;


/*启动OCR文字识别服务
*
* 参数:
*	[in]  szOnnxFilePath:	设置 onnx 模型文件路径,如果设置为 NULL,默认和 DLL文件同级目录
* 	[out] pResult:			返回错误信息,参数pResult->code(错误码)如果为 0 表示成功,否则表示错误号;
*
* 返回值:成功返回0,失败返回错误号,详细错误信息请参考 pResult
*
*/
int WINAPI apiSNInitOCRServer(char* szOnnxFilePath, SN_STATU* pStatu);


/*创建OCR文字识别句柄
*
* 参数:
*	[in]  szKey:		卡密(购买卡密:https://shop.4yuns.com/links/7C9F16B7)
* 	[in]  pOnnxFilePath:设置 onnx 模型文件路径,如果设置为 NULL,默认和 DLL文件同级目录
* 	[out] pResult:		返回错误信息,参数pResult->code(错误码)如果为 0 表示成功,否则表示错误号;
*
* 返回值:成功返回句柄,失败返回NULL
*
*/
HANDLE WINAPI apiSNCreateOCRHandle(char* szKey, char* szOnnxFilePath, SN_STATU* pStatu);


/*获取OCR文字识别卡密到期时间
*
* 参数:
*	[in]  handle:		句柄(通过调用apiSNCreateOCRHandle得到)
* 	[out] pResult:		返回错误信息,参数pResult->code(错误码)如果为 0 表示成功,否则表示错误号;
*
* 返回值:返回卡密到期时间,失败返回NULL,错误信息请查看参数 pResult->message
*
*/
char* WINAPI apiSNGetKeyExpiresTime(HANDLE handle, SN_STATU* pResult);


/*获取OCR文字识别结果(以json字符串形式返回)
*
* 参数:
*	[in]  handle:			句柄(通过调用apiSNCreateOCRHandle得到)
*  	[in]  szImageFilePath:	图片路径
* 	[out] pResult:			返回错误信息,参数pResult->code(错误码)如果为 0 表示成功,否则表示错误号;
*
* 返回值:返回OCR文字识别结果(以json字符串形式返回),失败返回NULL,错误信息请查看参数 pResult->message
*
*/
char* WINAPI apiSNGetOCRFromImage(HANDLE handle, char* szImageFilePath, SN_STATU* pStatu);


/*释放OCR文字识别句柄(释放内存)
*
* 参数:
*	[in] handle:		句柄(通过调用apiSNCreateOCRHandle得到)
*
* 返回值:返回 0 表示成功,其他值表示错误号;
*
*/
int WINAPI apiSNDestroyOCRHandle(HANDLE handle);

#endif

2.易语言调用dll接口

.版本 2
.支持库 spec

.程序集 窗口程序集_启动窗口

.子程序 _启动子程序, 整数型

_临时子程序 ()
返回 (0)


.子程序 _临时子程序
.局部变量 handle, 整数型
.局部变量 pResult, SN_STATU, 静态, , 返回错误信息,参数pResult.code(错误码)如果为 0 表示成功,否则表示错误号;
.局部变量 szOCRJson, 文本型, , , OCR识别结果 (json字符串);
.局部变量 szTime, 文本型, , , 卡密结束时间;

' ---------------------------------------------------------------
' 1.启动 OCR 文字识别服务
' 其中卡密 SNKJe9xffLhdFY7r3TcffXq44ThDVcE3BQFQFfVA9VG4 仅用于测试,需要找开发人员重新购买,购买卡密连接:https://shop.4yuns.com/links/7C9F16B7
' ---------------------------------------------------------------
apiSNInitOCRServer (“SNOCR.onnx”, pResult)
调试输出 (pResult.code, 到文本 (pResult.message))
.如果真 (pResult.code < 0)
    调试输出 (“-----------程序结束-----------”)
    返回 ()

.如果真结束
' 2.创建 OCR 文字识别句柄
handle = apiSNCreateOCRHandle (“SNKJe9xffLhdFY7r3TcffXq44ThDVcE3BQFQFfVA9VG4”, “SNOCR.onnx”, pResult)

调试输出 (pResult.code, 到文本 (pResult.message))
调试输出 (“句柄”, handle)
.如果真 (pResult.code < 0)
    调试输出 (“-----------程序结束-----------”)
    返回 ()
.如果真结束

' 3.识别 OCR 文字识别,返回 json 字符串
szOCRJson = apiSNGetOCRFromImage (handle, “d:\\22.png”, pResult)
调试输出 (到文本 (szOCRJson))

' 4.识别 OCR 文字卡密到期时间
szTime = apiSNGetKeyExpiresTime (handle, pResult)
调试输出 (到文本 (szTime))

' 5.释放 OCR 文字识别内存
apiSNDestroyOCRHandle (handle)
调试输出 (“-----------程序结束-----------”)

三.效果演示

1.图片1

识别效果:

{
	"type":	0,
	"task_id":	1,
	"err_code":	0,
	"ocr_result":	{
		"single_result":	[{
				"left":	24.700000,
				"top":	17.333332,
				"right":	326.299957,
				"bottom":	32.499992,
				"str_utf8":	"在易语言中,如何为按钮添加点击事件处理代码?",
				"rate":	"0.995533"
			}, {
				"left":	23.806435,
				"top":	63.233559,
				"right":	324.158508,
				"bottom":	79.905136,
				"str_utf8":	"我想在GUI中添加一个文本框,我应该如何操作?",
				"rate":	"0.967164"
			}, {
				"left":	25.554037,
				"top":	110.492912,
				"right":	354.041595,
				"bottom":	124.103584,
				"str_utf8":	"易语言中有哪些控件是常用的,它们各自有什么特点?",
				"rate":	"0.996690"
			}],
		"width":	"416",
		"height":	"152"
	}
}

2.图片2

识别效果:

{
	"type":	0,
	"task_id":	1,
	"err_code":	0,
	"ocr_result":	{
		"single_result":	[{
				"left":	323.454163,
				"top":	14.279167,
				"right":	389.262512,
				"bottom":	37.870834,
				"str_utf8":	"国热点",
				"rate":	"0.745956"
			}, {
				"left":	17.981834,
				"top":	57.859264,
				"right":	258.913910,
				"bottom":	75.778633,
				"str_utf8":	"Python即将成为年度语言,TIOB",
				"rate":	"0.961854"
			}, {
				"left":	18.625000,
				"top":	86.916664,
				"right":	227.845840,
				"bottom":	100.575000,
				"str_utf8":	"12月TIOBE编程语言榜单已发布",
				"rate":	"0.956302"
			}, {
				"left":	18.004168,
				"top":	130.995834,
				"right":	262.612488,
				"bottom":	147.758331,
				"str_utf8":	"传Win11硬件门槛大降,老旧PC",
				"rate":	"0.990127"
			}, {
				"left":	17.383333,
				"top":	158.933334,
				"right":	256.404175,
				"bottom":	173.212494,
				"str_utf8":	"TPM20是未来Windows不可或缺的",
				"rate":	"0.993834"
			}, {
				"left":	17.976627,
				"top":	203.605774,
				"right":	259.543152,
				"bottom":	221.703751,
				"str_utf8":	"OpenAlSora上线即炸服、1条视",
				"rate":	"0.979807"
			}, {
				"left":	17.362951,
				"top":	231.025940,
				"right":	256.424805,
				"bottom":	246.494904,
				"str_utf8":	"作为一款旨在理解和模拟现实的AI基",
				"rate":	"0.929840"
			}, {
				"left":	19.866667,
				"top":	276.891663,
				"right":	247.712463,
				"bottom":	293.654175,
				"str_utf8":	"彻底放弃React!频繁更新和管",
				"rate":	"0.984215"
			}, {
				"left":	17.383333,
				"top":	304.829163,
				"right":	261.991669,
				"bottom":	319.108337,
				"str_utf8":	"React 真的已经不再适合现代开发了吗?",
				"rate":	"0.973967"
			}, {
				"left":	18.591219,
				"top":	349.496246,
				"right":	256.436981,
				"bottom":	367.271393,
				"str_utf8":	"告别VMware!被博通收购后涨价",
				"rate":	"0.997881"
			}, {
				"left":	17.949070,
				"top":	376.545624,
				"right":	266.386017,
				"bottom":	392.872589,
				"str_utf8":	"面对VMware增长十倍的收费,近日英",
				"rate":	"0.990023"
			}, {
				"left":	322.172638,
				"top":	56.995289,
				"right":	555.074097,
				"bottom":	75.172531,
				"str_utf8":	"TOP专家加盟OpenCloudOS年会",
				"rate":	"0.971594"
			}, {
				"left":	322.833344,
				"top":	86.295837,
				"right":	412.854156,
				"bottom":	99.954170,
				"str_utf8":	"睹重磅阵容!",
				"rate":	"0.936653"
			}, {
				"left":	322.803558,
				"top":	130.880295,
				"right":	564.365479,
				"bottom":	147.844025,
				"str_utf8":	"亿级订单系统的数据库查询性能优",
				"rate":	"0.995852"
			}, {
				"left":	321.567688,
				"top":	157.681427,
				"right":	560.010559,
				"bottom":	173.852203,
				"str_utf8":	"为什么没考虑Donis?因为ES是团队应",
				"rate":	"0.967674"
			}, {
				"left":	321.591675,
				"top":	204.254166,
				"right":	469.970825,
				"bottom":	221.016663,
				"str_utf8":	"ChatGPT崩了上热搜",
				"rate":	"0.984410"
			}, {
				"left":	322.833252,
				"top":	232.191650,
				"right":	485.491608,
				"bottom":	246.470810,
				"str_utf8":	"Gemini20发布|极客头条",
				"rate":	"0.958749"
			}, {
				"left":	320.350000,
				"top":	276.270844,
				"right":	564.337524,
				"bottom":	294.275000,
				"str_utf8":	"2024OpenCloudOS年会即将启航",
				"rate":	"0.951624"
			}, {
				"left":	320.970825,
				"top":	304.829163,
				"right":	435.204163,
				"bottom":	319.108337,
				"str_utf8":	"前瞻亮点独家揭秘",
				"rate":	"0.956549"
			}, {
				"left":	322.212494,
				"top":	350.150000,
				"right":	520.879150,
				"bottom":	366.912506,
				"str_utf8":	"降价+豪礼!双十二福利来了",
				"rate":	"0.984479"
			}, {
				"left":	320.970825,
				"top":	376.845825,
				"right":	518.395813,
				"bottom":	392.366669,
				"str_utf8":	"最值得抢购的C++系列精品课程",
				"rate":	"0.965407"
			}],
		"width":	"596",
		"height":	"417"
	}
}

四.常见问题

1.是否支持多线程

支持

五.更新日志

  • 2024.12.15 OCR 文字识别支持C++/Python/易语言

六.云盘源码下载

标签:pResult,utf8,top,rate,api,str,left,OCR,易语言
From: https://blog.csdn.net/ZhaDeNianQu/article/details/144489434

相关文章

  • Python OCR文字识别api接口
     一.引言文字识别,也称为光学字符识别(OpticalCharacterRecognition,OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技术的发展,文字识别技术已经成为信息管理、自动化办公和智能系统的关键组成部......
  • 【无标题】minio报minio API responded with message=Access denied on the resource
    确认MinIO服务状态首先,确保MinIO服务正在运行且可以访问。您可以通过直接访问MinIO的HTTP端口(默认为9000)来检查服务状态。例如,在浏览器中访问http://<MinIO服务IP>:9000或使用命令行工具如curl来进行测试。curlhttp://<MinIO服务IP>:9000/minio/health/live如果服......
  • Apifox下发流表
    一、下发二层流表1、下载ApifoxApifox-API在Windows物理机中下载并安装Apifox。2、创建topomn--topo=single,2--controller=remote,ip=127.0.0.1,port=6633测试连通性,pingall清空流表shovs-ofctldel-flowss1查看流表shovs-ofctldump-flowss13、发送g......
  • zerox ocr工具PDF转markdown
    zeroxocr工具PDF转markdownZerox环境准备支持的文档格式支持的模型火山视觉大模型视觉模型开通接口创建key开始使用zerox.pydoubao.pyZeroxzerox是一个开源OCR工具,借助AI视觉大模型,可以将PDFWORD图片等格式文档转换成markdown格式,而且他还支持LiteLLM,集成了市......
  • vscode 开发 fastapi 步骤
    1、新建本地存放项目的文件地址比如:D:/python/fastapi-project2、vscode--文件--打开文件夹,来到fastapi-project下在vscode内打开命令行,初始化一个虚拟环境:python-mvenvmongo13、激活虚拟环境windows环境下:.\venv\Scripts\activatemacOS/Linux环境下......
  • 数据结构:Win32 API详解
    目录一.Win32API的介绍二.控制台程序(Console)与COORD1..控制台程序(Console):2.控制台窗口坐标COORD:3.GetStdHandle函数:(1)语法:(2)参数:4.GetConsoleCursorInfo函数:(1)语法:(2)参数:(3)CONSOLE_CURSOR_INFO结构体:5.SetConsoleCursorInfo函数:实例:6.SetConsoleCursorPosition......
  • 【如何获取股票数据02】Python、Java等多种主流语言实例演示获取股票行情api接口之沪
    最近一两年内,股票量化分析逐渐成为热门话题。而从事这一领域工作的第一步,就是获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的主要任务是从这些数据中提炼出有价值的信......
  • 【决策单调性】P3648 [APIO2014] 序列分割 题解
    题目链接:P3648[APIO2014]序列分割(注:由于本题解的状态转移方程需要用到\(k\),所以原题中的\(k\)对应本题解中的\(m\)。)给你一个长度为\(n\)的序列\(A_1,A_2,...,A_n\),一开始把它看作一个块。初始你的分数为\(0\),现在你需要进行下列操作恰好\(m\)次:选一个块,并从一处......
  • Windows环境使用conda安装paddleOCR并测试
    1,安装Anaconda打开清华镜像源https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=D选择对应的版本的Anaconda下载并安装,按照提示一步步安装即可。2,使用AnacondaNavigatorGUI创建conda环境在AnacondaNavigator中,选择Environments选项卡,然后单击Create按钮。这将......
  • NestJS导出API文档
    在NestJS中,你可以使用@nestjs/swagger包来定义你的API文档,并且可以很容易地将这些文档转换为API调用。以下是一个简单的例子,展示如何使用NestJS和Swagger来创建一个API文档,并且如何生成API调用。首先,安装@nestjs/swagger和swagger-ui-express:npminstall@nestjs/swaggerswagg......