【发布时间】:2019-11-14 19:18:58
【问题描述】:
我已将图像作为二进制数据存储在 Mongodb 中,无法对其执行 ocr。我尝试了两种不同的方式。
- 我被单独使用,@Getmapping+@Asyn 根据对象 ID 获取图像。
- 第二个被用作基于 Mongodb 的 Uri 的独立程序 [public static void main]。
两个案例都无法做到这一点。 有谁知道如何以正确的方式做到这一点?
public class User {
@Id
private String id;
private String name;
private Binary image;}} getters & setters , constructors
CONTROLLER [非常适合作为二进制数据上传图像和检索图像]
@PostMapping("/upload")
User createUser(@RequestParam String name, @RequestParam MultipartFile file) throws IOException
{ User user = new User();
user.setName(name);
user.setImage(new Binary(file.getBytes()));
return userRepository.save(user);
}
@GetMapping("/retrive")
String getImage(@RequestParam String id) {
Optional<User> user = userRepository.findById(id);
Encoder encoder = Base64.getEncoder();
return encoder.encodeToString(user.get().getImage().getData());
}
用于 OCR 的控制器 [结果在邮递员中显示 200 OK 但未执行来自 mongodb 的文本]
@Bean(name = "threadPoolTaskExecutor")
public Executor threadPoolTaskExecutor()
{ return new ThreadPoolTaskExecutor();
}
@Async("threadPoolTaskExecutor")
@GetMapping("/image")
public String asyncMethodWithConfiguredExecutor(@RequestParam String id)
{
System.out.println("Execute method" + Thread.currentThread().getId());
Optional<User> user = userRepository.findById(id);
ITesseract instance = new Tesseract();
try {
ByteArrayInputStream bais = new ByteArrayInputStream(user.get().getImage().getData());
BufferedImage bufferImg = ImageIO.read(bais);
String imgText = instance.doOCR(bufferImg);
return imgText;
}
catch (Exception e)
{
return "Error while reading image";
} }
2。 MAIN FUCTION [我的第二种方式-结果“ocr 无法读取的不受支持的图像”]
@SpringBootApplication
public class StackoverflowApplication
{
public static void main(String[] args) throws IOException
{
SpringApplication.run(StackoverflowApplication.class, args);
Mongo mongodb = new MongoClient("localhost", 27017);
DB db = mongodb.getDB("test-db");
DBCollection collection = db.getCollection("user");
File image = new File("mongodb://localhost:27017//test-db//user");
Tesseract tessInst = new Tesseract();
tessInst.setDatapath("C:\\Program Files (x86)\\Tesseract-OCR\\tessdata");
try {
String result= tessInst.doOCR(image);
System.out.println(result);
} catch (TesseractException a) {
System.err.println(a.getMessage());
} } }
【问题讨论】:
标签: java spring mongodb ocr tesseract