sql >> データベース >  >> NoSQL >> MongoDB

Doocrプロセスのためにbyte[]画像をmongodbに保存する方法

    春を使っているので。 MultipartFileを使用できます コントローラでファイルを取得してから、Binaryを使用します org.bsonの ファイルをMongoDBに保存するには、画像サイズが16 MB未満の場合(画像サイズが16 MBを超える場合は、 GridFs

    プロジェクトに追加する必要がある依存関係は、spring-data-mongoDBの1つだけです。

    次のようなユーザーコレクションの例を見てみましょう。

    @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());
    
        }
    }
    

    以下のpostmanスクリーンショットに示すように、サーバーを起動してエンドポイントに到達します

    データはmongoDbのBinDataに保存されます フォーマットしてデータベースからデータを取得するには、getImageを参照してください。 上記のコードの方法。

    編集:

    質問者はtess4jを使用しています 画像とdoOCRからテキストを抽出するためのライブラリ このライブラリのメソッドです。これらの手順に従って、SpringBootアプリケーションの画像からテキストを抽出しました。

    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. エラー:データとソルトの引数が必要です

    2. Ubuntu18.04にMongoDBをインストールする方法

    3. 集約をサポートするdbバージョン>3.6があるにもかかわらず、dateFromString:'format'に対する認識されない引数を取得するのはなぜですか

    4. MongoDBChangeStreamsによるパフォーマンスの大幅な低下