一.引言
文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技术的发展,文字识别技术已经成为信息管理、自动化办公和智能系统的关键组成部分。
二.简介
为了易于集成和使用,我们将文字识别OCR封装为DLL(动态链接库)。这种封装方式不仅保留了算法的性能优势,还提供了跨平台和跨语言的兼容性,目前支持编程语言如下:
1.C++头文件
- <ol ><li> </li><li> </li><li> </li><li>#ifndef __SN_OCR__H__</li><li>#define __SN_OCR__H__</li><li> </li><li>#include "windows.h"</li><li> </li><li> </li><li>//返回参数</li><li>typedef struct SN_STATU {</li><li> </li><li> int code; //错误码,如果为 0 表示成功,否则表示错误号</li><li> char message[4096]; //错误信息,如果为 "OK" 表示成功,否则返回错误信息</li><li> </li><li>}SN_STATU;</li><li> </li><li> </li><li>/*启动OCR文字识别服务</li><li>*</li><li>* 参数:</li><li>* [in] szOnnxFilePath: 设置 onnx 模型文件路径,如果设置为 NULL,默认和 DLL文件同级目录</li><li>* [out] pResult: 返回错误信息,参数pResult->code(错误码)如果为 0 表示成功,否则表示错误号;</li><li>*</li><li>* 返回值:成功返回0,失败返回错误号,详细错误信息请参考 pResult</li><li>*</li><li>*/</li><li>int WINAPI apiSNInitOCRServer(char* szOnnxFilePath, SN_STATU* pStatu);</li><li> </li><li> </li><li>/*创建OCR文字识别句柄</li><li>*</li><li>* 参数:</li><li>* [in] szKey: 卡密(购买卡密:https://shop.4yuns.com/links/7C9F16B7)</li><li>* [in] pOnnxFilePath:设置 onnx 模型文件路径,如果设置为 NULL,默认和 DLL文件同级目录</li><li>* [out] pResult: 返回错误信息,参数pResult->code(错误码)如果为 0 表示成功,否则表示错误号;</li><li>*</li><li>* 返回值:成功返回句柄,失败返回NULL</li><li>*</li><li>*/</li><li>HANDLE WINAPI apiSNCreateOCRHandle(char* szKey, char* szOnnxFilePath, SN_STATU* pStatu);</li><li> </li><li> </li><li>/*获取OCR文字识别卡密到期时间</li><li>*</li><li>* 参数:</li><li>* [in] handle: 句柄(通过调用apiSNCreateOCRHandle得到)</li><li>* [out] pResult: 返回错误信息,参数pResult->code(错误码)如果为 0 表示成功,否则表示错误号;</li><li>*</li><li>* 返回值:返回卡密到期时间,失败返回NULL,错误信息请查看参数 pResult->message</li><li>*</li><li>*/</li><li>char* WINAPI apiSNGetKeyExpiresTime(HANDLE handle, SN_STATU* pResult);</li><li> </li><li> </li><li>/*获取OCR文字识别结果(以json字符串形式返回)</li><li>*</li><li>* 参数:</li><li>* [in] handle: 句柄(通过调用apiSNCreateOCRHandle得到)</li><li>* [in] szImageFilePath: 图片路径</li><li>* [out] pResult: 返回错误信息,参数pResult->code(错误码)如果为 0 表示成功,否则表示错误号;</li><li>*</li><li>* 返回值:返回OCR文字识别结果(以json字符串形式返回),失败返回NULL,错误信息请查看参数 pResult->message</li><li>*</li><li>*/</li><li>char* WINAPI apiSNGetOCRFromImage(HANDLE handle, char* szImageFilePath, SN_STATU* pStatu);</li><li> </li><li> </li><li>/*释放OCR文字识别句柄(释放内存)</li><li>*</li><li>* 参数:</li><li>* [in] handle: 句柄(通过调用apiSNCreateOCRHandle得到)</li><li>*</li><li>* 返回值:返回 0 表示成功,其他值表示错误号;</li><li>*</li><li>*/</li><li>int WINAPI apiSNDestroyOCRHandle(HANDLE handle);</li><li> </li><li>#endif</li></ol><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title="">
复制代码 2.C++调用dll接口
- <ol ><li>.版本 2</li><li>.支持库 spec</li><li> </li><li>.程序集 窗口程序集_启动窗口</li><li> </li><li>.子程序 _启动子程序, 整数型</li><li> </li><li>_临时子程序 ()</li><li>返回 (0)</li><li> </li><li> </li><li>.子程序 _临时子程序</li><li>.局部变量 handle, 整数型</li><li>.局部变量 pResult, SN_STATU, 静态, , 返回错误信息,参数pResult.code(错误码)如果为 0 表示成功,否则表示错误号;</li><li>.局部变量 szOCRJson, 文本型, , , OCR识别结果 (json字符串);</li><li>.局部变量 szTime, 文本型, , , 卡密结束时间;</li><li> </li><li>' ---------------------------------------------------------------</li><li>' 1.启动 OCR 文字识别服务</li><li>' 其中卡密 SNKJe9xffLhdFY7r3TcffXq44ThDVcE3BQFQFfVA9VG4 仅用于测试,需要找开发人员重新购买,购买卡密连接:https://shop.4yuns.com/links/7C9F16B7</li><li>' ---------------------------------------------------------------</li><li>apiSNInitOCRServer (“SNOCR.onnx”, pResult)</li><li>调试输出 (pResult.code, 到文本 (pResult.message))</li><li>.如果真 (pResult.code < 0)</li><li> 调试输出 (“-----------程序结束-----------”)</li><li> 返回 ()</li><li> </li><li>.如果真结束</li><li>' 2.创建 OCR 文字识别句柄</li><li>handle = apiSNCreateOCRHandle (“SNKJe9xffLhdFY7r3TcffXq44ThDVcE3BQFQFfVA9VG4”, “SNOCR.onnx”, pResult)</li><li>调试输出 (pResult.code, 到文本 (pResult.message))</li><li>调试输出 (“句柄”, handle)</li><li>.如果真 (pResult.code < 0)</li><li> 调试输出 (“-----------程序结束-----------”)</li><li> 返回 ()</li><li>.如果真结束</li><li>' 3.识别 OCR 文字识别,返回 json 字符串</li><li>szOCRJson = apiSNGetOCRFromImage (handle, “d:\\22.png”, pResult)</li><li>调试输出 (到文本 (szOCRJson))</li><li> </li><li>' 4.识别 OCR 文字卡密到期时间</li><li>szTime = apiSNGetKeyExpiresTime (handle, pResult)</li><li>调试输出 (到文本 (szTime))</li><li>' 5.释放 OCR 文字识别内存</li><li>apiSNDestroyOCRHandle (handle)</li><li>调试输出 (“-----------程序结束-----------”)</li></ol><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title="">
复制代码 三.效果演示
1.图片1
识别效果:
- <ol ><li>{</li><li> "type": 0,</li><li> "task_id": 1,</li><li> "err_code": 0,</li><li> "ocr_result": {</li><li> "single_result": [{</li><li> "left": 80.136589,</li><li> "top": 56.710590,</li><li> "right": 413.614105,</li><li> "bottom": 89.287964,</li><li> "str_utf8": "包头市特种设备追溯平台",</li><li> "rate": "0.981197"</li><li> }, {</li><li> "left": 171.293091,</li><li> "top": 99.701866,</li><li> "right": 329.740753,</li><li> "bottom": 120.792061,</li><li> "str_utf8": "设备编码: 000001)",</li><li> "rate": "0.970116"</li><li> }, {</li><li> "left": 81.693756,</li><li> "top": 274.142029,</li><li> "right": 229.766312,</li><li> "bottom": 295.966248,</li><li> "str_utf8": "RFID 扫描区域",</li><li> "rate": "0.992770"</li><li> }, {</li><li> "left": 50,</li><li> "top": 318.229156,</li><li> "right": 181.250000,</li><li> "bottom": 339.062500,</li><li> "str_utf8": "投诉电话: 12365",</li><li> "rate": "0.984698"</li><li> }, {</li><li> "left": 259.311310,</li><li> "top": 352.951111,</li><li> "right": 466.734924,</li><li> "bottom": 371.130615,</li><li> "str_utf8": "包头市质量技术监督局制",</li><li> "rate": "0.961233"</li><li> }],</li><li> "width": "500",</li><li> "height": "384"</li><li> }</li><li>}</li></ol><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title="">
复制代码 2.图片2
识别效果:
- <ol ><li>{</li><li> "type": 0,</li><li> "task_id": 1,</li><li> "err_code": 0,</li><li> "ocr_result": {</li><li> "single_result": [{</li><li> "left": 451.128448,</li><li> "top": 110.489426,</li><li> "right": 1138.148070,</li><li> "bottom": 199.850967,</li><li> "str_utf8": "中华人民共和国",</li><li> "rate": "0.998395"</li><li> }, {</li><li> "left": 398.003052,</li><li> "top": 250.290588,</li><li> "right": 1189.906010,</li><li> "bottom": 370.648926,</li><li> "str_utf8": "居民身份证",</li><li> "rate": "0.999714"</li><li> }, {</li><li> "left": 333.586945,</li><li> "top": 605.802917,</li><li> "right": 1028.648680,</li><li> "bottom": 654.308594,</li><li> "str_utf8": "签发机关上海市公安局徐汇分局",</li><li> "rate": "0.998378"</li><li> }, {</li><li> "left": 334.754303,</li><li> "top": 712.041199,</li><li> "right": 539.191406,</li><li> "bottom": 752.816345,</li><li> "str_utf8": "有效期限",</li><li> "rate": "0.999937"</li><li> }, {</li><li> "left": 551.186523,</li><li> "top": 713.943665,</li><li> "right": 1061.341670,</li><li> "bottom": 754.974915,</li><li> "str_utf8": "2005.10.08-202510.08",</li><li> "rate": "0.985583"</li><li> }],</li><li> "width": "1313",</li><li> "height": "858"</li><li> }</li><li>}</li></ol><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title="">
复制代码 四.常见问题
1.是否支持多线程
支持
五.更新日志
- 2024.12.15 OCR 文字识别支持C++/Python/易语言
六.云盘源码下载
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |