C++ OCR证件照文字识别
一.引言文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技术的发展,文字识别技术已经成为信息管理、自动化办公和智能系统的关键组成部分。
二.简介
为了易于集成和使用,我们将文字识别OCR封装为DLL(动态链接库)。这种封装方式不仅保留了算法的性能优势,还提供了跨平台和跨语言的兼容性,目前支持编程语言如下:
[*]C++
[*]Python
[*]易语言
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; //错误信息,如果为 "OK" 表示成功,否则返回错误信息</li><li> </li><li>}SN_STATU;</li><li> </li><li> </li><li>/*启动OCR文字识别服务</li><li>*</li><li>* 参数:</li><li>* szOnnxFilePath: 设置 onnx 模型文件路径,如果设置为 NULL,默认和 DLL文件同级目录</li><li>* 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>* szKey: 卡密(购买卡密:https://shop.4yuns.com/links/7C9F16B7)</li><li>* pOnnxFilePath:设置 onnx 模型文件路径,如果设置为 NULL,默认和 DLL文件同级目录</li><li>* 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>* handle: 句柄(通过调用apiSNCreateOCRHandle得到)</li><li>* 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>* handle: 句柄(通过调用apiSNCreateOCRHandle得到)</li><li>* szImageFilePath: 图片路径</li><li>* 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>* 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><imgsrc="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""> 2.C++调用dll接口
<ol><li> </li><li>#include <iostream></li><li>#include "SNOCR.h"</li><li> </li><li>int main()</li><li>{</li><li> struct SN_STATU statu = { 0 };</li><li> </li><li> char szExeFullPath = { 0 };</li><li> char szImagePath = { 0 };</li><li> //卡密</li><li> char szKey = "SNKJe9xffLhdFY7r3TcffXq44ThDVcE3BQFQFfVA9VG4";</li><li> //onnx模型路径</li><li> char szOnnxFullPath = { 0 };</li><li> </li><li> GetModuleFileName(NULL, szExeFullPath, 4096);</li><li> *strrchr(szExeFullPath, '\\') = 0;</li><li> sprintf(szOnnxFullPath, "%s\\SNOCR.onnx", szExeFullPath);</li><li> // 注意路径不要带有中文</li><li> sprintf(szImagePath, "%s\\7.jpg", szExeFullPath);</li><li> </li><li> //1.启动OCR服务</li><li> int ret = apiSNInitOCRServer(szOnnxFullPath, &statu);</li><li> if (ret < 0)</li><li> {</li><li> printf("Error:%s \n", statu.message);</li><li> return 0;</li><li> }</li><li> </li><li> //2.创建OCR句柄</li><li> HANDLE handle = apiSNCreateOCRHandle(szKey, szOnnxFullPath, &statu);</li><li> if (!handle)</li><li> {</li><li> printf("Error:%s \n", statu.message);</li><li> return 0;</li><li> }</li><li> </li><li> //3.获取卡密到期时间</li><li> char* szTime = apiSNGetKeyExpiresTime(handle, &statu);</li><li> if (!szTime)</li><li> {</li><li> printf("Error:%s \n", statu.message);</li><li> return 0;</li><li> }</li><li> </li><li> //4.识别OCR,返回Json字符串</li><li> char* szJson = apiSNGetOCRFromImage(handle, szImagePath, &statu);</li><li> if (!szJson)</li><li> {</li><li> printf("Error:%s \n", statu.message);</li><li> return 0;</li><li> }</li><li> printf("%s \n", szJson);</li><li> //5.释放内存</li><li> apiSNDestroyOCRHandle(handle);</li><li> </li><li> getchar();</li><li>}</li><li> </li></ol><imgsrc="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><imgsrc="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><imgsrc="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""> 四.常见问题
1.是否支持多线程
支持
五.更新日志
[*]2024.12.15 OCR 文字识别支持C++/Python/易语言
六.云盘源码下载
[*]百度云盘
[*]夸克云盘
[*]123云盘
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]