zoukankan      html  css  js  c++  java
  • 二维码识别

    编了这么久的程序,如果碰到一个项目,或一个想法,会怎么做?

    首先会评估一下能否实现。

    如果能实现,就看是搭积木集成,还是从头来从底层实现。

    当然,如果要从头来,要么这个需求很简单,要么这个需求很重要(指市场前景很好),才有必要下定决心从底层来实现。比如,DrGraph图形平台就不能东拼西凑,而必须得有自己的核心东东,说得好听点就叫自主知识产权。

    今天来说二维码识别。这个小东东在高拍仪里面算是一个小模块吧。二维码好象现在在N多的地方都有应用,高拍仪软件主攻识别与交流,花点时间解决下二维码识别倒也不算是在浪费时间。

    首先评估一下,这个东东是自己从头来做,还是找现成的集成。

    上网简单搜了一下,居然找到了源码zxing。按中国程序员的习惯,这就是我的了。

    但这个源程序,光文件有好几十个

    这几十个文件,要是从头到尾读一遍,再理解一下,岂不得花个十天半个月的。这个时间可是花不起。

    那就打包成DLL算了,直接编译调用接口就OK。核心处理过程:

    wchar_t * TqaDll_BarCode::OnCommand(wchar_t * command) {

        FResponseNode->Clear(true);

        FResponseNode->ReadFromString(command);

        FResponseNode->AddAttribute("Status", "error");

     

        UnicodeString type = FResponseNode->AttributeValueByName("Type");

        try {

            if (type == "Scan") {

                UnicodeString fileName = FResponseNode->AttributeValueByName("FileName");

                if(FileExists(fileName)) {

                    TImage * image = new TImage(Application->MainForm);

                    image->Picture->LoadFromFile(fileName);

                    DoScan(image->Picture);

                    delete image;

    }

            }

            FResponseNode->AddAttribute("Status", "OK");

        }

        catch(Sysutils::Exception & ex) {

            THelper::MessageBox(THelper::FormatString(

                    "QaBarCode.dll响应 %s 时出现错误: %s 请检查并处理后继续!",

                    FResponseNode->Text, ex.Message), false);

            FResponseNode->AddAttribute("Status", "error");

        }

     

        UnicodeString test = FResponseNode->Text;

        wchar_t * response = new wchar_t[test.Length() + 1];

        wcscpy(response, test.w_str());

        return response;

    }

    然后调用,识别居然OK了。

    剩下的事就是整合进高拍仪程序。先是界面,也就是分区可以设置二维码区域

    拿表哥开庭事件再加上二维码图片为例

    自动分区,发现二维码区域也被识别为文字区域,需要手动设置一下。

    识别结果:

    进入逐行校对模式:

    达到识别效果。

     

    后记:

    二维码识别目前还有三个地方需改进:

    1. 中文识别:目前,二维码中的中文识别出来是乱码
    2. 区域自动识别:如果在视频或图片中,自动识别出二维码区域,则自动化程度会更高,交互性会更好;
    3. 生成二维码:用户输入文字,可以生成二维码,相当于提供一个小功能。
  • 相关阅读:
    maven编译时错误:无效的目标发行版
    参数传递方法(用Delphi的汇编代码解释)
    Playing with coroutines and Qt
    Qt的一些开发技巧
    刘晏:大唐经济战线的英雄
    Qt的焦点策略
    高级程序员与CTO技术总监首席架构师
    Python入门机器学习
    Service Mesh(服务网格)
    自定义博客园Markdown样式.超简单!
  • 原文地址:https://www.cnblogs.com/drgraph/p/3293476.html
Copyright © 2011-2022 走看看