易语言 OCR 文字识别

     一.引言

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

二.简介

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

  • C++
  • Python
  • 易语言

1.C++头文件


#ifndef _SN_SDK_H__
#define _SN_SDK_H__



#include <windows.h>


enum SN_TRACK_MOVE_TYPE
{
	TRACK_MOVE_TYPE_NORMAL=0,		// 用于常规轨迹 - 普通游戏鼠标轨迹
	TRACK_MOVE_TYPE_SLIDER,			// 用于滑块轨迹,比常规常规轨迹密度更大 - 滑块验证轨迹
};

enum SN_TRACK_POINT_TYPE
{
	TRACK_POINT_TYPE_NORMAL=0,		// 默认绝对坐标
	TRACK_POINT_TYPE_RELATIVE,		// 相对坐标
};


//返回参数
typedef struct SN_RESULT {

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

}SN_RESULT;


//坐标参数
typedef struct SN_POINT
{
	int x;				//屏幕坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
	int y;				//屏幕坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)

}SN_POINT;

//轨迹参数
typedef struct SN_POINT_PARAMS
{
	struct SN_POINT point;//屏幕坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
	int delayTime;		  //延时时间(单位:毫秒),仅供参考

}SN_POINT_PARAMS;


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


/*设置鼠标移动轨迹,默认为 0 表示普通轨迹 ; 1 表示滑块验证时移动轨迹(获得的轨迹点数比普通轨迹点数更多)
*
* 参数:
*	[in] handle:		句柄(通过调用apiSNCreateHandle得到)
*  	[in] density:		轨迹密度调节 ,必须大于或者等于 1,默认 1
*								例如:默认1,原本为100个点,density 为 5,会得到20个点;density 为 2,会得到50个点 )
*  	[in] type:			轨迹类型(0代表绝对普通轨迹,1代表滑块轨迹,具体参考enum SN_TRACK_MOVE_TYPE)
*
* 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
*
*/
int WINAPI apiSNSetTrackParams(HANDLE handle, int density=1, int type=0);


/*获取鼠标移动轨迹
*
* 参数:
*	[in] handle:		句柄(通过调用apiSNCreateHandle得到)
* 	[in] startPoint:	开始坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
* 	[in] endPoint:		结束坐标,左上角(0,0),右下角(1920,1080 - 以实际屏幕为准)
*  	[in] type:			轨迹坐标类型(0代表绝对坐标,1代表相对坐标,具体参考enum SN_TRACK_POINT_TYPE)
* 	[out] points:		轨迹数组,如果数组中元素 point 出现(10000,10000),表示鼠标轨迹结束
*
* 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
*
*/
int WINAPI apiSNMouseMove(HANDLE handle, SN_POINT *startPoint, SN_POINT *endPoint, int type, SN_POINT_PARAMS* points);


/*获取版本号
*
* 参数:
*	[in] handle:		句柄(通过调用apiSNCreateHandle得到)
* 	[out] szVersion:	版本号
*
* 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
*
*/
int WINAPI apiSNGetVersion(HANDLE handle, char* szVersion);


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


/*获取错误信息
*
* 参数:
*	[in] handle:		句柄(通过调用apiSNCreateHandle得到)
*
* 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
*
*/
int WINAPI apiSNGetError(HANDLE handle);



/*释放句柄(内存)
*
* 参数:
*	[in] handle:		句柄(通过调用apiSNCreateHandle得到)
*
* 返回值:返回参数SN_RESULT.code(错误码)如果为 0 表示成功,否则表示错误号;
*
*/
int WINAPI apiSNDestroyHandle(HANDLE handle);


#endif // !_SN_SDK_H__

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":	[{
				"single_rate":	0.939104,
				"left":	102.208336,
				"top":	41.812500,
				"right":	329.854156,
				"bottom":	67.829170,
				"single_str_utf8":	"中国建设银行"
			}, {
				"single_rate":	0.966887,
				"left":	104.431534,
				"top":	68.423492,
				"right":	309.992828,
				"bottom":	84.602386,
				"single_str_utf8":	"China Construction Bank"
			}, {
				"single_rate":	0.968900,
				"left":	102.672920,
				"top":	96.168755,
				"right":	403.258331,
				"bottom":	111.964584,
				"single_str_utf8":	"龙卡通(储蓄卡)LONG CARD(DEBIT CARD)"
			}, {
				"single_rate":	0.975151,
				"left":	41.781921,
				"top":	137.955643,
				"right":	410.251556,
				"bottom":	164.107880,
				"single_str_utf8":	"6227 0033 2069 0222 205"
			}, {
				"single_rate":	0.935433,
				"left":	20.770407,
				"top":	210.668716,
				"right":	77.230583,
				"bottom":	230.122101,
				"single_str_utf8":	"ATM"
			}, {
				"single_rate":	0.960131,
				"left":	103.137505,
				"top":	185.368759,
				"right":	192.337509,
				"bottom":	207.204163,
				"single_str_utf8":	"CCB GZ"
			}, {
				"single_rate":	0.929293,
				"left":	338.376495,
				"top":	201.118103,
				"right":	417.111450,
				"bottom":	224.273529,
				"single_str_utf8":	"UnionPa"
			}, {
				"single_rate":	0.917808,
				"left":	367.485413,
				"top":	220.677078,
				"right":	413.479156,
				"bottom":	239.260422,
				"single_str_utf8":	"银联"
			}],
		"unknown_1":	446,
		"unknown_2":	280
	}
}

2.图片2

识别效果:

{
	"type":	0,
	"task_id":	1,
	"err_code":	0,
	"ocr_result":	{
		"single_result":	[{
				"single_rate":	0.919637,
				"left":	622.061157,
				"top":	123.251556,
				"right":	1046.638920,
				"bottom":	190.015121,
				"single_str_utf8":	"马托13610000670"
			}, {
				"single_rate":	0.996936,
				"left":	40.618664,
				"top":	324.310150,
				"right":	541.513184,
				"bottom":	371.843231,
				"single_str_utf8":	"广州利驰服装有限公司"
			}, {
				"single_rate":	0.997014,
				"left":	624.066650,
				"top":	218.300000,
				"right":	1040.933350,
				"bottom":	242.966675,
				"single_str_utf8":	"地址:广州市海珠区赤岗路173号"
			}, {
				"single_rate":	0.964238,
				"left":	624.066650,
				"top":	251.600000,
				"right":	844.833374,
				"bottom":	276.266663,
				"single_str_utf8":	"金丰大厦503室"
			}, {
				"single_rate":	0.979285,
				"left":	625.300000,
				"top":	286.133331,
				"right":	1044.633300,
				"bottom":	309.566681,
				"single_str_utf8":	"厂址:广州市海珠区赤岗西路232"
			}, {
				"single_rate":	0.996300,
				"left":	624.066650,
				"top":	318.200000,
				"right":	759.733337,
				"bottom":	341.633331,
				"single_str_utf8":	"号-234号"
			}, {
				"single_rate":	0.991057,
				"left":	624.066650,
				"top":	351.500000,
				"right":	925,
				"bottom":	374.933350,
				"single_str_utf8":	"热线:400-688-7260"
			}, {
				"single_rate":	0.964125,
				"left":	625.239319,
				"top":	381.016510,
				"right":	922.600220,
				"bottom":	404.499695,
				"single_str_utf8":	"电话:020-84022958"
			}, {
				"single_rate":	0.993601,
				"left":	624.066650,
				"top":	408.233337,
				"right":	923.766663,
				"bottom":	432.900000,
				"single_str_utf8":	"传真:020-84022572"
			}, {
				"single_rate":	0.950434,
				"left":	625.203430,
				"top":	438.767609,
				"right":	1107.616580,
				"bottom":	464.666626,
				"single_str_utf8":	"邮箱:kunhemwl@yahoo.com.cn"
			}, {
				"single_rate":	0.962023,
				"left":	624.066650,
				"top":	471.133331,
				"right":	1001.466670,
				"bottom":	494.566681,
				"single_str_utf8":	"网址:www.hxkunhe.com"
			}],
		"unknown_1":	1184,
		"unknown_2":	614
	}
}

四.常见问题

1.是否支持多线程

支持

五.更新日志

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

六.云盘源码下载

  • 百度云盘
  • 夸克云盘
  • 123云盘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/942051.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

重温设计模式--单例模式

文章目录 单例模式&#xff08;Singleton Pattern&#xff09;概述单例模式的实现方式及代码示例1. 饿汉式单例&#xff08;在程序启动时就创建实例&#xff09;2. 懒汉式单例&#xff08;在第一次使用时才创建实例&#xff09; 单例模式的注意事项应用场景 C代码懒汉模式-经典…

ArKTS基础组件3

一.PatternLock 图案密码锁组件&#xff0c;以九宫格图案的方式输入密码&#xff0c;用于密码验证场景 属性: sideLength:设置组件的宽度和高度&#xff08;宽高相同&#xff09;。设置为0或负数时组件不显示。 参数名类型必填说明valueLength是组件的宽度和高度。默认值&a…

python2:数据、运算符与表达式

一&#xff0c;数据类型&#xff1a; 数据类型是计算机对现实中数据的抽象&#xff0c;不同的数据类型其存储格式、数据范围、 计算要求都各不相同。 Python中的数据类型可以分为以下三类 基础类型&#xff1a;字符串(str)、整数(int)、实数(float)、布尔(bool)、复数(compl…

tortoisegit推送失败

tortoisegit推送失败 git.exe push --progress -- "origin" testLidar:testLidar /usr/bin/bash: gitgithub.com: No such file or directory fatal: Could not read from remote repository. Please make sure you have the correct access rights and the reposit…

pyinstaller打包资源文件和ini配置文件怎么放

1.如果出现无法成功完成操作&#xff0c;因为文件包含病毒或潜在的垃圾软件&#xff0c;说明你的版本太高&#xff0c;更换pyinstaller版本。 pip install pyinstaller6.2.02.一开始打包的时windows下尽量选择打成文件夹的并且要是带命令行窗口的&#xff0c;容易查看错误。 …

autMan奥特曼机器人-autMan的PHP环境

直装版请自行安装php环境。 docker版本预置了php环境&#xff0c;如下图&#xff1a; 如果使用插件"test php"测试环境时&#xff0c;实时日志有报错如下&#xff1a; 可进入终端&#xff0c;输入两条命令 apk add curl apk add php-curl

uniApp打包H5发布到服务器(docker)

使用docker部署uniApp打包后的H5项目记录&#xff0c;好像和VUE项目打包没什么区别... 用HX打开项目&#xff0c;首先调整manifest.json文件 开始用HX打包 填服务器域名和端口号~ 打包完成后可以看到控制台信息 我们可以在web文件夹下拿到下面打包好的静态文件 用FinalShell或…

【Leetcode】1705. 吃苹果的最大数目

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 有一棵特殊的苹果树&#xff0c;一连 n n n 天&#xff0c;每天都可以长出若干个苹果。在第 i i i 天&#xff0c;树上会长出 a p p l e s [ i ] apples[i] apples[i] 个苹果&a…

4、数据结构与算法解析(C语言版)--栈

栈的数据存储遵循“后进先出的规则”&#xff0c;这在计算机里面是非常有用的&#xff0c;比如word等编辑软件的"撤销"功能&#xff0c;就是使用栈进行实现的。 1、创建项目 main.h #ifndef _MAIN_H #define _MAIN_H#include <stdio.h> #include <stdlib.…

施耐德变频器ATV320系列技术优势:创新与安全并重

在工业自动化领域&#xff0c;追求高效、安全与智能已成为不可阻挡的趋势。施耐德变频器ATV320系列凭借其强大的设计标准和全球认证&#xff0c;成为能够帮助企业降低安装成本&#xff0c;提高设备性能的创新解决方案。 【全球认证&#xff0c;品质保障】ATV320 系列秉持施耐德…

【软考高级】系统架构设计师复习笔记-精华版

文章目录 前言0 系统架构设计师0.1 考架构还是考系分0.2 架构核心知识0.3 架构教材变化 1 计算机操作系统1.1 cpu 组成1.2 内核的五大功能1.3 流水线技术1.4 段页式存储1.5 I/O 软件1.6 文件管理1.7 系统工程相关 2 嵌入式2.1 嵌入式技术2.2 板级支持包&#xff08;BSP&#xf…

并发编程(19)——引用计数型无锁栈

文章目录 十九、day191. 引用计数2. 代码实现2.1 单引用计数器无锁栈2.2 双引用计数器无锁栈 3. 本节的一些理解 十九、day19 上一节我们学习通过侯删链表以及风险指针与侯删链表的组合两种方式实现了并发无锁栈&#xff0c;但是这两种方式有以下缺点&#xff1a; 第一种方式…

大恒相机开发(2)—Python软触发调用采集图像

大恒相机开发&#xff08;2&#xff09;—Python软触发调用采集图像 完整代码详细解读和功能说明扩展学习 这段代码是一个Python程序&#xff0c;用于从大恒相机采集图像&#xff0c;通过软件触发来采集图像。 完整代码 咱们直接上python的完整代码&#xff1a; # version:…

步进电机直线插补

基础原理 代码部分

数据结构经典算法总复习(上卷)

第一章&#xff1a;数据结构导论 无重要考点&#xff0c;仅需了解时间复杂度。 第二章&#xff1a;线性表 1.获得线性表第i个元素 void GetElem_sq(SqList L, int i, ElemType &e) {if (i<1 || i>L.length) ErrorMsg("Invalid i value"); //注意错误监…

Windows11 安装 Ubuntu-20.04,同时安装配置 zsh shell,配置 git 别名(alias),大大提高开发效率

背景&#xff1a;家里配置了一台 Windows 电脑&#xff0c;有时候需要用到 vscode 开发测试一些代码&#xff0c;在使用过程中发现原生 windows 敲代码不是很友好&#xff0c;于是想到配置 wsl&#xff0c;安装 Ubuntu&#xff0c;并安装配置 zsh shell&#xff0c;同时配置 gi…

PE文件结构

PE文件是Windows系统下可执行文件的总称&#xff0c;英文全称 Portable Executable 可移植的可执行文件&#xff0c;常见的有exe、dll、sys、com、ocx 对于学习反&#xff08;木马、免杀、病毒、外挂、内核&#xff09;&#xff0c;了解PE文件结构是非常有必要且非常非常重要的…

Helm 官方脚本

Helm 官方脚本 #!/usr/bin/env bash# Copyright The Helm Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # …

JSON 系列之1:将 JSON 数据存储在 Oracle 数据库中

本文为Oracle数据库JSON学习系列的第一篇&#xff0c;讲述如何将JSON文档存储到数据库中&#xff0c;包括了版本为19c和23ai的情形。 19c中的JSON 先来看一下数据库版本为19c时的情形。 创建表colortab&#xff0c;其中color列的长度设为4000。若color的长度需要设为32767&a…

C语言-结构体内存大小

#include <stdio.h> #include <string.h> struct S1 { char a;//1 int b;//4 char c;//1 }; //分析 默认对齐数 成员对齐数 对齐数(前两个最小值) 最大对齐数 // 8 1 …