• 图文解说ChinaCock的百度OCR


    今天,拿到作者集成最新的百度OCR的控件,因为以前的版本一直存在这个问题:BaiduOCR本地模型加载失败,所以迫不及待的想用到app中,看有没有解决题。

    这个版本总体来说改动不大,但关键集成最新的百度OCR android SDK,改动相对来说还是不小的。有关最新的百度OCR Android SDK的内容,可以看官方发布的 Android SDK部分的资料,作为复习的内容,建议还是先做做功课,这里我就不重复了。

    官方现在发布到2.0.0版本,2022年2月17日发布,最重的就是增强了安全性,也因此需要我们去他的应用管理页面去生成一个安全文件aip-ocr.license,然后要同app一起发布出去。

    如何生成并下载这个aip-ocr.license文件?

    1.我现在已经在百度平台建立了应用,所以我直接来到应用列表,在这个页面中,选择一个应用,然后点“管理”,进入对应的应用详情页面::

    下图为进入的应用详情页面,点编辑,将进入修改应用信息页面: 

    进入修改应用信息页面,这里要输入应用的包名及签名的MD5,如下图:

    对于Delphi开发者来说,取得签名的MD5,可以直接在项目的签名管理界面得到,当然你也可以用签名工具在命令行得到。

    如下图,是Delphi项目的应用设置窗口,点击标识的按钮 Alias Info,在弹出窗口中就可以看到签名信息,其中就有MD5.

    拿到应用签名的MD5, 填好MD5,点“保存修改“,返回到应用详情,然后点下图中标识的按钮,就下载到了这个aip-ocr.license

    如果以前你没用过百度的开发接口,这块确实是个麻烦事。当然了,这是我编辑一个已经存在的应用。如果是新建一个应用的话,可以直接填写包名及MD5的。如下图:

    准备工作做好了,接下来,我们回到Delphi,看看如何使用ChinaCock的BaiduOCR控件。

    1.建立一个新的测试项目,然后拖一个CCBaiduOCR控件上来

    2.获取Token,直接上代码,这里AK与SK是你在百度平台建立一个应用时得到的值:

    procedure TMainForm.InitBaiduOCR;
    begin
    {$IFDEF ANDROID}
          // 这是2.0以前版本的方式.获取AccessToken
          //Self.CCBaiduOCR1.initAccessTokenWithAkSk('你的AK', '你的SK');
    
           // 2.0.0版本:授权文件(安全模式)获取AccessToken
           self.CCBaiduOCR1.initAccessTokenLicenseFile;
    {$ENDIF}
    end;

    3.处理CCBaiduOCR1事件nitAccessTokenWithAkSkResult

    当第二步取得Token后,会触发这个事件,直接代码了,对于2.0版本的SDK,要调用IDcardQualityProcessInit,这很重要,可以理解为初始化扫描身份证的模型,保证这个方法只调用一次是官方的建议。:

    procedure TMainForm.CCBaiduOCR1InitAccessTokenWithAkSkResult(Sender: TObject; AErrorCode: Integer; AErrorMsg, AToken: string);
    begin
      if AErrorCode = 0 then
      begin
        FBaiduOCRToken := AToken;
    
        //2022.04.21版本  token获取成功后 调用
        self.CCBaiduOCR1.IDcardQualityProcessInit;
    
        // showmessage('获取token成功!' + #13#10 + AToken);
      end
      else
      begin
        FBaiduOCRToken := '';
        // showmessage('获取token失败!' + #13#10 + AErrorMsg);
      end;
    end;

    3.启动扫描:

     CCBaiduOCR1.TagString := 'OCR_id_card_front_native';//扫身份证正面
     CCBaiduOCR1.OCR_id_card_front_native;//开始扫描身份证正面

     当扫描成功后,会触发CCBaiduOCR1的事件OnRecognizeResult,在这里事件,我们处理扫描的结果,下面是这个事件的原型:

    procedure TMainForm.CCBaiduOCR1RecognizeResult(Sender: TObject; AOCRType: TCCBaiduOCRType;
      AErrorCode: Integer; AErrorMsg, AFilePath, AJosonResult: string;
      AIDCardInfo: TCCIDCardInfo; ABankCardInfo: TCCBankCardInfo);
    begin
      ShowMessage(AFilePath);
    end;

    4.最后,当BaiduOCR控件所在的窗口销毁时,我们要调用IDcardQualityProcessReleaseModel方法,来释放模型,保证IDcardQualityProcessInit与这个方法配对使用是必须的。

    procedure TMainForm.FormDestroy(Sender: TObject);
    begin
      //2022.04.221 2.0.0版本 窗口destory的时候 释放模型
      self.CCBaiduOCR1.IDcardQualityProcessReleaseModel;
    end;

    关于代码部分就介绍完了。接下来,我们要修改AndroidManifest.template.xml,这部分简单,抄就行了。

    处理AndroidManifest.template.xml文件:

    1.增加权限:

     <!-- 百度OCR begin -->
       <uses-permission android:name="android.permission.INTERNET" />
       <uses-permission android:name="android.permission.CAMERA"/>
       <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
       <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
       <uses-feature android:name="android.hardware.camera2.full"/>
       <uses-feature android:name="android.hardware.camera"/>
       <uses-feature android:name="android.hardware.camera.autofocus" />
       <!-- 百度OCR end -->

    2.增加Activity:

            <!-- 百度ocr begin -->
            <activity
                android:name="com.chinacock.ccfmx.baidu.ocr.ui.camera.CameraActivity"
                android:configChanges="screenSize|orientation"
                android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>
            <!-- 百度ocr end -->

    再接下来,我们要发布百度Android SDK相关的文件:

    1.在项目中加入jar文件,这里有两个文件要加入:

    在项目如何加入jar文件,这里我以为你加过了,如果没加过,可以看我以前的文章。

    2.发布资源文件及so文件,这里,我强烈建议你使用DeployMan来发布,利用这个工具,直接选择ChinaCock带的发布目录Android,再选择包含子目录就OK了,不要使用Delphi的发布功能,一个文件一个文件发布,这样会让人生不如死。

    关于DeployMan的使用方法,我也有写过,可以去看看:

    DeployMan,发布文件的利器

    这里还有一点注意,利用发布工具会把上图中选择的目录中的所有文件发布出去,这会包括64位的SO,需要手工删除掉,不然会造成闪退,切记!

    最后,我们还要发布最开始下载到的aip-ocr.license:

    这里有两点要注意:
    1.文件名不能变,必须用aip-ocr.license

    2.发布目录要对:asset\baidu_ocr

    不然的话,在获取token会产生错误,不能正确取得token,那就无法再继续执行其他的动作了。

     最后,贴张我实作的界面:


  • 相关阅读:
    从上亿数据中抽取千万数据只需10分钟内
    当硬件成为瓶颈时怎么提高数据仓库的加载?
    监控logshipping 流量
    MSSQLMiRROR
    读取STGMEDIUM中的数据
    一个基本算法题暴露出来的C++基础不扎实
    C++对象模型学习
    从微观看chrome 之一:Singleton<T> 范型类
    从微观看chrome 之二:围绕Profile的ProfileService系统
    DevC++配置问题
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/16176974.html
Copyright © 2020-2023  润新知