Android文字识别-阿里云OCR调用

news2024/10/1 9:47:28

0,阿里云OCR有在线识别接口,直接用httpPOST调用就能实现,开发起来很快捷。识别率还蛮好,摄像头斜着拍也能识别出来。实测识别时间单次在2s左右,普通使用使能满足需求的。

1,在阿里云页面先注册申请免费试用测试,后续可以购买产品增加使用次数。

【通用OCR文字识别】- 通用文字识别/文字识别OCR/图像识别/图片识别文字/OCR识别【最新版】_OCR_人工智能_API-云市场-阿里云

2,申请完成后可以在服务页面找到自己的AppCode,这个代码要配置使用的,很重要。

3,上送的图片要求是BASE64编码的,bitmap的base64编码函数

    public static String bitmapToBase64(Bitmap bitmap) {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
        byte[] byteArray = byteArrayOutputStream.toByteArray();
        return Base64.encodeToString(byteArray, Base64.DEFAULT);
    }

4,OCR调用

public static void ocrOnline(String strPictureBase64) {
        String strRet = "";
        String host = "https://tysbgpu.market.alicloudapi.com";
        String path = "/api/predict/ocr_general";
        String method = "POST";
        String appcode = "自己的code";

        String bodys = "{\"image\":\"" + strPictureBase64 + "\",\"configure\":{\"output_prob\":true,\"output_keypoints\":false,\"skip_detection\":false,\"without_predicting_direction\":false}}";
        //Log.i("OCR", "bodys:" + bodys);

        String strURL = host + path; //请求地址
        Log.i("OCR", "strURL:" + strURL);

        try {
            // 创建URL对象
            URL url = new URL(strURL);

            // 创建HttpURLConnection对象
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            // 设置请求方法为POST
            conn.setRequestMethod(method);

            // 设置请求属性
            conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
            conn.setRequestProperty("Authorization", "APPCODE " + appcode);

            // 发送请求
            OutputStream os = conn.getOutputStream();
            os.write(bodys.getBytes(StandardCharsets.UTF_8));
            os.flush();
            os.close();

            // 处理服务器响应
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                strRet += line;
            }
            in.close();

            /*
                {
                    "request_id": "7879F05E-28F7-427B-8147-BB6A3957E9B4",
                    "ret": [{
                        "prob": 0.99,
                        "rect": {
                            "angle": 0,
                            "height": 121,
                            "left": 756,
                            "top": 1830,
                            "width": 1295
                        },
                        "word": "QZ729202308300001"
                    }],
                    "success": true
                }
              }
            */
            Log.i("OCR", "ret :" + strRet);
            JSONObject jsonObject = JSON.parseObject(strRet);
            if(jsonObject.getBooleanValue("success"))
            {
                JSONArray jsonArray = jsonObject.getJSONArray("ret");
                String str = jsonArray.getJSONObject(0).getString("word");
                Log.i("OCR", "str:" + str);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

5,在按钮响应函数不能直接调用ocrOnline,需要加个线程来调用,所以可以直接调用的接口是

    public static void callOCROnline(Bitmap bitmap)
    {
        new Thread(new Runnable() {
            @Override
            public void run() {
                ocrOnline(bitmapToBase64(bitmap));
            }
        }).start();
    }

5,结合手机后摄像头调用识别效果

摄像头调用请看下下篇。

新人入行,经验分享,如有所误,欢迎指出~

版权归属:深圳市琪智科技有限公司-花花

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/983683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工作失误合集,这个月的工资被扣没咯!

俗话说“马有失蹄,人有失足”,不管是程序员还是其他行业,在工作的的时候即便是职场老手也有失手的时候。 工作中出现纰漏不可避免,但是总有那么些人秀的即使是工作出错,也错的惊为天人。今天就带大家来看看那些在工作…

C语言嵌入式系统编程注意事项之内存操作

C语言嵌入式系统编程注意事项之内存操作 在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C以外的其它编程语言基本没有直接访问绝对地址的能力 数据指针 在嵌入式系统的编程中,常常要求在特…

04-JVM对象创建深度剖析

上一篇:03-JVM内存模型剖析与优化 对象创建的主要流程: 1.类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有…

别看了!亚马逊选品工具全都在这儿了(上)

Tool哥翻遍了全网资料,找了30款亚马逊选品工具,几乎囊括了各种主流、小众的选品工具,而且会一直更新,直接收藏就完事儿了~ Amztracker AMZ Tracker(抓客)官网 | 亚马逊关键词|亚马逊选品数据分析工具|亚马…

vue2.X 中使用 echarts5.4.0实现项目进度甘特图

vue2.X 中使用 echarts5.4.0实现项目进度甘特图 效果图&#xff1a; 左侧都是名称&#xff0c;上面是时间&#xff0c;当中的内容是日志内容 组件&#xff1a; gantt.vue <template><div id"main" style"width: 100%; height: 100%"></…

Lumion 和 Enscape 应该选择怎样的笔记本电脑?

Lumion 和 Enscape实时渲染对配置要求高&#xff0c;本地配置不够&#xff0c;如何快速解决&#xff1a; 本地普通电脑可一键申请高性能工作站&#xff0c;资产安全保障&#xff0c;供软件中心&#xff0c;各种软件插件一键获取&#xff0c;且即开即用&#xff0c;使用灵活&am…

电力4G变倍云台摄像头低功耗测试对比

4G变倍云台摄像头是一种智能化的视频监控摄像头设备。具有4G无线通信和无线网络摄像头的功能&#xff0c;同时还集成了变焦、变倍、云台等多种功能&#xff0c;适用于各种场景的视频监控。 以下是主要的特点和功能&#xff1a; 支持4G无线网络通信&#xff0c;远距离实时监控&…

1.3 BEV开源数据集介绍

本文来自自动驾驶之心知识星球的国内首个BEV感知全栈系列学习教程 文章目录 BEV开源数据集介绍&#xff1a;KITTIBEV开源数据集介绍&#xff1a;nuScenesBEV开源数据集介绍&#xff1a;Waymo BEV开源数据集介绍&#xff1a;KITTI 传感器位置 KITTI数据怎么采集&#xff1f; 通…

qt nodeeditor编译安装

目录 1. 下载源码 2. Qt creator编译源码 2.1 编译debug模式 &#xff08;MinGW&#xff09; 2.2 编译release模式 &#xff08;MinGW&#xff09; 1. 下载源码 https://github.com/paceholder/nodeeditor/archive/refs/tags/3.0.10.zip 2. Qt creator编译源码 解压文件…

面试中的身体语言:非语言信息的重要性

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

如何区分异动电动机和同步电动机

在日常的工作生活中&#xff0c;会遇到很多种不同类型的电动机&#xff0c;比如直流电机、步行电机和伺服电机等等。其中交流电机分为异动电动机和同步电动机两种&#xff0c;那么同步电动机和异步电动机到底有什么区别呢&#xff1f; 转速 同步电动机定子绕组三相电流所产生…

DragGAN应运而生,未来在4G视频上都可能利用拖拽式编辑

原创 | 文 BFT机器人 2023年8月14日-15日&#xff0c;第七届GAIR全球人工智能与机器人大会在新加坡乌节大酒店成功举办。 在「AIGC 和生成式内容」分论坛上&#xff0c;南洋理工大学科学与工程学院助理教授潘新钢以《Interacitve Point-Dragging Manipulation of Visual Cont…

kubernetes集群安装详细步骤

kubernetes集群安装详细步骤&#xff08;V1.20.6&#xff09; 本篇主要介绍kubernetes的1.20.6版本集群安装&#xff0c;废话不多说&#xff0c;直接看步骤&#xff1a; 1、安装环境介绍 主机节点&#xff1a; 主机操作系统&#xff1a;Centos7.9 配置&#xff1a; 内存建议…

引入Bootstrap的CSS样式后,<h>标签、<p>标签等HTML自带的标签被覆写没有?答:覆写了。

引入Bootstrap的CSS样式后,标签、 标签等HTML自带的标签被覆写没有&#xff1f;答&#xff1a;覆写了。 为什么这么说&#xff1f;证据呢&#xff1f; 写一个实例&#xff0c;然后调试模式看一下不就得了。 先看没有引入引入Bootstrap的CSS样式情况。 代码如下&#xff1a; …

二分查找实例1(在排序数组中查找元素的第一个和最后一个位置)

题目 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1&…

深入学习与探索:高级数据结构与复杂算法

文章目录 学习高级数据结构B树&#xff1a;数据库引擎的骨干线段树&#xff1a;高效的区间查询Trie树&#xff1a;高效的字符串检索 探索复杂算法领域图算法&#xff1a;解决复杂网络问题字符串匹配算法&#xff1a;处理文本搜索近似算法&#xff1a;在NP难题上取得近似解 结论…

聊聊Kafka的生产者消费者确认机制

一、生产者确认机制 消息从生产者客户端发送至broker服务端topic&#xff0c;需要ack确认。acks与min.insync.replicas是两个配置参数.其中acks是producer的配置参数&#xff0c;min.insync.replicas是Broker端的配置参数&#xff0c;这两个参数对于生产者不丢失数据起到了很大…

PMP证书续费是否真的有必要呢?(内附续证流程)

PMP项目管理专业人士资格认证是由项目管理协会&#xff08;Project Management Institute&#xff0c;简称PMI&#xff09;发起的。PMP作为世界级的项目管理认证证书&#xff0c;拥有着先进的项目管理知识体系&#xff0c;它严格评估项目管理人员知识技能是否具有高品质的资格认…

Android图片一直在另一张图的下边

因为之前开发的时候&#xff0c;头像设置了高度属性android:elevation"2px",导致同一父布局中另一张图一直就是显示在下方&#xff0c;如下图&#xff1a; 方法一&#xff1a;大家可以注意下也加上这个属性&#xff0c;这个属性值大于上边这个图的值就能在这张图的上…

KubeSphere Namespace 数据删除事故分析与解决全记录

作者&#xff1a;宇轩辞白&#xff0c;运维研发工程师&#xff0c;目前专注于云原生、Kubernetes、容器、Linux、运维自动化等领域。 前言 2023 年 7 月 23 日在项目上线前夕&#xff0c;K8s 生产环境出现故障&#xff0c;经过紧急修复之后&#xff0c;K8s 环境恢复正常&#…