日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

java调起本地摄像头,利用openCV进行人脸识别(一)

發布時間:2024/1/8 pytorch 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java调起本地摄像头,利用openCV进行人脸识别(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

嗨咯,又好久沒有更新了。今天寫個前陣子做的人臉識別程序。該程序客戶端基于Jave JFrame

客戶端的主要作用是,調用電腦的攝像頭(我的直接調用筆記本攝像頭),然后回顯攝像頭錄取的信息,再利用openCV進行人臉識別。可以框出人臉、并采集人臉數據,采集好后進行模型訓練,訓練得到模型后,可以進行人臉對比。

這個客戶端目前已經實現以上功能,但是實現得比較簡單,每一步還需要手動點擊,為了使他更智能,客戶端目前還在改進。

所以今天就先簡單講下openCV的環境部署,以及基本的調用。

首先,要部署openCV的環境,解壓openCV的環境包,然后配置環境變量。

這個包我已經上傳我的資源,可以直接下載。也可以到openCV官網去進行下載。

解壓以后長這樣

然后,我們去系統環境變量里邊,添加一下路徑,我的包在F盤,所以環境變量為?F:\face\install\x64\vc14\bin

然后是openCV的簡單調用,以下這個類是調起攝像頭,可以利用openCV識別出人臉,在畫面上邊畫出框框

FaceDetection.java

package face.detect;import javax.swing.*;import face.util.VideoPanel; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier; import org.opencv.objdetect.Objdetect; import org.opencv.videoio.VideoCapture;public class FaceDetection {public static void main(String[] args) {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);// 新建窗口JFrame cameraFrame = new JFrame("camera");cameraFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);cameraFrame.setSize(640, 480);cameraFrame.setBounds(0, 0, cameraFrame.getWidth(), cameraFrame.getHeight());VideoPanel videoPanel = new VideoPanel();cameraFrame.setContentPane(videoPanel);cameraFrame.setVisible(true);CascadeClassifier faceCascade = new CascadeClassifier();// 獲取模型文件faceCascade.load("F:/face/install/etc/haarcascades/haarcascade_frontalface_alt.xml");// 調用攝像頭VideoCapture capture = new VideoCapture();try {capture.open(0);if (capture.isOpened()) {Mat image = new Mat();while(true) {capture.read(image);if (!image.empty()) {detectAndDisplay(image, faceCascade);videoPanel.setImageWithMat(image);cameraFrame.repaint();} else {break;}}}} finally {capture.release();}}/*** 繪制圖形界面* @param frame* @param faceCascade*/public static void detectAndDisplay(Mat frame, CascadeClassifier faceCascade){MatOfRect faces = new MatOfRect();Mat grayFrame = new Mat();// convert the frame in gray scaleImgproc.cvtColor(frame, grayFrame, Imgproc.COLOR_BGR2GRAY);// equalize the frame histogram to improve the resultImgproc.equalizeHist(grayFrame, grayFrame);// compute minimum face size (20% of the frame height, in our case)int absoluteFaceSize = 0;int height = grayFrame.rows();if (Math.round(height * 0.2f) > 0) {absoluteFaceSize = Math.round(height * 0.2f);}// detect facesfaceCascade.detectMultiScale(grayFrame, faces, 1.1, 2, 0 | Objdetect.CASCADE_SCALE_IMAGE,new Size(absoluteFaceSize, absoluteFaceSize), new Size());// each rectangle in faces is a face: draw them!Rect[] facesArray = faces.toArray();for (int i = 0; i < facesArray.length; i++)Imgproc.rectangle(frame, facesArray[i].tl(), facesArray[i].br(), new Scalar(0, 255, 0), 3);}}

面板工具類?VideoPanel.java

import java.awt.*; import java.awt.image.BufferedImage; import javax.swing.*;import org.opencv.core.Mat;public class VideoPanel extends JPanel {private BufferedImage image;public void setImageWithMat(Mat mat) {image = mat2BufferedImage.matToBufferedImage(mat);this.repaint();}@Override protected void paintComponent(Graphics g) {super.paintComponent(g);if (image != null) g.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), this);}public static VideoPanel show(String title, int width, int height, int open) {JFrame frame = new JFrame(title);if(open==0) {frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);} else {frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);}frame.setSize(width, height);frame.setBounds(0, 0, width, height);VideoPanel videoPanel = new VideoPanel();videoPanel.setSize(width, height);frame.setContentPane(videoPanel);frame.setVisible(true);return videoPanel;} }

然后運行FaceDetection.java類就可以啟動程序啦,效果圖所示

?

然后突然想起來,還需要下載這個jar包,導入到工程里邊

這次忘記上傳了,這個百度一下就可以下載到。

openCV人臉識別的初步運用先寫到這里,下次會把項目打包上傳

-----------------------------------------------------------------------------------------------------------------------

2020-07-16 補充代碼?

有小伙伴反映有個地方不能運行,然后我發現有個工具類忘記貼了

mat2BufferedImage.java

import org.opencv.core.Mat;import java.awt.image.BufferedImage;public class mat2BufferedImage {public static BufferedImage matToBufferedImage(Mat matrix) {int cols = matrix.cols();int rows = matrix.rows();int elemSize = (int) matrix.elemSize();byte[] data = new byte[cols * rows * elemSize];int type;matrix.get(0, 0, data);switch (matrix.channels()) {case 1:type = BufferedImage.TYPE_BYTE_GRAY;break;case 3:type = BufferedImage.TYPE_3BYTE_BGR;// bgr to rgbbyte b;for (int i = 0; i < data.length; i = i + 3) {b = data[i];data[i] = data[i + 2];data[i + 2] = b;}break;default:return null;}BufferedImage image2 = new BufferedImage(cols, rows, type);image2.getRaster().setDataElements(0, 0, cols, rows, data);return image2;} }

?

相關博客:

java利用openCV進行人臉識別,采集照片和訓練模型(二)

總結

以上是生活随笔為你收集整理的java调起本地摄像头,利用openCV进行人脸识别(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。