2026/6/9 12:22:29
网站建设
项目流程
北京网站设计外包公司价格,个人小白如何做手游代理,中国与俄罗斯最新局势,免费域名服务小白也能跑通华为云OCR#xff1a;手把手整合 Hutool 与华为云签名 SDK 并解决依赖难题如果你喜欢我的回答或想获取更多有趣、有用的内容#xff0c;
欢迎关注微信公众号#xff1a;云技纵横 #xff0c;
这样就能及时看到我的更新啦#xff5e; #x1f60a; 你的支持是…小白也能跑通华为云OCR手把手整合 Hutool 与华为云签名 SDK 并解决依赖难题如果你喜欢我的回答或想获取更多有趣、有用的内容欢迎关注微信公众号云技纵横 这样就能及时看到我的更新啦 你的支持是我前进的动力一、两种调用方式总览方式A 官方通用 SDK推荐长期可维护使用华为云官方Java SDKhuaweicloud-sdk-ocr通过AK/SK认证支持设置Region/Endpoint、代理、超时、SSL 等异常体系完善适合生产环境。方式B 签名 SDK Hutool你当前写法使用华为云网关签名 SDK 的Client.sign对请求签名配合Hutool/HttpClient发送表单请求灵活可控但需自行解决签名 JAR 的依赖托管。二、方式A 官方通用 SDK 完整示例推荐适用场景通用 OCR、表格、票据、证件等依赖少、升级方便、可维护性强。Maven 依赖示例版本可按需升级dependencies!-- 华为云 OCR SDK --dependencygroupIdcom.huaweicloud/groupIdartifactIdhuaweicloud-sdk-ocr/artifactIdversion3.1.12/version/dependency!-- JSON 工具可选 --dependencygroupIdcn.hutool/groupIdartifactIdhutool-json/artifactIdversion5.8.22/version/dependency/dependencies读取图片为 Base64 的工具方法publicclassBase64Util{publicstaticStringimageToBase64(StringimgPath)throwsException{byte[]bytesFiles.readAllBytes(Paths.get(imgPath));returnBase64.getEncoder().encodeToString(bytes);}}调用通用 OCR 表格识别RecognizeGeneralTable并抽取关键字段publicclassOcrOfficialSdkDemo{// 建议通过环境变量读取HUAWEICLOUD_SDK_AK / HUAWEICLOUD_SDK_SKprivatestaticfinalStringAKSystem.getenv(HUAWEICLOUD_SDK_AK);privatestaticfinalStringSKSystem.getenv(HUAWEICLOUD_SDK_SK);// 区域如 cn-north-4也可改为 endpoint 方式privatestaticfinalStringREGIONcn-north-4;publicstaticvoidmain(String[]args){try{// 1) 读取图片 Base64StringimgBase64Base64Util.imageToBase64(D:/tmp/demo.png);// 2) 认证与客户端BasicCredentialscrednewBasicCredentials().withAk(AK).withSk(SK);// 如使用永久 AK/SK部分场景需填写 projectId按控制台指引获取// cred.withProjectId(your-project-id);HttpConfigconfigHttpConfig.getDefaultHttpConfig().withTimeout(60);// 可按需调整OcrClientclientOcrClient.newBuilder().withHttpConfig(config).withCredential(cred).withRegion(OcrRegion.valueOf(REGION)).build();// 3) 组装请求以表格识别为例支持图片URL或Base64RecognizeGeneralTableRequestreqnewRecognizeGeneralTableRequest();GeneralTableRequestBodybodynewGeneralTableRequestBody()// .withUrl(https://your-obs-url/xxx.png) // 也可传 URL.withImageBase64(imgBase64);req.withBody(body);// 4) 发送请求RecognizeGeneralTableResponserespclient.recognizeGeneralTable(req);System.out.println(OCR 调用成功\nresp.toString());// 5) 业务字段抽取示例按实际接口返回结构调整// 通用表格接口返回结构不同请参考控制台 API 文档解析// MapString, Object result resp.getResult();// String tableStr JSONUtil.toJsonStr(result);// System.out.println(抽取结果\n tableStr);}catch(ConnectionException|RequestTimeoutExceptione){System.err.println(网络类异常e.getMessage());}catch(ServiceResponseExceptione){System.err.println(服务响应异常);System.err.println(HTTP状态码e.getHttpStatusCode());System.err.println(错误码e.getErrorCode());System.err.println(错误信息e.getErrorMsg());}}}说明认证支持永久 AK/SK或临时 AK/SK SecurityToken客户端可指定Region或Endpoint可配置代理/超时/SSL异常分为连接类与响应类便于定位问题。三、方式B 签名 SDK Hutool 完整示例当前写法含依赖安装脚本适用场景必须使用网关签名 SDK如某些联营/专享环境。安装签名 SDK 到本地或私有仓库只需一次# 将 java-sdk-core-3.2.4.jar 放到当前目录后执行mvn install:install-file\-Dfilejava-sdk-core-3.2.4.jar\-DgroupIdcom.huaweicloud.apigateway\-DartifactIdjava-sdk-core\-Dversion3.2.4\-DpackagingjarMaven 依赖示例dependencies!-- Hutool 工具 --dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.8.22/version/dependency!-- Apache HttpClient --dependencygroupIdorg.apache.httpcomponents/groupIdartifactIdhttpclient/artifactIdversion4.5.14/version/dependency!-- 华为云网关签名 SDK已本地安装或私有仓库托管 --dependencygroupIdcom.huaweicloud.apigateway/groupIdartifactIdjava-sdk-core/artifactIdversion3.2.4/version/dependency/dependencies工具类publicclassHuaweiCloudOcr{publicHashMapString,StringidentifyWaybill(StringimgBase64)throwsException{RequestrequestnewRequest();request.setKey(appKey);request.setSecret(appSecret);request.setMethod(POST);request.setUrl(https://jmexpressbill.apistore.huaweicloud.com/ocr/express-bill);request.addHeader(Content-Type,application/x-www-form-urlencoded);StringencodeURLUtil.encodeAll(imgBase64);request.setBody(base64encode);HttpRequestBasesignedRequestClient.sign(request);// 发送请求try(CloseableHttpClientclientHttpClients.createDefault();CloseableHttpResponserespclient.execute(signedRequest)){intstatusresp.getStatusLine().getStatusCode();if(status!200){Stringbodyresp.getEntity()null?:EntityUtils.toString(resp.getEntity(),UTF-8);log.error(OCR识别失败HTTP状态码{}响应{},status,body);thrownewRuntimeException(OCR识别运单失败HTTP status);}HttpEntityentityresp.getEntity();if(entitynull)thrownewRuntimeException(OCR响应体为空);StringrespStrEntityUtils.toString(entity,UTF-8);JSONObjectjsonJSONUtil.parseObj(respStr);intcodejson.getInt(code,-1);Stringmsgjson.getStr(msg,未知错误);}}}说明表单字段名必须为base64对 Base64 做URL 编码更稳妥签名前后请求方法、URL、Headers、Body 必须保持一致建议统一用UTF-8解析响应。四、常见问题与排查清单依赖找不到签名 SDK 未发布到公共仓库时先本地安装install:install-file或上传到私有仓库确保groupId/artifactId/version与代码一致必要时清理~/.m2/repository后重试。403/签名失败核对appKey/appSecret确认请求方法、URL、Headers、Body 与签名前完全一致确认Base64 已 URL 编码检查系统时间偏差部分签名算法依赖时间。返回非 200打印完整请求与响应含 Headers/Body核对Content-Type: application/x-www-form-urlencoded确认字段名为base64图片过大时按接口限制压缩或改用 URL 传图若支持。图片过大或格式不符优先压缩至接口支持范围确认格式为常见类型如 JPG/PNG必要时先上传到OBS获取临时 URL 再识别部分接口支持 URL 方式。