百度OCR识别图片文本字符串——物联网上位机软件

一、开发背景

根据项目需求,我们需要完成LED显示屏实时显示歌词的效果。最优的方法是调用歌曲播放器的API获取歌词,但是由于这个开发资格不是很好申请,因此我们采用其他方案,即通过OCR识别获取歌词,并投射到LED显示屏上。本项目使用IDEA开发。

本文将跳过对歌词的截图以及后续将文本投射到LED显示屏的代码,下文将主要介绍如何调用百度OCR文字识别的API接口,并将识别的文本打印出来。

二、具体实现

首先,登录百度开发者中心,进行实名认证后,创建应用程序。

API开发文档:通用文字识别(标准版)

根据开发文档,首先我们需要从本地读取图片,并进行Base64编码与URLencode.

java 复制代码
 // 读取图片文件为字节数组
File file = new File("D:\\Led_Display\\screenshot.png");
byte[] imageBytes = new byte[0];
try {
    imageBytes = Files.readAllBytes(file.toPath());
} catch (IOException e) {
    throw new RuntimeException(e);
}
// 将字节数组转换为base64编码的字符串
String base64String = Base64.getEncoder().encodeToString(imageBytes);
// 将base64编码的字符串进行urlencode
encodedString=null;//清空
try {
    encodedString = URLEncoder.encode(base64String, "UTF-8");
} catch (UnsupportedEncodingException e) {
        throw new RuntimeException(e);
}
// 打印结果
System.out.println("Base64编码后图片:"+encodedString);

在JAVA中,我们需要先创建一个HttpClient对象和HttpRequest对象,这将用于封装和发送请求,并在request对象中带入上面编码的图片信息。

java 复制代码
request = HttpRequest.newBuilder()
        // 设置请求的URL,其中access_token是通过API Key和Secret Key获取的
        .uri(URI.create("https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=???"))
        // 设置请求的Header,Content-Type为application/x-www-form-urlencoded
        .header("Content-Type", "application/x-www-form-urlencoded")
        // 设置请求的Body,image参数为encodedString
        .POST(HttpRequest.BodyPublishers.ofString("image=" + encodedString))
        .build();

发送请求,并获取HttpResponse对象,此处我们需要捕捉异常。

java 复制代码
// 发送HttpPost对象,并获取HttpResponse对象
HttpResponse<String> response = null;
try {
    response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
} catch (IOException e) {
    throw new RuntimeException(e);
} catch (InterruptedException e) {
    throw new RuntimeException(e);
}

根据开发文档,获取返回状态码等信息,并提取出我们需要的信息打印输出。

java 复制代码
// 获取响应状态码
int statusCode = response.statusCode();
// 获取响应体内容
String body = response.body();
// 打印结果
System.out.println("请求状态编码: " + statusCode);
System.out.println("响应Body: " + body);
if(statusCode!=200)
    return "";
else
{
    JsonParser jsonParser=new JsonParser();
    JsonObject jsonObject= (JsonObject) jsonParser.parse(body);
    JsonArray words_result = jsonObject.getAsJsonArray("words_result");
    if(words_result.size()>=1) {
        JsonObject json = (JsonObject) jsonParser.parse(words_result.get(0).toString());
        System.out.println("解析到的文本为:" + json.get("words").toString());
        System.out.println("OCR功能测试正常");
        return json.get("words").toString();
    }
    else {
        System.out.println("OCR未识别到任何文本");
        return "";
    }
}

三、运行测试

打开音乐播放器,查看运行效果。

不难看到,我们已经成功识别了相关文本,下一步只需要调用LED显示屏的开发文档将文字发送到显示屏即可。

注意,上述代码中的APIToken应该动态获取,本文未提及,具体可查看:鉴权认证机制

相关推荐
小僧景贤8 小时前
单片机全方位调试实战指南:串口/RTT/逻辑分析仪/示波器/内核排错分层避坑教程
单片机·嵌入式硬件·物联网
汤姆yu14 小时前
基于ESP32的玫瑰大棚智能系统
物联网·esp32·arduino·大棚温湿度
星空真迷人14 小时前
嵌入式鸿蒙并非精简版,核心究竟是什么?
stm32·单片机·嵌入式硬件·物联网·华为·harmonyos·iot
hongmai66688814 小时前
GK7205V300芯片深度解析:H.265低功耗视觉主控,助力安防监控高效选型
arm开发·嵌入式硬件·物联网·智能家居·h.265·risc-v
微硬创新15 小时前
耐达讯自动化:16路4-20mA模拟信号,该怎样平稳接入PROFINET控制系统?
人工智能·物联网·网络协议·自动化·信息与通信
云边云科技_云网融合15 小时前
金融医疗混合云组网如何满足数据安全与合规要求?
大数据·人工智能·物联网
mengpp_12345617 小时前
物联网云平台可以离线使用吗?摒弃云端依赖,工业现场离线自动化解决方案
运维·物联网·自动化·华为云
武汉唯众智创18 小时前
高职物联网应用技术专业实训室怎么建?嵌入式开发实训室建设方案详解
物联网·物联网实训室·物联网嵌入式实训室·物联网实训室解决方案
星恒讯工业路由器18 小时前
2G/3G网络退网趋势解读:对工业物联网设备的影响与应对策略
物联网·信息与通信·工业物联网·工业通信·5g redcap·2g3g退网·4g/5g升级
科莱特SAP19 小时前
精准匹配双向赋能:科莱特数智人才猎场重塑数字化人才服务模式
大数据·人工智能·物联网·人力资源·科莱特·科莱特人才服务