OCR技术之阿里云产品

OCR技术,开源免费的技术产品之前小编已经写过,想看请点击 https://www.cnblogs.com/zhizhixiaoxia/p/12015657.html

没事研究了下阿里云收费的OCR技术产品。

以身份证识别为例,代码调用接口实现:(idea编写的Java,maven项目)

1、所需依赖:

<dependency>    <groupId>org.apache.httpcomponents</groupId>    <artifactId>httpclient</artifactId>    <version>4.5.3</version></dependency><dependency>    <groupId>com.alibaba</groupId>    <artifactId>fastjson</artifactId>    <version>1.2.15</version></dependency><dependency>    <groupId>commons-lang</groupId>    <artifactId>commons-lang</artifactId>    <version>2.6</version></dependency>

依赖版本可自行去maven仓库选择下载。

2、需要创建两个类,一个是目标类,一个是http工具类。

目标类:

public class AliyunOcr {

    public static void main(String[] args){        //idCardIdentify();    }

    /**     * 身份证识别     * */    private static void idCardIdentify() {        // 接口访问路径        String host = "http://dm-51.data.aliyun.com";        // 接口请求方式风格        String path = "/rest/160601/ocr/ocr_idcard.json";        // 产品编码        String appcode = "开通服务获取";        // 图片路径        String imgFile = "E://com//dream//begin//image//jpg//idCard//1_3.jpg";        // 如果文档的输入中含有inputs字段,设置为True, 否则设置为False        Boolean is_old_format = false;        // 请根据线上文档修改configure字段        JSONObject configObj = new JSONObject();        // 身份证正反面参数 front正面,back反面        configObj.put("side", "back");        String config_str = configObj.toString();        // 请求方式        String method = "POST";        Map<String, String> headers = new HashMap<String, String>();        // 最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105        headers.put("Authorization", "APPCODE " + appcode);     // url后面的请求参数        Map<String, String> querys = new HashMap<String, String>();

        // 对图像进行base64编码        InputStream inputStream = null;        byte[] data = null;        try {            inputStream = new FileInputStream(imgFile);            data = new byte[inputStream.available()];            inputStream.read(data);            inputStream.close();        } catch (IOException e) {            e.printStackTrace();        }        // 编码加密        BASE64Encoder encoder = new BASE64Encoder();        String imgBase64 = encoder.encode(data);        // 拼装请求body的json字符串        JSONObject requestObj = new JSONObject();        try {        // 判断文档输入中是否含有inputs字段            if(is_old_format) {                JSONObject obj = new JSONObject();                obj.put("image", getParam(50, imgBase64));                if(config_str.length() > 0) {                    obj.put("configure", getParam(50, config_str));                }                JSONArray inputArray = new JSONArray();                inputArray.add(obj);                requestObj.put("inputs", inputArray);            }else{                requestObj.put("image", imgBase64);                if(config_str.length() > 0) {                    requestObj.put("configure", config_str);                }            }        } catch (JSONException e) {            e.printStackTrace();        }     // 请求体        String bodys = requestObj.toString();        try {            // 发送请求,识别图片            HttpResponse response = AliyunHttpUtils.doPost(host, path, method, headers, querys, bodys);            // 请求状态码            int stat = response.getStatusLine().getStatusCode();            if(stat != 200){                System.out.println("Http code: " + stat);                System.out.println("http header error msg: "+ response.getFirstHeader("X-Ca-Error-Message"));                System.out.println("Http body error msg:" + EntityUtils.toString(response.getEntity()));                return;            }            // 获取返回数据            String res = EntityUtils.toString(response.getEntity());            JSONObject res_obj = JSON.parseObject(res);            if(is_old_format) {                JSONArray outputArray = res_obj.getJSONArray("outputs");                String output = outputArray.getJSONObject(0).getJSONObject("outputValue").getString("dataValue");                JSONObject out = JSON.parseObject(output);           // 打印返回结果                 System.out.println(out.toJSONString());            }else{                System.out.println(res_obj.toJSONString());            }        } catch (Exception e) {            e.printStackTrace();        }    }

    /**     * 获取参数的json对象     **/    private static JSONObject getParam(int type, String dataValue) {        JSONObject obj = new JSONObject();        try {            obj.put("dataType", type);            obj.put("dataValue", dataValue);        } catch (JSONException e) {            e.printStackTrace();        }        return obj;    }

}

http工具类::

public class AliyunHttpUtils {    /**     * Post String     *     * @param host     * @param path     * @param method     * @param headers     * @param querys     * @param body     * @return     * @throws Exception     */    public static HttpResponse doPost(String host, String path, String method,                                      Map<String, String> headers,                                      Map<String, String> querys,                                      String body)            throws Exception {        HttpClient httpClient = wrapClient(host);

        HttpPost request = new HttpPost(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {            request.addHeader(e.getKey(), e.getValue());        }

        if (StringUtils.isNotBlank(body)) {            request.setEntity(new StringEntity(body, "utf-8"));        }

        return httpClient.execute(request);    }

    private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {        StringBuilder sbUrl = new StringBuilder();        sbUrl.append(host);        if (!StringUtils.isBlank(path)) {            sbUrl.append(path);        }        if (null != querys) {            StringBuilder sbQuery = new StringBuilder();            for (Map.Entry<String, String> query : querys.entrySet()) {                if (0 < sbQuery.length()) {                    sbQuery.append("&");                }                if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {                    sbQuery.append(query.getValue());                }                if (!StringUtils.isBlank(query.getKey())) {                    sbQuery.append(query.getKey());                    if (!StringUtils.isBlank(query.getValue())) {                        sbQuery.append("=");                        sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));                    }                }            }            if (0 < sbQuery.length()) {                sbUrl.append("?").append(sbQuery);            }        }

        return sbUrl.toString();    }

    private static HttpClient wrapClient(String host) {        HttpClient httpClient = new DefaultHttpClient();        if (host.startsWith("https://")) {            sslClient(httpClient);        }

        return httpClient;    }

    private static void sslClient(HttpClient httpClient) {        try {            SSLContext ctx = SSLContext.getInstance("TLS");            X509TrustManager tm = new X509TrustManager() {                public X509Certificate[] getAcceptedIssuers() {                    return null;                }                public void checkClientTrusted(X509Certificate[] xcs, String str) {

                }                public void checkServerTrusted(X509Certificate[] xcs, String str) {

                }            };            ctx.init(null, new TrustManager[] { tm }, null);            SSLSocketFactory ssf = new SSLSocketFactory(ctx);            ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);            ClientConnectionManager ccm = httpClient.getConnectionManager();            SchemeRegistry registry = ccm.getSchemeRegistry();            registry.register(new Scheme("https", 443, ssf));        } catch (KeyManagementException ex) {            throw new RuntimeException(ex);        } catch (NoSuchAlgorithmException ex) {            throw new RuntimeException(ex);        }    }}

工具类我删除了一些没用到的方法,如有想看完整的请去下载 https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java。

总的来说,阿里云接口的使用,还是很简单的。希望对大伙们能有所帮助。

本人学疏才浅,如有差错,望请指正。

  

原文地址:https://www.cnblogs.com/zhizhixiaoxia/p/12017317.html

时间: 2024-10-10 22:21:56

OCR技术之阿里云产品的相关文章

【阿里云产品评测】小站长眼中的巅峰云PK

阿里云论坛用户:昵称-a5lianmeng 笔者是一名小站长,因狂热互联网,而在毕业后由宅男逐渐进入站长队伍,在毕业后的几年间,经营6个流量类网站,身为站长,从注册域名到网站的第一笔收入,其间的酸甜苦辣是经历了数不清的通宵努力,才让那些此起彼伏的流量线条节节攀升,当然也对阿里云主机有着深刻的认知,以前笔者在国外的虚拟机面临到期,而国外的访问速度相对较差,当网站每次出现无法打开网页等类似故障时,等同于末日来临般难熬,因此待阿里云产品上线之后,似乎很多人都对云主机抱有期望,当然,对于阿里云主机的相关

【阿里云产品公测】大数据下精确快速搜索OpenSearch

[阿里云产品公测]大数据下精确快速搜索OpenSearch 作者:阿里云用户小柒2012 相信做过一两个项目的人都会遇到上级要求做一个类似百度或者谷歌的站内搜索功能.传统的sql查询只能使用like 或者FIND_IN_SET来实现.后者性能稍微好点但是必须要逗号分隔才可以实现匹配.甚至多条件的话还可能用到OR这是极影响系统性能的. 最近公司项目需要.主要是系统查询缓慢.并且查询精度不敢恭维.一开始想到的是Lucene 毕竟是一个开放源代码的全文检索引擎工具包 并且官方还在持续更新中.当时闲暇时

【阿里云产品评测】装甲兵在云路上!

小编:高考结束,假期犹长!学生党:装甲兵,已经趁着假期开始踏入地方门户网站的建设这条路!这条评测从选购.备案.安全.综合四个方面给出了评测报告.“不得不点2014个赞!” 阿里云用户:论坛昵称装甲兵 一.导读 高考结束,假期犹长!家乡互联网程度并不高,本地门户网站还未真正的发展起来,所以趁着假期开始踏入地方门户网站的建设这条路!         网站建设,要经过很多步骤流程:            a.选择网站名.合适的域名:            b.选择一个适合发展的网站程序:       

【阿里云产品评测】阿里云主机带来不一样的感受

阿里云用户:论坛昵称-安尔宝贝 前言:  我们本身不是专业做网站的,弄弄网站完全是学习和兴趣.使用阿里云之前用过很多主机,虚拟主机也好,VPS也好都有过,并且现在也在多家运营商使用中,所以对主机体验还是能发表一下看法的.多了就不废话了,结合自己跟身边朋友的经验,总而言之,免费的基本不能用,虚拟主机的话如果你只是玩玩的可以考虑几个有长期口碑运营商的产品,如果是要靠网站来吃饭或者忍受不了虚拟主机那种种限制的,绝对要选云主机啦. 为何选阿里云:  之前用过好几个知名运营商,大多数都是不好用的,目前我们

【阿里云产品公测】给阿里云产品的几点小建议

作者:阿里云用户蓝色之鹰 本人十足菜鸟,提几点不成熟的建议,请勿见笑! 阿里云本次公测的九大产品加上之前的云产品,云产品数量接近20种,足见其雄厚的实力,出生名门当仁不让的占据行业龙头地位.但这些只是具备成为一款优秀产品的潜质,一切还需要得到市场的认可.恕直言,目前阿里云产品还有点叫好不叫座的局面!我从一个开发者的角度提几点小建议:   1.产品需要接地气:由于产品本生的性质决定,对使用者的技术要求较高,非老鸟玩不转.但这是一款优秀产品的绊脚石,我儿子两岁开始玩IPAD,甚至看到电视都用手去触碰

阿里云产品总监何云飞:数据是企业的第一资产,云与企业必须深度融合

摘要: 对于企业而言,除了管理不当,资金链断裂等因素会导致企业面临危机,在互联网时代,数据中心事故同样会导致企业面临灾难性危机且绝大多数不可逆.据IDC统计数据表明,十年间发生过灾难的公司,有55%当时倒闭,剩下的45%中,因为数据丢失,有29%也在两年之内倒闭,生存下来的仅占16%. 对于企业而言,除了管理不当,资金链断裂等因素会导致企业面临危机,在互联网时代,数据中心事故同样会导致企业面临灾难性危机且绝大多数不可逆.据IDC统计数据表明,十年间发生过灾难的公司,有55%当时倒闭,剩下的45%

【阿里云产品公测】弹性伸缩服务ESS之试用初体验

T>>c2$ x 弹性伸缩服务ESS之试用初体验 作者:云郎 2014/10/15 阿里云弹性伸缩服务(Elastic Scaling Service)是根据用户的业务需求和策略,自动调整其弹性计算服务器(ECS)的管理服务.其能够在业务增长时自动增加ECS实例,并在业务下降时自动减少ECS实例. 收到ESS开始公测的邀请,马上怕不急待的申请了公测资格,开始体验传说中的ESS云服务了.因为笔者一直在全面的测试阿里云产品,在做压测过程中经常需要动态的调整ECS云主机的数量以确保能够给RDS提供合

【阿里云产品评测】我的第一次云体验

小编:凌晨1点半为我们分享,超感动~在阿里云,有问题了提工单.问热心版主,轻松快速解决:有恶意攻击,每次都被云盾成功拦截了.而且还是在情人节这么幸福的日子开始的云体验~这又快七夕了,亲们有考虑给爱一个幸福的云空间吧~ 阿里云用户:论坛昵称-trcher 2014年2月14日,元宵节+情人节   2014年2月14日,阿里云杭州地域云服务器重开售卖 2014年2月14日,我购买了杭州节点服务器 一.前言:             我的工作是搞设计的,对于做网站完全是瞎搞出来的,06年开始接触做起了

【阿里云产品公测】阿里云ACE部署通用完整教程及评测

[阿里云产品公测]阿里云ACE部署通用完整教程及评测 作者:阿里云用户bailimei ACE应该是目前在公测的服务中应用最广泛的一项服务.在公测云引擎ACE前曾使用过新浪SAE,而ACE给我的最初印象是比SAE要简单易用的多,除了上传文件需用SVN外,其它就像在用ECS+RDS,体验上没多大差别,因我现在就用着这两项产品,所以感觉比较直观.原先已有同学写了一些优秀的ACE教程,对分享自己的体验我们都应该点赞.下面以测试部署wordpress为例,重点对ACE使用过程中遇到的难点问题展开说明,并