Java视觉智能识别

JavaVision

🪧 项目起源

  • JavaVision是一个基于Java开发的全能视觉智能识别项目。该项目起源于对图像处理和人工智能领域的热情,以及对Java作为主要编程语言的坚持。在AI领域,大多数解决方案都是使用Python实现的,因此决定充分利用Java的优势来构建一个功能强大且易于集成的视觉智能识别平台。

    JavaVision是完全开源、免费并支持多平台部署视觉智能识别项目
    如果该项目对您有帮助,您的star是我不断优化的动力!!!
    https://gitee.com/giteeClass/java-vision
    https://github.com/javpower/JavaVision

👏 项目特点

JavaVision具有以下突出特点:

  • 框架: SpringBoot

  • 多功能性:JavaVision不仅实现PaddleOCR-V4、YoloV8物体识别、人脸识别、以图搜图等核心功能,还可以轻松扩展到其他领域,如语音识别、动物识别、安防检查等。这使得JavaVision成为一个全面解决多种场景需求的自适应平台。

  • 高性能:JavaVision经过精心优化,具备卓越的性能表现。通过巧妙地结合算法优化和多线程技术,JavaVision能够在短时间内处理大量复杂的图像数据,并快速准确地进行识别和分析。

  • 可靠稳定:Java作为一种成熟而可靠的编程语言,具备出色的稳定性和安全性。JavaVision严格遵循最佳实践和高标准,确保项目的稳定运行,并提供可靠的数据保护和隐私保密。

  • 易于集成:JavaVision提供简洁而强大的API接口,使得与其他系统和平台的集成变得轻松快捷。无论是嵌入到现有应用程序中,还是作为独立的服务进行部署,JavaVision都能够与各种技术栈和框架无缝衔接。

  • 灵活可拓展:JavaVision采用模块化设计,允许用户根据自己的需求进行灵活的定制和扩展。用户可以根据项目需求选择合适的功能模块,也可以通过插件机制添加新的识别算法和特性。

    JavaVision旨在为Java开发者提供一个全面的视觉智能识别解决方案,让他们能够以熟悉且喜爱的编程语言构建出先进、可靠且易于集成的AI应用。无论是企业级应用还是个人项目,JavaVision都能助力开发者实现更多可能性

🔝 进阶使用

docker一键部署

  • docker pull javpower/pdocr:v4.0.1
  • docker run --name mycontainer -p 6888:6888 javpower/pdocr:v4.0.1

在这里插入图片描述

🔝 项目已实现

JNI、DJL方式实现
包括 PaddleOCRV4、YOLOV8、人脸识别、ES以图搜图

一、OCR应用

1、YOLOV8识别物体

接口地址:/yolo8

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
filequerytruefile

响应状态:

状态码说明schema
200OK

响应参数:

暂无

响应示例:

{
    "code": 500,
    "success": false,
    "msg": "java.io.FileNotFoundException: /opt/ocr/20231109151816332402394.png (No such file or directory)",
    "data": null,
    "time": "2023-11-09 15:18:16",
    "traceId": null
}
2、YOLOV8识别物体

接口地址:/yolo8/json

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
filequerytruefile

响应状态:

状态码说明schema
200OKDetection

响应参数:

参数名称参数说明类型schema
labelstring
clsIdinteger(int32)integer(int32)
bboxarray
confidencenumber(float)number(float)

响应示例:

[
	{
		"label": "",
		"clsId": 0,
		"bbox": [],
		"confidence": 0
	}
]
3、DJL识别文字

接口地址:/word

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
filequerytruefile

响应状态:

状态码说明schema
200OK

响应参数:

暂无

响应示例:


4、DJL识别文字

接口地址:/word/json

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
filequerytruefile

响应状态:

状态码说明schema
200OKWordBlock

响应参数:

参数名称参数说明类型schema
textstring
charScoresarray
boxPointarrayPoint
  xnumber(double)
  ynumber(double)

响应示例:

[
	{
		"text": "",
		"charScores": [],
		"boxPoint": [
			{
				"x": 0,
				"y": 0
			}
		]
	}
]
5、反光衣检测

接口地址:/reflective/json

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
filequerytruefile

响应状态:

状态码说明schema
200OK

响应参数:

暂无

响应示例:


6、JNI识别文字

接口地址:/ocr

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
paramquerytrueOcrParamOcrParam
  openAi-keyfalsestring
  描述词falsearraystring
filequerytruefile

响应状态:

状态码说明schema
200OK

响应参数:

暂无

响应示例:


7、JNI识别文字

接口地址:/ocr/json

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
filequerytruefile

响应状态:

状态码说明schema
200OKTextBlock

响应参数:

参数名称参数说明类型schema
boxPointarrayPoint
  xnumber(double)
  ynumber(double)
boxScorenumber(float)number(float)
angleIndexinteger(int32)integer(int32)
angleScorenumber(float)number(float)
angleTimenumber(double)number(double)
textstring
charScoresarray
crnnTimenumber(double)number(double)
blockTimenumber(double)number(double)

响应示例:

[
	{
		"boxPoint": [
			{
				"x": 0,
				"y": 0
			}
		],
		"boxScore": 0,
		"angleIndex": 0,
		"angleScore": 0,
		"angleTime": 0,
		"text": "",
		"charScores": [],
		"crnnTime": 0,
		"blockTime": 0
	}
]
8、火焰检测

接口地址:/fire/json

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
filequerytruefile

响应状态:

状态码说明schema
200OK

响应参数:

暂无

响应示例:


9、安全帽检测

接口地址:/construction/json

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
filequerytruefile

响应状态:

状态码说明schema
200OK

响应参数:

暂无

响应示例:


二、人脸应用

1、更新人脸

接口地址:/face/update

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
paramquerytrueFaceParamFaceParam
  人员唯一标识truestring
  人员名称truestring
filequerytruefile

响应状态:

状态码说明schema
200OK

响应参数:

暂无

响应示例:


2、人脸查询

接口地址:/face/search

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
filequerytruefile

响应状态:

状态码说明schema
200OKPersonObject

响应参数:

参数名称参数说明类型schema
personIdstring
personNamestring

响应示例:

{
	"personId": "",
	"personName": ""
}
3、删除人脸

接口地址:/face/del

请求方式:POST

请求数据类型:application/x-www-form-urlencoded

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
paramquerytrueFaceParamFaceParam
  人员唯一标识truestring

响应状态:

状态码说明schema
200OK

响应参数:

暂无

响应示例:


4、添加人脸

接口地址:/face/add

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
paramquerytrueFaceParamFaceParam
  人员唯一标识truestring
  人员名称truestring
filequerytruefile

响应状态:

状态码说明schema
200OK

响应参数:

暂无

响应示例:


三、以图搜图应用(ES版本)

1、搜图

接口地址:/image/search

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
filequerytruefile

响应状态:

状态码说明schema
200OK
2、添加图片

接口地址:/image/add

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:

请求参数:

参数名称参数说明请求类型是否必须数据类型schema
imageIdquerytruestring
filequerytruefile

响应状态:

状态码说明schema
200OK

响应参数:

暂无

响应示例:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ImageComparerUI——基于Java语言实现的相似识别,基于直方比较算法。 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.MediaTracker; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JPanel; public class ImageComparerUI extends JComponent implements ActionListener { /** * */ private static final long serialVersionUID = 1L; private JButton browseBtn; private JButton histogramBtn; private JButton compareBtn; private Dimension mySize; // image operator private MediaTracker tracker; private BufferedImage sourceImage; private BufferedImage candidateImage; private double simility; // command constants public final static String BROWSE_CMD = "Browse..."; public final static String HISTOGRAM_CMD = "Histogram Bins"; public final static String COMPARE_CMD = "Compare Result"; public ImageComparerUI() { JPanel btnPanel = new JPanel(); btnPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); browseBtn = new JButton("Browse..."); histogramBtn = new JButton("Histogram Bins"); compareBtn = new JButton("Compare Result"); // buttons btnPanel.add(browseBtn); btnPanel.add(histogramBtn); btnPanel.add(compareBtn); // setup listener... browseBtn.addActionListener(this); histogramBtn.addActionListener(this); compareBtn.addActionListener(this); mySize = new Dimension(620, 500); JFrame demoUI = new JFrame("Similiar Image Finder"); demoUI.getContentPane().setLayout(new BorderLayout()); demoUI.getContentPane().add(this, BorderLayout.CENTER); demoUI.getContentPane().add(btnPanel, BorderLayout.SOUTH); demoUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); demoUI.pack(); demoUI.setVisible(true); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; if(sourceImage != null) { Image scaledImage = sourceImage.getScaledInstance(300, 300, Image.SCALE_FAST); g2.drawImage(scaledImage, 0, 0, 300, 300, null); } if(candidateImage != null) { Image scaledImage = candidateImage.getScaledInstance(300, 330, Image.SCALE_FAST); g2.drawImage(scaledImage, 310, 0, 300, 300, null); } // display compare result info here Font myFont = new Font("Serif", Font.BOLD, 16); g2.setFont(myFont); g2.setPaint(Color.RED); g2.drawString("The degree of similarity : " + simility, 50, 350); } public void actionPerformed(ActionEvent e) { if(BROWSE_CMD.equals(e.getActionCommand())) { JFileChooser chooser = new JFileChooser(); chooser.showOpenDialog(null); File f = chooser.getSelectedFile(); BufferedImage bImage = null; if(f == null) return; try { bImage = ImageIO.read(f); } catch (IOException e1) { e1.printStackTrace(); } tracker = new MediaTracker(this); tracker.addImage(bImage, 1); // blocked 10 seconds to load the image data try { if (!tracker.waitForID(1, 10000)) { System.out.println("Load error."); System.exit(1); }// end if } catch (InterruptedException ine) { ine.printStackTrace(); System.exit(1); } // end catch if(sourceImage == null) { sourceImage = bImage; }else if(candidateImage == null) { candidateImage = bImage; } else { sourceImage = null; candidateImage = null; }
Java OpenCV 车牌识别是一种利用Java编程语言结合OpenCV(开源计算机视觉库)来实现车牌识别的技术。车牌识别是计算机视觉领域的一个重要应用,可以用于智能交通系统、停车场管理、违章监控等场景。 Java作为一种跨平台的编程语言,具有广泛的应用范围和强大的编程能力。而OpenCV是一个强大的计算机视觉库,提供了丰富的像处理和分析功能。结合Java和OpenCV,可以实现车牌片的获取、预处理、特征提取和模式匹配等步骤,最终实现车牌的自动识别。 具体来说,实现Java OpenCV 车牌识别可以按照以下步骤进行: 1. 车牌片获取:利用Java像处理库,读取车辆像或者视频帧,并提取出车牌区域。 2. 像预处理:对获取的车牌区域进行像预处理,包括灰度化、二值化、去除噪声等操作,以提高车牌字符的辨识度。 3. 字符分割:将预处理后的车牌区域进行字符分割,提取出单个字符。 4. 特征提取:对提取出的字符进行特征提取,例如利用轮廓、颜色等特征来描述字符。 5. 字符识别:利用机器学习或者模式匹配的方法,将提取的字符与预先训练好的字符模板进行比对,从而实现字符的识别。 6. 结果输出:将识别的字符进行整合,输出最终的车牌号码。 当然,以上仅是车牌识别的基本步骤,具体实现还需根据实际情况和需求进行优化和改进。而Java OpenCV 车牌识别技术的应用领域广泛,有着重要的实际意义,在智能交通和安全监控领域具有很大的应用潜力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值