PaddleOCR的Restful API服务部属
PaddleOCR——Docker环境下基于HubServing模式部署Restful API服务(CPU版本)
Maven
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR8</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--Hutool: A set of tools that keep Java sweet.-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.8</version>
</dependency>
</dependencies>
解决方案
OpenFeign调用接口
@FeignClient(name="OCRService", url="127.0.0.1:8866")
public interface IOCRService {
@RequestMapping(value = "/predict/ocr_system",method = RequestMethod.POST)
Object ocr(ImageDTO images);
}
接口参数DTO封装
@Data
public class ImageDTO {
private List<String> images;
}
Controller
@RestController
public class OCRController {
private final IOCRService iocrService;
public OCRController(IOCRService iocrService) {
this.iocrService = iocrService;
}
@RequestMapping(value = "/ocr",method = {RequestMethod.POST})
public Object ocr(MultipartFile[] file){
try {
String s =ImageBase64Encoder.encode(file[0].getInputStream());
List<String> list = new ArrayList<>();
list.add(s);
ImageDTO dto= new ImageDTO();
dto.setImages(list);
return iocrService.ocr(dto);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
工具类:
import cn.hutool.core.codec.Base64Encoder; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Objects; /** * 图片Base64编码 */ public class ImageBase64Encoder { /** * 将图片转为Base64编码字符串 * @param imgPath 图片路径 * @return Base64编码字符串 */ public static String encode(String imgPath) throws FileNotFoundException { return encode(new FileInputStream(imgPath)); } /** * 将图片转为Base64编码字符串 * @param in 图片输入流 * @return Base64编码字符串 */ public static String encode(InputStream in) { byte[] data = null; // 读取图片字节数组 try { data = new byte[in.available()]; int res = in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } /* *对字节数组Base64编码 *返回Base64编码过的字节数组字符串; */ return Base64Encoder.encode(Objects.requireNonNull(data)); } }