接入百度本地OCR(文字识别)集成教程

接入百度本地OCR(文字识别)集成教程

一. 简介:

EasyEdge端计算模型生成平台
可基于多种深度学习框架、网络结构的模型,快捷生成端计算模型及封装SDK,适配多种AI芯片与操作系统。
文字识别,多场景、多语种、高精度的文字检测与识别服务,多项ICDAR指标居世界第一;广泛适用于远程身份认证、财税报销、文档电子化等场景,为企业降本增效;提供稳定易用的在线API、离线SDK、软件部署包多种服务形式,适配各种应用场景。
本次采用百度训练好的模型接入,避免了识别进行网络请求操作。

二. 接入教程:

  1. 打开easyEye demo网站 左目录选择开源模型体验, 然后选择百度超轻量级中文OCR模型, 下载Demo体验。如下图:
    下载
  2. 打开下载后的文件夹的 将 LIB 文件 和 RES 文件同时拖入项目中(以文件夹的形式)。下载后打开的目录如下图:

文件目录
3.然后配置工程项目,在 BuildPhases 中 添加苹果的机器学习库CoreML,以及上面LIB中的.a 与 opencv2.framework如下图:
coreml

4.如果是swift 和 objc 混编项目 在xxxxxx-Bridging-Header.h 添加如下代码

#import "EasyDLModel.h"
#import "EasyDL.h"
#import "BoxLayer.h"
#import "EasyDLImageHelper.h"

5.最后写实现代码,我采用了单例,避免每次生成模型耗时严重,代码如下:

@objc class KDSLocalOCRTool: NSObject {
    @objc static let shared = KDSLocalOCRTool()
    
    /// 本地识别模型。训练好的模型
    @objc var model: EasyDLModel?
    
    /// 识别模式
    @objc var mode: EEasyDLEngineMode = EEasyDLEngineMode_Offline
    override init() {
        super.init()
        self.initLocalOCRModel()
    }
    
    /// 初始化本地OCR模型
    func initLocalOCRModel() {
        EasyDL.setLogLevel(EEasyDLLogLevelInfo)
        var err: Error?
        do {
            model = try EasyDLModel(modelFromResourceDirectory: "easyedge")
        } catch {
            err = error
        }
        
        
        if model == nil {
            print("Model init failed")
            let alter = UIAlertController(title: "模型初始化失败", message: err?.localizedDescription ?? "", style: .alert) { () -> [KDSAction] in
                return [KDSAction(title: "重试", style: .default) { [weak self] in
                    self?.initLocalOCRModel()
                }]
            }
            UIApplication.shared.keyWindow?.rootViewController?.present(alter, animated: true, completion: nil)
        }
    }
    
    /// 根据图片,输出识别内容
    @objc func detectImage(_ img: UIImage, score: CGFloat, successHandler: @escaping ([Any]) -> Void ) {
        var err: Error?
        if mode == EEasyDLEngineMode_Offline { /// 离线识别
            var res: [Any] = []
            do {
                res = try model?.detect(img, withFilterScore: score) ?? []
            } catch {
                err = error
                print(err?.localizedDescription ?? "")
            }
            if !res.isEmpty {
                successHandler(res)
            }
        } else {
            model?.detectImageOnline(img, withFilterScore: score, andSuccessHandler: { (res) in
                successHandler(res ?? [])
            }, andFailHandler: { (error) in
                
            })
        }
    }
}

总结:

本次采用本地ocr,本质是基于机器学习,采用百度训练好的模型,然后调用封装好的功能库,自己再封装一层
通过 KDSLocalOCRTool 的detectImage 方法接收输入图片就可以获得识别结果,总体效率不错,相比网络请求速度更快。
优点: 节约流量,不需要依赖网络进行数据识别获取。
缺点: 本地载入,包会变大一些。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页