MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

डूकर प्रक्रिया के लिए मोंगोडब में बाइट [] छवि को कैसे स्टोर करें

चूंकि आप वसंत का उपयोग कर रहे हैं। आप MultipartFile . का उपयोग कर सकते हैं फ़ाइल को अपने नियंत्रक में प्राप्त करने के लिए और फिर Binary . का उपयोग करें का org.bson फ़ाइल को MongoDB में संग्रहीत करने के लिए, यदि आपकी छवि का आकार <16MB (यदि छवि का आकार> 16 एमबी है तो आप ग्रिडएफ )।

आपको अपने प्रोजेक्ट में केवल एक निर्भरता जोड़ने की आवश्यकता है - spring-data-mongoDB

आइए एक उपयोगकर्ता संग्रह का उदाहरण लेते हैं जो इस तरह दिखता है:

@Document
public class User {
    @Id
    private String id;
    
    private String name;
    private Binary image;
    // getters and setters
}

यहां आप Binary image देख सकते हैं जो आपकी छवि फ़ाइल का प्रतिनिधित्व करता है।

अब MongoRepository . का उपयोग करके इस उपयोगकर्ता संग्रह के लिए एक रिपॉजिटरी बनाएं

public interface UserRepository extends MongoRepository<User, String>{

}

डेमो उद्देश्य के लिए एक नियंत्रक बनाएँ। @RequestParam MultipartFile file . का उपयोग करें अपने नियंत्रक को फ़ाइल प्राप्त करने के लिए, फ़ाइल से बाइट प्राप्त करें और इसे उपयोगकर्ता ऑब्जेक्ट पर सेट करें user.setImage(new Binary(file.getBytes())); पूरा उदाहरण नीचे है:

@RestController
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @PostMapping("/users")
    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("/users")
    String getImage(@RequestParam String id) {
        Optional<User> user = userRepository.findById(id);
        Encoder encoder = Base64.getEncoder();
        
        return encoder.encodeToString(user.get().getImage().getData());

    }
}

सर्वर प्रारंभ करें और अंत बिंदु को हिट करें जैसा कि नीचे पोस्टमैन स्क्रीनशॉट में दिखाया गया है

आपका डेटा mongoDb में BinData . में संग्रहीत है प्रारूप और डेटाबेस से डेटा प्राप्त करने के लिए कृपया देखें getImage उपरोक्त कोड की विधि।

संपादित करें:

प्रश्न पूछने वाला tess4j . का उपयोग कर रहा है छवि से पाठ निकालने के लिए पुस्तकालय और doOCR इस पुस्तकालय में एक विधि है। मैंने अपने स्प्रिंग बूट एप्लिकेशन में इमेज से टेक्स्ट निकालने के लिए इन चरणों का पालन किया है।

  1. tesseract-ocr इंस्टॉल करें आपके सिस्टम में:

    sudo apt-get install tesseract-ocr

  2. डाउनलोड करें eng.traineddata https://github.com/tesseract-ocr/tessdata से प्रशिक्षण डेटा और इसे प्रोजेक्ट रूट फ़ोल्डर में ले जाएँ।

  3. अपने प्रोजेक्ट में नीचे निर्भरता जोड़ें:

   <dependency>
        <groupId>net.sourceforge.tess4j</groupId>
        <artifactId>tess4j</artifactId>
        <version>3.2.1</version>
   </dependency>
  1. नीचे दिए गए कोड को मौजूदा प्रोजेक्ट में जोड़ें:
@GetMapping("/image-text")
String getImageText(@RequestParam String id) {
    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";
    }
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. रूपांतरण विफल अपवाद:एक DBObject को बनाए रखना लेकिन एक LinkedHashMap रिटर्न प्राप्त करना <?,?>

  2. नेवला:पता लगाएँ कि डाला गया दस्तावेज़ डुप्लिकेट है और यदि ऐसा है, तो मौजूदा दस्तावेज़ लौटाएँ

  3. ऊपरी विफलताओं में स्थितीय ($) के साथ $पुश करें

  4. mongodb का आउटपुट प्राप्त करने के लिए .toArray () करने की आवश्यकता है। कुंजी नाम पर खोज () मूल्य नहीं है

  5. अज्ञात तत्व प्रकार (0x2E) के लिए mgo $अनविंड एकत्रीकरण परिणाम