基于java實(shí)現(xiàn)簡單的圖片類別識別
下面是java實(shí)現(xiàn)簡單的圖片類別識別的示例代碼,希望對大家有所幫助
1.maven依賴
<dependency>
<groupId>ai.djl</groupId>
<artifactId>api</artifactId>
<version>0.4.0</version>
</dependency>
<dependency>
<groupId>ai.djl</groupId>
<artifactId>repository</artifactId>
<version>0.4.0</version>
</dependency>
<dependency>
<groupId>ai.djl.pytorch</groupId>
<artifactId>pytorch-model-zoo</artifactId>
<version>0.4.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>ai.djl.pytorch</groupId>
<artifactId>pytorch-native-auto</artifactId>
<version>1.4.0</version>
<scope>runtime</scope>
</dependency>
2.完整代碼
import ai.djl.Application;
import ai.djl.ModelException;
import ai.djl.inference.Predictor;
import ai.djl.modality.cv.output.DetectedObjects;
import ai.djl.modality.cv.util.BufferedImageUtils;
import ai.djl.repository.zoo.Criteria;
import ai.djl.repository.zoo.ModelZoo;
import ai.djl.repository.zoo.ZooModel;
import ai.djl.training.util.ProgressBar;
import ai.djl.translate.TranslateException;
import org.opencv.core.*;
import org.opencv.objdetect.CascadeClassifier;
import org.opencv.videoio.VideoCapture;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException, ModelException, TranslateException {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
String url = "d:/path/to/u=2304912836,1229708753&fm=193.jpg";
VideoCapture camera = new VideoCapture(0); // 0 表示第一個(gè)攝像頭設(shè)備,如果有多個(gè)攝像頭可能需要調(diào)整參數(shù)
if (!camera.isOpened()) {
System.out.println("Error: Could not open camera");
return;
}
// 創(chuàng)建窗口并設(shè)置關(guān)閉操作
JFrame frame = new JFrame("Face Grid Live");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.setResizable(false);
// 創(chuàng)建用于顯示圖像的標(biāo)簽
JLabel label = new JLabel();
frame.getContentPane().add(label, BorderLayout.CENTER);
Mat frameImage = new Mat();
while(true){
camera.read(frameImage);
BufferedImage bufferedImage = matToBufferedImage(frameImage);
Criteria<BufferedImage, DetectedObjects> criteria =
Criteria.builder()
.optApplication(Application.CV.OBJECT_DETECTION)
.setTypes(BufferedImage.class, DetectedObjects.class)
.optFilter("backbone", "resnet50")
.optProgress(new ProgressBar())
.build();
try (ZooModel<BufferedImage, DetectedObjects> model = ModelZoo.loadModel(criteria)) {
try (Predictor<BufferedImage, DetectedObjects> predictor = model.newPredictor()) {
DetectedObjects detection = predictor.predict(bufferedImage);
System.out.println(detection);
}
}
// 將圖像顯示在標(biāo)簽中
ImageIcon imageIcon = new ImageIcon(bufferedImage);
label.setIcon(imageIcon);
// 刷新窗口
frame.pack();
frame.setVisible(true);
}
}
public static BufferedImage matToBufferedImage(Mat matrix) {
int width = matrix.cols();
int height = matrix.rows();
int channels = matrix.channels();
byte[] data = new byte[width * height * channels];
matrix.get(0, 0, data);
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
System.arraycopy(data, 0, targetPixels, 0, data.length);
return image;
}
}
到此這篇關(guān)于基于java實(shí)現(xiàn)簡單的圖片類別識別的文章就介紹到這了,更多相關(guān)java圖片識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java ArrayList集合中的某個(gè)對象屬性進(jìn)行排序的實(shí)現(xiàn)代碼
這篇文章主要介紹了java ArrayList集合中的某個(gè)對象屬性進(jìn)行排序的實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-07-07
java實(shí)現(xiàn)的2048游戲完整實(shí)例
這篇文章主要介紹了java實(shí)現(xiàn)的2048游戲,結(jié)合完整實(shí)例形式分析了java實(shí)現(xiàn)2048游戲功能的相關(guān)數(shù)值運(yùn)算、swing組件布局、事件響應(yīng)等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
Java Web程序?qū)崿F(xiàn)返回JSON字符串的方法總結(jié)
Java Web服務(wù)器端只要把Java對象數(shù)據(jù)轉(zhuǎn)成JSON字符串,把JSON字符串以文本的形式通過response輸出即可,2016-05-05
@JsonFormat 實(shí)現(xiàn)日期格式自動格式化
這篇文章主要介紹了@JsonFormat 實(shí)現(xiàn)日期格式自動格式化,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
JAVA區(qū)間值判斷[10,20)的實(shí)現(xiàn)
本文主要介紹了JAVA區(qū)間值判斷[10,20)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09
解析Spring Boot內(nèi)嵌tomcat關(guān)于getServletContext().getRealPath獲取得到臨時(shí)
大家都很糾結(jié)這個(gè)問題在使用getServletContext().getRealPath()得到的是臨時(shí)文件的路徑,每次重啟服務(wù),這個(gè)臨時(shí)文件的路徑還好變更,下面小編通過本文給大家分享Spring Boot內(nèi)嵌tomcat關(guān)于getServletContext().getRealPath獲取得到臨時(shí)路徑的問題,一起看看吧2021-05-05
java中數(shù)組list map三者之間的互轉(zhuǎn)介紹
java中 數(shù)組 list map之間的互轉(zhuǎn)一張圖清晰呈現(xiàn)并附有代碼,不懂的朋友可以參考下2013-10-10

