基于java实现简单的图片类别识别

 更新时间:2023年12月01日 11:11:51   作者:默默努力的小老弟  
这篇文章主要为大家详细介绍了如何基于java实现简单的图片类别识别功能,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下

下面是java实现简单的图片类别识别的示例代码,希望对大家有所帮助

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 表示第一个摄像头设备,如果有多个摄像头可能需要调整参数
        if (!camera.isOpened()) {
            System.out.println("Error: Could not open camera");
            return;
        }
        // 创建窗口并设置关闭操作
        JFrame frame = new JFrame("Face Grid Live");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800, 600);
        frame.setResizable(false);

        // 创建用于显示图像的标签
        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);
                }
            }
            // 将图像显示在标签中
            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;
    }
}

到此这篇关于基于java实现简单的图片类别识别的文章就介绍到这了,更多相关java图片识别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringCloud中的Ribbon负载均衡器详细解析

    SpringCloud中的Ribbon负载均衡器详细解析

    这篇文章主要介绍了SpringCloud中的Ribbon负载均衡器详细解析,Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 Netflix Ribbon 实现,通过封装可以让我们轻松地将面向服务的 REST 模版请求自动转换成客户端负载均衡的服务调用,需要的朋友可以参考下
    2024-01-01
  • SpringBoot集成Session的实现示例

    SpringBoot集成Session的实现示例

    Session是一个在Web开发中常用的概念,它表示服务器和客户端之间的一种状态管理机制,用于跟踪用户在网站或应用程序中的状态和数据,本文主要介绍了SpringBoot集成Session的实现示例,感兴趣的可以了解一下
    2023-09-09
  • JAVA如何使用Math类操作数据

    JAVA如何使用Math类操作数据

    这篇文章主要介绍了JAVA如何使用Math类操作数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 从架构思维角度分析分布式锁方案

    从架构思维角度分析分布式锁方案

    这篇文章主要介绍了从架构与思维的角度来分析分布式锁的方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-01-01
  • Java 自定义注解及利用反射读取注解的实例

    Java 自定义注解及利用反射读取注解的实例

    下面小编就为大家带来一篇Java 自定义注解及利用反射读取注解的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 总结一下关于在Java8中使用stream流踩过的一些坑

    总结一下关于在Java8中使用stream流踩过的一些坑

    java8新增了stream流式处理,对于list的各种操作处理提供了好多方法 ,用过的都知道,方便极了.比如筛选、排序、合并、类型转换等等.以下是我实际工作中踩过的坑,记录下避免大家踩坑,需要的朋友可以参考下
    2021-06-06
  • Java模拟QQ桌面截图功能实现方法

    Java模拟QQ桌面截图功能实现方法

    这篇文章主要介绍了Java模拟QQ桌面截图功能实现方法,涉及java针对鼠标事件及图片操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • javafx 如何将项目打包为 Windows 的可执行文件exe

    javafx 如何将项目打包为 Windows 的可执行文件exe

    文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用Launch4j(适用于所有JDK版本),方法3使用InnoSetup(用于创建安装包),每种方法都有其特点和适用范围,可以根据项目需求选择合适的方法,感兴趣的朋友一起看看吧
    2025-01-01
  • java实现微信小程序登录态维护的示例代码

    java实现微信小程序登录态维护的示例代码

    本篇文章主要介绍了java实现微信小程序登录态维护的示例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-09-09
  • idea pom导入net.sf.json的jar包失败的解决方案

    idea pom导入net.sf.json的jar包失败的解决方案

    JSON(JavaScript Object Notation,JS对象简谱)是一种轻量级的数据交换格式,这篇文章主要介绍了idea pom导入net.sf.json的jar包失败的解决方案,感兴趣的朋友一起看看吧
    2023-11-11

最新评论