服务端调用微信小程序OCR识别接口实现(上)

简介: 服务端调用微信小程序OCR识别接口实现

一 开发环境

后端语言 java

技术工具框架 springboot

二 实现目的

本demo适用于快速服务端调用微信小程序OCR接口实现,以行驶证接口为例

包括

  1. 图片上传
  2. 调用微信小程序接口实现OCR识别
  3. swagger3 集成调用 去除不必要的 - - 简单实用,详细查看openapi文档

三 Demo上线

  1. 搭建我们的基础环境

目录结构如下
image.png

  • pom文件配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.7.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.example</groupId>
  <artifactId>demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>demo</name>
  <description>Demo project for Spring Boot</description>
  <properties>
    <java.version>1.8</java.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
      <version>2.1.1.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-ribbon -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
      <version>2.1.1.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <!-- fastjson -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.59</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>
  • 集成swagger3

官网下载swagger,将dist目录放入Resource-static下,修改dist为swagger3

打开目录下index.html,修改为

 const ui = SwaggerUIBundle({
        url: "swagger.json",
        dom_id: '#swagger-ui',
        deepLinking: true,
        presets: [
          SwaggerUIBundle.presets.apis,
          SwaggerUIStandalonePreset
        ],
        plugins: [
          SwaggerUIBundle.plugins.DownloadUrl
        ],
        layout: "StandaloneLayout"
      })
      // End Swagger UI call region
      window.ui = ui

官网打开https://petstore.swagger.io/v...,模板json,保存放到swagger3目录下,修改内容

{
  "swagger": "2.0",
  "info": {
    "title": "小程序服务端demo",
    "description": "本文档为,小程序服务端接口描述文档swagger页面",
    "version": "1.0.0"
  },
  "tags": [
    {
      "name": "小程序后端服务",
      "description": "此服务提供小程序访问后端系统的业务实现."
    }
  ],
  "schemes": [
    "http"
  ],
  "paths": {
    "/api/vehicle/upload-vehicle": {
      "post": {
        "tags": [
          "小程序后端服务"
        ],
        "summary": "行驶证照片上传接口",
        "description": "行驶证照片上传接口",
        "operationId": "uploadFile",
        "consumes": [
          "multipart/form-data"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "file",
            "in": "formData",
            "description": "行驶证照片",
            "required": true,
            "type": "file"
          }
        ],
        "responses": {
          "200": {
            "description": "successful operation",
            "schema": {
              "$ref": "#/definitions/RestControllerResult"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "RestControllerResult": {
      "type": "object",
      "properties": {
        "success": {
          "type": "boolean",
          "description": "成功与否",
          "default": false
        },
        "code": {
          "type": "integer",
          "description": "响应码",
          "format": "int64"
        },
        "infoMsgs": {
          "type": "array",
          "xml": {
            "name": "infoMsgs",
            "wrapped": true
          },
          "items": {
            "type": "string",
            "description": "信息"
          }
        },
        "warningMsgs": {
          "type": "array",
          "xml": {
            "name": "warningMsgs",
            "wrapped": true
          },
          "items": {
            "type": "string",
            "description": "警告信息"
          }
        },
        "errorMsg": {
          "type": "string",
          "description": "错误信息"
        },
        "data": {
          "type": "object"
        }
      },
      "xml": {
        "name": "RestControllerResult"
      }
    }
  }
}
  • application启动类添加Feign调用注解
@SpringBootApplication
@EnableFeignClients
public class DemoApplication {
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}
  • 配置全局文件 application.yml (properties修改为yml即可)
#服务配置
server:
  port: 8890
  compression:
    enabled: true
  max-http-header-size: 10000000
spring:
  application:
    name: ocr-demo
#外部调用
app:
  vehicle: "https://api.weixin.qq.com"

至此,我们的基础环境细致的讲解完毕,且完整基础环境搭建完整,骚年们,开始代码!!!!

1.通用返回dto编写

package com.example.demo.common.dto;
import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
/**
 * 通用接口返回结果.
 *
 * @author : 小隐乐乐
 * @since : 2020/6/9 9:44
 */
public class RestControllerResult<T> implements Serializable {
  private static final long serialVersionUID = -3698136820012767666L;
  private Boolean success;
  private Integer code;
  private List<String> infoMsgs = new LinkedList<>();
  private List<String> warningMsgs = new LinkedList<>();
  private String errorMsg;
  private T data;
  public RestControllerResult() {
  }
  public RestControllerResult(T t) {
    this.data = t;
  }
  public Boolean getSuccess() {
    return this.success;
  }
  public void setSuccess(Boolean success) {
    this.success = success;
  }
  public Integer getCode() {
    return this.code;
  }
  public void setCode(int code) {
    this.code = code;
  }
  public List<String> getInfoMsgs() {
    return this.infoMsgs;
  }
  public void setInfoMsgs(List<String> infoMsgs) {
    this.infoMsgs = infoMsgs;
  }
  public List<String> getWarningMsgs() {
    return this.warningMsgs;
  }
  public void setWarningMsgs(List<String> warningMsgs) {
    this.warningMsgs = warningMsgs;
  }
  public String getErrorMsg() {
    return this.errorMsg;
  }
  public void setErrorMsg(String errorMsg) {
    this.errorMsg = errorMsg;
  }
  public T getData() {
    return this.data;
  }
  public void setData(T data) {
    this.data = data;
  }
  public static <T> RestControllerResult<T> success(T data) {
    RestControllerResult result = new RestControllerResult(data);
    result.setSuccess(true);
    return result;
  }
  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    } else if (o != null && this.getClass() == o.getClass()) {
      RestControllerResult<?> that = (RestControllerResult) o;
      return this.code.equals(that.code) && Objects.equals(this.success, that.success) && Objects
          .equals(this.infoMsgs, that.infoMsgs) && Objects
          .equals(this.warningMsgs, that.warningMsgs) && Objects
          .equals(this.errorMsg, that.errorMsg) && Objects.equals(this.data, that.data);
    } else {
      return false;
    }
  }
  @Override
  public int hashCode() {
    return Objects.hash(
        new Object[]{this.success, this.code, this.infoMsgs, this.warningMsgs, this.errorMsg,
            this.data});
  }
  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder("RestControllerResult{");
    sb.append("success=").append(this.success);
    sb.append(", code=").append(this.code);
    sb.append(", infoMsgs=").append(this.infoMsgs);
    sb.append(", warningMsgs=").append(this.warningMsgs);
    sb.append(", errorMsg='").append(this.errorMsg).append('\'');
    sb.append(", data=").append(this.data);
    sb.append('}');
    return sb.toString();
  }
}
目录
相关文章
|
9天前
|
文字识别 API 开发工具
印刷文字识别产品使用合集之如何获取到识别结果
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
8天前
|
文字识别 API
印刷文字识别操作报错合集之用body传inputStream识别 报illegalImageContent,是什么原因
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
8天前
|
JSON 文字识别 API
印刷文字识别操作报错合集之识别过程中,报错464是什么原因
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
8天前
|
文字识别 API PHP
印刷文字识别操作报错合集之识别过程中,报错463是什么原因
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
9天前
|
JSON 文字识别 API
印刷文字识别操作报错合集之在识别过程中报错403,是什么原因
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
9天前
|
文字识别 开发工具 数据安全/隐私保护
印刷文字识别产品使用合集之可以识别一张电子发票有多页(多张图片,或者一个PDF文件)的这种发票吗
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
9天前
|
文字识别
印刷文字识别产品使用合集之 识别营业执照时,如果企业名称中有中英文括号,请问是统一转换为英文括号返回还是按实际的括号类型返回
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
9天前
|
文字识别 自然语言处理 开发工具
印刷文字识别产品使用合集之OCR统一识别功能已开通,响应为200但没有content信息,是什么原因
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
9天前
|
人工智能 文字识别 达摩院
印刷文字识别产品使用合集之身份证是如何识别的
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
9天前
|
文字识别
印刷文字识别产品使用合集之可以支持对哪些类型的票据进行识别支持数电发票的ocr识别吗
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。

热门文章

最新文章