最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java集成和使用dl4j實現(xiàn)通過掃描圖片識別快遞單信息

 更新時間:2024年12月26日 09:19:44   作者:慧香一格  
這篇文章主要為大家詳細介紹了Java如何使用DL4J搭建一個簡單的圖像識別模型,并將其集成到Spring?Boot后端中從而實現(xiàn)通過掃描圖片識別快遞單信息,需要的可以參考下

使用DL4J(DeepLearning4J)搭建一個簡單的圖像識別模型,并將其集成到Spring Boot后端中。我們將使用MNIST數(shù)據(jù)集來訓練一個簡單的卷積神經(jīng)網(wǎng)絡(CNN),然后將其部署到Spring Boot應用中。

1. 設置Spring Boot項目

首先,創(chuàng)建一個新的Spring Boot項目。你可以使用Spring Initializr(https://start.spring.io/)來快速生成項目結構。選擇以下依賴:

Spring Web

Spring Boot DevTools

Lombok(可選,用于簡化代碼)

2. 添加DL4J依賴

在你的pom.xml文件中添加DL4J和相關依賴:

<dependencies>
    <!-- Spring Boot Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
 
    <!-- DL4J -->
    <dependency>
        <groupId>org.deeplearning4j</groupId>
        <artifactId>deeplearning4j-core</artifactId>
        <version>1.0.0-beta7</version>
    </dependency>
    <dependency>
        <groupId>org.deeplearning4j</groupId>
        <artifactId>deeplearning4j-nn</artifactId>
        <version>1.0.0-beta7</version>
    </dependency>
    <dependency>
        <groupId>org.deeplearning4j</groupId>
        <artifactId>deeplearning4j-ui</artifactId>
        <version>1.0.0-beta7</version>
    </dependency>
    <dependency>
        <groupId>org.nd4j</groupId>
        <artifactId>nd4j-native-platform</artifactId>
        <version>1.0.0-beta7</version>
    </dependency>
 
    <!-- File Upload -->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.11.0</version>
    </dependency>
 
    <!-- Lombok (optional) -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

3. 訓練DL4J模型

我們將使用MNIST數(shù)據(jù)集來訓練一個簡單的卷積神經(jīng)網(wǎng)絡(CNN)。創(chuàng)建一個新的Java類MnistModelTrainer.java來訓練模型:

package com.example.scanapp;
 
import org.deeplearning4j.datasets.iterator.impl.MnistDataSetIterator;
import org.deeplearning4j.nn.conf.MultiLayerConfiguration;
import org.deeplearning4j.nn.conf.NeuralNetConfiguration;
import org.deeplearning4j.nn.conf.layers.ConvolutionLayer;
import org.deeplearning4j.nn.conf.layers.DenseLayer;
import org.deeplearning4j.nn.conf.layers.OutputLayer;
import org.deeplearning4j.nn.conf.layers.SubsamplingLayer;
import org.deeplearning4j.nn.conf.layers.objdetect.YoloOutputLayer;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.deeplearning4j.optimize.listeners.ScoreIterationListener;
import org.nd4j.linalg.activations.Activation;
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;
import org.nd4j.linalg.dataset.api.preprocessor.ImagePreProcessingScaler;
import org.nd4j.linalg.lossfunctions.LossFunctions;
import org.nd4j.linalg.learning.config.Adam;
 
import java.io.File;
import java.io.IOException;
 
public class MnistModelTrainer {
 
    public static void main(String[] args) throws IOException {
        int numEpochs = 10;
        int batchSize = 64;
        int numLabels = 10;
        int numRows = 28;
        int numColumns = 28;
        int numChannels = 1;
 
        // Load MNIST data
        DataSetIterator mnistTrain = new MnistDataSetIterator(batchSize, true, 12345);
        DataSetIterator mnistTest = new MnistDataSetIterator(batchSize, false, 12345);
 
        // Preprocess data
        ImagePreProcessingScaler scaler = new ImagePreProcessingScaler(0, 1);
        mnistTrain.setPreProcessor(scaler);
        mnistTest.setPreProcessor(scaler);
 
        // Define the network architecture
        MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
                .seed(12345)
                .updater(new Adam(0.001))
                .list()
                .layer(0, new ConvolutionLayer.Builder(5, 5)
                        .nIn(numChannels)
                        .nOut(20)
                        .stride(1, 1)
                        .activation(Activation.RELU)
                        .build())
                .layer(1, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX)
                        .kernelSize(2, 2)
                        .stride(2, 2)
                        .build())
                .layer(2, new ConvolutionLayer.Builder(5, 5)
                        .nOut(50)
                        .stride(1, 1)
                        .activation(Activation.RELU)
                        .build())
                .layer(3, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX)
                        .kernelSize(2, 2)
                        .stride(2, 2)
                        .build())
                .layer(4, new DenseLayer.Builder().activation(Activation.RELU)
                        .nOut(500).build())
                .layer(5, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
                        .nOut(numLabels)
                        .activation(Activation.SOFTMAX)
                        .build())
                .build();
 
        // Initialize the network
        MultiLayerNetwork model = new MultiLayerNetwork(conf);
        model.init();
        model.setListeners(new ScoreIterationListener(10));
 
        // Train the network
        for (int i = 0; i < numEpochs; i++) {
            model.fit(mnistTrain);
        }
 
        // Save the model
        File locationToSave = new File("mnist-model.zip");
        boolean saveUpdater = true; // Save the updater
        ModelSerializer.writeModel(model, locationToSave, saveUpdater);
    }
}

運行MnistModelTrainer類來訓練模型并保存到mnist-model.zip文件中。

4. 創(chuàng)建Spring Boot Controller

創(chuàng)建一個新的Controller來處理圖片上傳和圖像識別:

package com.example.scanapp.controller;
 
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.deeplearning4j.util.ModelSerializer;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.dataset.api.preprocessor.ImagePreProcessingScaler;
import org.nd4j.linalg.factory.Nd4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
 
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 
@RestController
public class ImageController {
 
    private static final String MODEL_PATH = "mnist-model.zip"; // 替換為你的模型路徑
    private MultiLayerNetwork model;
    private ImagePreProcessingScaler scaler;
 
    public ImageController() throws IOException {
        this.model = ModelSerializer.restoreMultiLayerNetwork(new File(MODEL_PATH));
        this.scaler = new ImagePreProcessingScaler(0, 1);
    }
 
    @PostMapping("/recognize")
    public String recognize(@RequestParam("image") MultipartFile file) {
        try {
            BufferedImage image = ImageIO.read(file.getInputStream());
            INDArray imageArray = Nd4j.create(new int[]{1, 1, 28, 28});
            for (int i = 0; i < 28; i++) {
                for (int j = 0; j < 28; j++) {
                    int rgb = image.getRGB(j, i);
                    int gray = (rgb >> 16) & 0xFF; // Convert to grayscale
                    imageArray.putScalar(0, 0, i, j, gray / 255.0);
                }
            }
 
            scaler.transform(imageArray);
            INDArray output = model.output(imageArray);
            int predictedClass = output.argMax(1).getInt(0);
 
            return "Predicted class: " + predictedClass;
        } catch (IOException e) {
            e.printStackTrace();
            return "Error processing image";
        }
    }
}

5. 測試API

你可以使用Postman或其他工具來測試你的API。發(fā)送一個POST請求到/recognize端點,并附帶一個MNIST格式的圖片文件(28x28像素的灰度圖像)。

6. 運行Spring Boot應用

確保你的Spring Boot應用能夠正常啟動。你可以通過以下命令運行應用:

mvn spring-boot:run

7. 前端集成(可選)

如果你有一個前端應用(例如Vue.js),你可以創(chuàng)建一個簡單的表單來上傳圖片并調用后端API。以下是一個簡單的Vue.js組件示例:

<template>
  <div>
    <h1>Image Recognition</h1>
    <input type="file" @change="onFileChange" accept="image/*" />
    <button @click="uploadImage">Upload</button>
    <p v-if="result">{{ result }}</p>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      file: null,
      result: ''
    };
  },
  methods: {
    onFileChange(e) {
      this.file = e.target.files[0];
    },
    async uploadImage() {
      const formData = new FormData();
      formData.append('image', this.file);
 
      try {
        const response = await fetch('http://localhost:8080/recognize', {
          method: 'POST',
          body: formData
        });
        const data = await response.text();
        this.result = data;
      } catch (error) {
        console.error('Error uploading image:', error);
      }
    }
  }
};
</script>

代碼解讀

將上述Vue.js組件添加到你的Vue項目中,然后運行前端應用來測試整個流程。

通過以上步驟,你應該能夠成功搭建一個使用DL4J模型的Spring Boot后端服務,并通過前端應用進行圖像識別。

以上就是Java集成和使用dl4j實現(xiàn)通過掃描圖片識別快遞單信息的詳細內容,更多關于Java dl4j實現(xiàn)圖片識別的資料請關注腳本之家其它相關文章!

相關文章

  • Java調用dll文件的實現(xiàn)解析

    Java調用dll文件的實現(xiàn)解析

    這篇文章主要介紹了Java調用dll文件的實現(xiàn)解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java代理模式的深入了解

    Java代理模式的深入了解

    這篇文章主要為大家介紹了Java代理模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • JavaWeb 入門:Hello Servlet

    JavaWeb 入門:Hello Servlet

    這篇文章主要介紹了Servlet開發(fā)JavaWeb工程示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • Zookeeper?Curator使用介紹

    Zookeeper?Curator使用介紹

    curator是Net?ix公司開源的?套Zookeeper客戶端框架,和ZKClient?樣,Curator解決了很多Zookeeper客戶端非常底層的細節(jié)開發(fā)?作,包括連接重連,反復注冊Watcher和NodeExistsException異常等,是最流行的Zookeeper客戶端之?
    2022-09-09
  • 詳細介紹Java后端API接口開發(fā)規(guī)范

    詳細介紹Java后端API接口開發(fā)規(guī)范

    在Java后端開發(fā)中,API接口的設計與開發(fā)至關重要,本文詳細介紹了命名規(guī)范、接收參數(shù)規(guī)范、參數(shù)檢驗、接收方式規(guī)范、異常類處理、統(tǒng)一返回格式以及冪等性等方面的開發(fā)規(guī)范,提供了實際代碼示例,需要的朋友可以參考下
    2024-10-10
  • SpringBoot集成Mybatis過程步驟圖解

    SpringBoot集成Mybatis過程步驟圖解

    這篇文章主要介紹了SpringBoot集成Mybatis過程步驟圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Spring Boot Admin的使用詳解(Actuator監(jiān)控接口)

    Spring Boot Admin的使用詳解(Actuator監(jiān)控接口)

    這篇文章主要介紹了Spring Boot Admin的使用詳解(Actuator監(jiān)控接口),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • 圖文精講java常見分布式事務理論與解決方案

    圖文精講java常見分布式事務理論與解決方案

    對于分布式系統(tǒng),最簡單的理解就是一堆機器對外提供服務,相比單體服務,它可以承受更高的負載,但是分布式系統(tǒng)也帶了一系列問題,今天帶大家搞懂和分布式相關的常見理論和解決方案
    2021-11-11
  • Java面向接口編程之簡單工廠模式示例

    Java面向接口編程之簡單工廠模式示例

    這篇文章主要介紹了Java面向接口編程之簡單工廠模式,結合實例形式詳細分析了java面向接口編程簡單工廠模式的具體定義與使用方法,需要的朋友可以參考下
    2019-09-09
  • 基于SpringBoot快速集成HTML轉PDF功能的實現(xiàn)方案

    基于SpringBoot快速集成HTML轉PDF功能的實現(xiàn)方案

    需要將網(wǎng)頁內容或者HTML模板轉換為PDF格式供用戶下載?今天我就來分享一個基于SpringBoot快速集成HTML轉PDF功能的方案,讓你5分鐘就能搞定這個需求,需要的朋友可以參考下
    2026-01-01

最新評論

宜州市| 开江县| 济南市| 云林县| 明溪县| 吕梁市| 桐柏县| 周宁县| 绵阳市| 西平县| 聊城市| 镇江市| 聂拉木县| 荃湾区| 鹤山市| 兰西县| 页游| 兴宁市| 安远县| 甘泉县| 铁岭市| 隆子县| 桐乡市| 错那县| 山西省| 西峡县| 景东| 应城市| 小金县| 印江| 襄城县| 商洛市| 福建省| 营山县| 辽源市| 桑植县| 九寨沟县| 宝山区| 吴江市| 黄石市| 乐安县|