阿里云OCR识别

这篇具有很好参考价值的文章主要介绍了阿里云OCR识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ocr识别证件照;主要是使用阿里云j接口:

1、注册阿里云账户获取appKey \appSer

2、调用接口

2.1:定义常量

public class OrcHttpConstant {

    /**
     *   驾驶证识别appCode
     */
    public static final String OCR_APPCODE = "033f4b0f719d4e01b431a18cba7a79e1";

    /**
     * 调用方式
     */
    public static final String MONTH = "POST";

    /**
    *   驾驶证识别url
    */
    public static final String DRIVER_LICENSE_HOST = "https://cardriving.market.alicloudapi.com";

    /**
    *   驾驶证识别path
    */
    public static final String DRIVER_LICENSE_PATH = "/rest/160601/ocr/ocr_driver_license.json";


    /**
     *   身份证识别url
     */
    public static final String ID_CARD_HOST = "https://cardnumber.market.alicloudapi.com";

    /**
     *   身份证识别path
     */
    public static final String ID_CARD_PATH = "/rest/160601/ocr/ocr_idcard.json";


    /**
     *   行驶证识别url
     */
    public static final String VEHICLE_LICENSE_HOST = "https://driving.market.alicloudapi.com";

    /**
     *   行驶证识别path
     */
    public static final String VEHICLE_LICENSE_PATH = "/rest/160601/ocr/ocr_vehicle.json";


    /**
     *   营业执照证识别url
     */
    public static final String BUSINESS_LICENSE_HOST = "https://bizlicense.market.alicloudapi.com";

    /**
     *   营业执照证识别path
     */
    public static final String BUSINESS_LICENSE_PATH = "/rest/160601/ocr/ocr_business_license.json";


    /**
     *   发票识别url
     */
    public static final String INVOICE_LICENSE_HOST = "https://dgfp.market.alicloudapi.com";

    /**
     *   发票识别path
     */
    public static final String INVOICE_LICENSE_PATH = "/ocrservice/invoice";

}

 2.2 :OCR识别工具: 主要是按照type调用个子的方法文章来源地址https://www.toymoban.com/news/detail-823281.html

/**
 * 阿里云OCR识别功能
 */
@Component
@Slf4j
public class AliOcrTools {




    /**
     * orc识别接口
     * @param appCode 识别code
     * @param imgFile 识别图片路径
     * @param isFace 正反面
     * @param type 类型
     * @return
     */
    public static JSONObject orcIdentify(String appCode,String imgFile,Boolean isFace,String type) {
        if(StringUtil.isEmpty(appCode)){
            appCode= OrcHttpConstant.OCR_APPCODE;
        }
        String method = OrcHttpConstant.MONTH;
        switch (type) {
            //驾驶证
            case "1":
                return getDriverLicenseInfo(appCode, imgFile, isFace,method);
            //行驶证
            case "2":
                return getVehicleInfo(appCode, imgFile,isFace,method);
            //营业执照
            case "3":
                return getBusinessLicenseInfo(appCode, imgFile,method);
            //身份证
            case "4":
                return getIdcardInfo(appCode, imgFile,method,isFace);
            //增值税发票
            case "5":
                return getCustomizeInfo(appCode,imgFile,method);
            default:
                return null;
        }
    }

    /**
     * 驾驶证识别
     * flag(true:正面;false反面)
     * @param imgUrl
     *
     */
    public static JSONObject getDriverLicenseInfo(String appcode, String imgUrl,Boolean flag,String method) {
        //String host = "https://dm-52.data.aliyun.com";
        String host = OrcHttpConstant.DRIVER_LICENSE_HOST;
        // String path = "/rest/160601/ocr/ocr_driver_license.json";
        String path = OrcHttpConstant.DRIVER_LICENSE_PATH;
        JSONObject configObj = new JSONObject();
        if(flag){
            configObj.put("side", "face");
        }else {
            configObj.put("side", "back");
        }
        String config_str = configObj.toString();
        Map<String, String> headers = new HashMap<String, String>();
        headers.put("Authorization", "APPCODE " + appcode);
        Map<String, String> querys = new HashMap<String, String>();
        // 对图像进行base64编码
        String imgBase64 = img_base64(imgUrl);
        //如果文档的输入中含有inputs字段,设置为True, 否则设置为False
        Boolean is_old_format = false;
        // 拼装请求body的json字符串
        JSONObject requestObj = new JSONObject();
        try {
            requestObj.put("image", imgBase64);
            if(config_str.length() > 0) {
                requestObj.put("configure", config_str);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        String bodys = requestObj.toString();
        log.info("body:"+bodys);
        return dealReauest(host,path,method,headers,querys,bodys);
    }


    /**
     * 行驶证识别
     * flag(true:正面;false反面)
     * @param imgUrl(反面)
     */
    public static JSONObject getVehicleInfo(String appcode,String imgUrl,Boolean flag,String method) {
       /* String host = "https://dm-53.data.aliyun.com";
        String path = "/rest/160601/ocr/ocr_vehicle.json";*/
        String host = OrcHttpConstant.VEHICLE_LICENSE_HOST;
        String path = OrcHttpConstant.VEHICLE_LICENSE_PATH;
        JSONObject configObj = new JSONObject();
        if(flag){
            configObj.put("side", "face");
        }else {
            configObj.put("side", "back");
        }
        String config_str = configObj.toString();
        Map<String, String> headers = new HashMap<String, String>();
        headers.put("Authorization", "APPCODE " + appcode);
        Map<String, String> querys = new HashMap<String, String>();
        // 对图像进行base64编码
        String imgBase64 = getImgBase64(imgUrl);
        //如果文档的输入中含有inputs字段,设置为True, 否则设置为False
        Boolean is_old_format = false;
        // 拼装请求body的json字符串
        JSONObject requestObj = new JSONObject();
        try {
            if(is_old_format) {
                JSONObject obj = new JSONObject();
                obj.put("image", imgBase64);
                if(config_str.length() > 0) {
                    obj.put("configure", 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();
        return dealReauest(host,path,method,headers,querys,bodys);
    }


    /**
     *  营业执照识别
     *  @param imgUrl
     *  @return
     */
    public static JSONObject getBusinessLicenseInfo(String appcode,String imgUrl,String method) {
       /* String host = "https://dm-58.data.aliyun.com";
        String path = "/rest/160601/ocr/ocr_business_license.json";*/
        String host = OrcHttpConstant.BUSINESS_LICENSE_HOST;
        String path = OrcHttpConstant.BUSINESS_LICENSE_PATH;
        Map<String, String> headers = new HashMap<String, String>();
        headers.put("Authorization", "APPCODE " + appcode);
        headers.put("Content-Type", "application/json; charset=UTF-8");
        Map<String, String> querys = new HashMap<String, String>();
        String imgBase64 = getImgBase64(imgUrl);
        if(imgBase64 == null) {
            return null;
        }
        //拼接请求体
        String bodys =  "{\"image\":\""+imgBase64+"\"}";
        return dealReauest(host,path,method,headers,querys,bodys);
    }


    /**
     * 身份证正反面识别
     * @param appcode 识别码,
     * @param imgUrl 需要识别的文件路径
     * @param method 调用方式
     * @param flag (true:正面;false反面)
     * @return
     */
    public static JSONObject getIdcardInfo(String appcode,String imgUrl,String method,Boolean flag) {
      /*  String host = "http://dm-51.data.aliyun.com";
        String path = "/rest/160601/ocr/ocr_idcard.json";*/
        String host = OrcHttpConstant.ID_CARD_HOST;
        String path = OrcHttpConstant.ID_CARD_PATH;
        JSONObject configObj = new JSONObject();
        if(flag){
            //脸部面
            configObj.put("side", "face");
        }else {
            //国徽
            configObj.put("side", "back");
        }
        String config_str = configObj.toString();
        Map<String, String> headers = new HashMap<String, String>();
        headers.put("Authorization", "APPCODE " + appcode);
        Map<String, String> querys = new HashMap<String, String>();
        // 对图像进行base64编码
        String imgBase64 = img_base64(imgUrl);
        //如果文档的输入中含有inputs字段,设置为True, 否则设置为False
        Boolean is_old_format = false;
        // 拼装请求body的json字符串
        JSONObject requestObj = new JSONObject();
        try {
            if(is_old_format) {
                JSONObject obj = new JSONObject();
                obj.put("image", imgBase64);
                if(config_str.length() > 0) {
                    obj.put("configure", 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();
        return dealReauest(host,path,method,headers,querys,bodys);
    }


    /**
     *
     *
     * @param: [host, path, method, appCode, imgFile]
     * @param: [调用url, 调用路径, 调用方式, 识别码, 需要识别的文件路径]
     * @return: dadao.base.String
     * @author: Mr luo
     * @date: 2023/7/13 15:01
     */
    /**
     * 发票识别
     * @param appCode 识别码,
     * @param imgFile 需要识别的文件路径
     * @param method 调用方式
     * @return
     */
    private static JSONObject getCustomizeInfo(String appCode,String imgFile,String method) {
        String host = OrcHttpConstant.INVOICE_LICENSE_HOST;
        String path = OrcHttpConstant.INVOICE_LICENSE_PATH;
        Map<String, String> headers = new HashMap<>();
        headers.put("Authorization", "APPCODE " + appCode);
        headers.put("Content-Type", "application/json; charset=UTF-8");
        Map<String, String> querys = new HashMap<>();
        String imgBase64 = img_base64(imgFile);
        if (imgBase64 == null) {
            return null;
        }
        String bodys = "{\"img\":\"" + imgBase64 + "\",\"url\":\"\"}";
        return dealReauest(host,path,method,headers,querys,bodys);
    }

    /**
     * 根据图片路径,获取图片的Base64编码(按照网络图片)
     * @param
     * @return
     */
    public static String getImgBase64(String imgUrl)  {
        URL url = null;
        try {
            log.info("imgUrl路径:"+ imgUrl);
            url = new URL(imgUrl);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        //将图片文件转化为字节数组字符串,并对其进行Base64编码处理
        //打开链接
        HttpURLConnection conn = null;
        InputStream inStream = null;
        String base64 = "";
        try {
            conn = (HttpURLConnection) url.openConnection();
            //设置请求方式为"GET"
            conn.setRequestMethod("GET");
            //超时响应时间为5秒
            conn.setConnectTimeout(5 * 1000);
            //通过输入流获取图片数据
            inStream = conn.getInputStream();
            //得到图片的二进制数据,以二进制封装得到数据,具有通用性
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
            //创建一个Buffer字符串
            byte[] buffer = new byte[1024];
            //每次读取的字符串长度,如果为-1,代表全部读取完毕
            int len = 0;
            //使用一个输入流从buffer里把数据读取出来
            while ((len = inStream.read(buffer)) != -1) {
                //用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
                outStream.write(buffer, 0, len);
            }
            byte[] data = outStream.toByteArray();
            //对字节数组Base64编码
            BASE64Encoder encoder = new BASE64Encoder();
            base64 = encoder.encode(data);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭输入流
            try {
                inStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return base64;
        }
    }

    public static String img_base64(String path) {
        /**
         *  对path进行判断,如果是本地文件就二进制读取并base64编码,如果是url,则返回
         */
        String imgBase64="";
        if (path.startsWith("http")){
            log.info("imgUrl网络地址路径:"+ path);
            imgBase64= getImgBase64(path);
        }else {
            try {
                File file = new File(path);
                byte[] content = new byte[(int) file.length()];
                FileInputStream finputstream = new FileInputStream(file);
                finputstream.read(content);
                finputstream.close();
                imgBase64 = new String(Base64.encodeBase64(content));
            } catch (IOException e) {
                e.printStackTrace();
                return imgBase64;
            }
        }

        return imgBase64;
    }

    /**
     * 识别方法 向阿里云发送请求
     * @param host 调用url
     * @param path 调用路径
     * @param method 调用方式
     * @param headers 请求头
     * @param querys 查询条件
     * @param bodys 参数体
     * @return
     */
    private static JSONObject dealReauest( String host,String path,String method, Map<String, String> headers, Map<String, String> querys,String bodys){
        JSONObject jsonObject = new JSONObject();
        try {
            HttpResponse response = AliHttpUtils.doPost(host, path, method, headers, querys, bodys);
            log.info("返回结果response:"+response.toString());
            int stat = response.getStatusLine().getStatusCode();
            if(stat != 200){
                return null;
            }
            String res = EntityUtils.toString(response.getEntity());
            log.info("识别结果:"+res);
            jsonObject = JSON.parseObject(res);
            jsonObject.put("success",1);
            return jsonObject;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }finally {
            return jsonObject;
        }
    }

到了这里,关于阿里云OCR识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【实操】Java+百度ocr,实现图片识别文字小工具

    图片识别文字,咱用java也可以 通过 java+百度ocr ,实现一个截图或上传图片, 图片识别文字的小工具 。并通过 exe4j工具 将jar包封装成exe可执行桌面文件,方便使用及学习。 一位特别的老友即将 在2023年10月26日 年满 30周岁 ,愿 平安喜乐 公众号:【JavaDog程序狗】 关注公众号

    2024年02月08日
    浏览(45)
  • java使用tesseract-ocr进行文字识别

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 公司使用AI进行OCR文字识别效果不好,并且提供的服务不稳定,本次查找到使用java也能连接的OCR开源项目进行识别的学习 tesseract-ocr是一个开源的OCR文字识别项目,目前版本已经更新到5.X.X了,并且提供

    2024年02月04日
    浏览(40)
  • Java调用tess4j完成 OCR 文字识别

    1,新建 maven 工程 2,引入依赖 dependency         groupIdnet.sourceforge.tess4j/groupId         artifactIdtess4j/artifactId         version5.11.0/version     /dependency 3,安装 tesseract-ocr 下载地址https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-5.3.3.20231005.exe 其他版本可以查看 https://digi.bi

    2024年04月25日
    浏览(34)
  • Java也能做OCR!SpringBoot 整合 Tess4J 实现图片文字识别

    先简单给没听过的xdm解释下,这里要分清楚Tesseract和Tess4j的区别。 Tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统

    2024年02月04日
    浏览(35)
  • 完全离线的OCR图片转文字识别工具Umi-OCR

    OCR图片转文字识别软件,完全离线。截屏/批量导入图片,支持多国语言、合并段落、竖排文字。可排除水印区域,提取干净的文本。基于 PaddleOCR 。 免费:本项目所有代码开源,完全免费。 方便:解压即用,离线运行,无需网络。 批量:可批量导入处理图片,结果保存到本

    2024年02月03日
    浏览(78)
  • 阿里云OCR如何接入iOS

    阿里云OCR服务在iOS端的接入步骤概括如下: 创建阿里云账号并开通OCR服务:首先登录阿里云官网,注册并创建账号,然后在产品列表中找到“智能视觉-文字识别”服务并进行开通。 获取AccessKey和AccessSecret:在阿里云控制台的“访问控制(RAM)”创建一个AccessKey,并获取对应

    2024年01月24日
    浏览(36)
  • [C#]调用tesseact-ocr的traineddata模型进行ocr文字识别

    【框架地址】 https://github.com/charlesw/tesseract 【算法介绍】 Tesseract OCR是一个开源的光学字符识别引擎,它可以将图像中的文字转换成可编辑和可搜索的文本格式。Tesseract由惠普实验室于1985年开始开发,并在2005年被Google收购后成为了开源项目。自那时起,它一直在不断的更新和

    2024年02月02日
    浏览(42)
  • OCR文字识别技术

    OCR全称是optical character recognition,中文光学字符识别。 主要技术是:把图像形状转变为文本字符。 简单来说,OCR技术就是通过图像处理和模式识别技术对光学的字符进行识别,即,对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程。 OCR 支持各

    2024年02月08日
    浏览(41)
  • 离线视频ocr识别

    windows安装方法: 下载安装 https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-5.3.3.20231005.exe 下载 去掉版本依赖,修改如下: 之后安装 如果遇到 RuntimeError: Failed to init API, possibly an invalid tessdata path: ./ 则需要设置环境变量TESSDATA_PREFIX为C:Program FilesTesseract-OCRtessdata 默认只能

    2024年02月03日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包