opencv调用ip摄像头实现人脸识别自动拍照
二话不说,直接上代码
/** @Author 张泰清* @Description //人脸识别* @Date 2019/12/19 13:14* @Param* @return**/import org.opencv.core.Point;
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
import org.opencv.objdetect.HOGDescriptor;
import org.opencv.videoio.VideoCapture;
import org.opencv.videoio.Videoio;import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Timer;
import java.util.TimerTask;public class CaptureBasic extends JPanel {private BufferedImage mImg;static int imgName=1;static boolean isFace=false;private BufferedImage mat2BI(Mat mat){int dataSize =mat.cols()*mat.rows()*(int)mat.elemSize();byte[] data=new byte[dataSize];mat.get(0, 0,data);int type=mat.channels()==1?BufferedImage.TYPE_BYTE_GRAY:BufferedImage.TYPE_3BYTE_BGR;if(type==BufferedImage.TYPE_3BYTE_BGR){for(int i=0;i<dataSize;i+=3){byte blue=data[i+0];data[i+0]=data[i+2];data[i+2]=blue;}}BufferedImage image=new BufferedImage(mat.cols(),mat.rows(),type);image.getRaster().setDataElements(0, 0, mat.cols(), mat.rows(), data);return image;}public void paintComponent(Graphics g){if(mImg!=null){g.drawImage(mImg, 0, 0, mImg.getWidth(),mImg.getHeight(),this);}}public static void main(String[] args) {try{System.loadLibrary(Core.NATIVE_LIBRARY_NAME);Mat capImg=new Mat();//VideoCapture capture=new VideoCapture(0);VideoCapture capture=new VideoCapture("http://192.168.1.204:81/videostream.cgi");int height = (int)capture.get(Videoio.CAP_PROP_FRAME_HEIGHT);int width = (int)capture.get(Videoio.CAP_PROP_FRAME_WIDTH);if(height==0||width==0){throw new Exception("camera not found!");}JFrame frame=new JFrame("毕业实习--人脸识别");frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);CaptureBasic1 panel=new CaptureBasic1();frame.setContentPane(panel);frame.setVisible(true);frame.setSize(width+frame.getInsets().left+frame.getInsets().right,height+frame.getInsets().top+frame.getInsets().bottom);Mat temp=new Mat();frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);Timer timer=new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {capture.read(capImg);Imgproc.cvtColor(capImg, temp, Imgproc.COLOR_RGB2GRAY);try {panel.mImg=panel.mat2BI(detectFace(capImg));} catch (Exception e) {e.printStackTrace();}panel.repaint();if (isFace){Imgcodecs.imwrite("opencv"+imgName+".png", capImg);imgName++;}isFace=false;}}, 10,10);} catch (Exception e) {e.printStackTrace();}}/*** opencv实现人脸识别* @param img*/public static Mat detectFace(Mat img) throws Exception {// 从配置文件lbpcascade_frontalface.xml中创建一个人脸识别器,该文件位于opencv安装目录中CascadeClassifier faceDetector = new CascadeClassifier("D:\\Program Files\\OPENCV\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml");// 在图片中检测人脸MatOfRect faceDetections = new MatOfRect();faceDetector.detectMultiScale(img, faceDetections);//System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));Rect[] rects = faceDetections.toArray();if(rects != null && rects.length >= 1){System.out.println("发现人脸"+imgName);isFace=true;for (Rect rect : rects) {Imgproc.rectangle(img, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);}}return img;}
}
使用该程序前需要做以下准备工作:
- 下载安装opencv
- 把opencv安装目录里的/build/java/下的jar包导入项目
- 把opencv安装目录里的/build/java/x64下的.dll文件复制到jdk安装目录的bin目录下
//调用本机默认摄像头
VideoCapture capture=new VideoCapture(0);
//调用ip摄像头
VideoCapture capture=new VideoCapture("http://192.168.1.204:81/videostream.cgi");
//必须把haarcascade_frontalface_alt.xml换成你自己的opencv安装目录里的文件
CascadeClassifier faceDetector = new CascadeClassifier("D:\\Program Files\\OPENCV\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml");
至此,程序已经能够正常运行了,在摄像头画面中出现人脸,则会自动拍照存储到类路径下!
下图是本人在学校图书馆的实验结果:
opencv调用ip摄像头实现人脸识别自动拍照相关推荐
- python调用摄像头人脸识别代码_Python使用 opencv调用笔记本摄像头进行人脸识别...
首先需要导入opencv库pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ opencv-python 上代码#万码学堂Pytho ...
- python+opencv调用ip摄像头(基于RTSP实现)
python+opencv调用ip摄像头(基于RTSP实现) 采用RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,RTSP是TCP/IP协议体系中 ...
- OpenCV调用手机摄像头与人脸检测
文章目录 一.OpenCV机器视觉环境搭建 1. OpenCV下载 2. OpenCV安装 3. 安装测试 二.OpenCV调用摄像头及人脸检测 1. 调用电脑摄像头 2. 调用手机摄像头及人脸检测 ...
- 使用opencv调用IP摄像头APP
使用opencv调用手机摄像头 大致分为三步 在手机上下载应用IP摄像头 IP摄像头图标 2. 确保你的电脑和手机在同一个局域网中 如果你的电脑没有无线网卡,则用你的手机给电脑开热点(确保可以通过US ...
- 调用远程摄像头进行人脸识别_人脸识别技术植入手机APP
随着物联网技术的日益成熟,我们看到已经有很多APP用到了人脸识别技术,特别是金融和互联网领域的应用纷纷加入了人脸识别.表示,人脸识别技术基于人的脸部特征信息进行身份识别,为互联网金融等行业解决在线多维 ...
- 调用远程摄像头进行人脸识别_工地安全:AI如何实现安全帽检测与人脸识别?...
安全生产一直是施工生产中很重要的一部分,只有保障了员工的安全,才能保证企业的利益.安全帽作为保护.防护的重要防范手段,一直是各大企业要求员工佩戴的,可还是发生了各种由于未佩戴安全帽导致的安全事故. 通 ...
- 用OpenCV调用IP摄像头(python版)
操作系统: Windows10用到的软件: 1.anaconda3 2.OpenCV 3 等等硬件: EasyN摄像头一个(必须为IPcamera) 问题综述 最近在学习OpenCV,想要通过摄像头采 ...
- Python+OpenCV 调用手机摄像头并实现人脸识别
文章内容: 1.windows 环境下安装 OpenCV 机器视觉环境搭建: 2.基于通过 Python+OpenCV调用手机摄像头并实现人脸检测识别. 目录 1 实验环境 2 实验准备 2.1 下载 ...
- 基于python调用摄像头进行人脸识别,支持多张人脸同时识别
介绍 调用摄像头进行人脸识别, 支持多张人脸同时识别; 摄像头人脸录入 请不要离摄像头过近, 人脸超出摄像头范围时会有 "OUT OF RANGE" 提醒 提取特征建立人脸数据库 ...
最新文章
- 人工智能科普|自然语言处理(NLP)
- checkbox的全选中,取消全选中
- 带AI无人车上云驾校,不出门练遍各大城市道路,华南理工大学团队拿下“互联网+”大赛金奖...
- mysql 对库中表授权_对mysql数据库的授权和使用AND案例
- maven配置tomcat7
- android 视频开发sd卡,Android开发之SD卡文件操作分析
- Taro+react开发(25)三元
- [Kesci] 预测分析 · 客户购买预测(AUC评估要使用predict_proba)
- 2019年终总结-如果这是一场电影
- go语言中关于文件的操作+工作目录的拼接
- 使用_beginthread创建线程
- 2023年东南大学机械工程考研考情与难度、参考书上岸前辈备考经验
- 我做了STM32MP1实战教程
- Linux align函数,linux内核中ALIGN解析(示例代码)
- 李彦宏对话IMF总裁拉加德:缓解B端焦虑,要看AI这道主菜味道如何
- php 百度地图根据经纬度获取地址,百度地图 根据经纬度获取地址
- WSL2配置docker和PHP
- php yii2 ddd,Xunsearch SDK for PHP/yii2
- 企业微信三方开发:注册企业微信服务商
- Codeforces Round #739 (Div. 3) ABCDEF1F2 解题思路