最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenCV Java實現人臉識別和裁剪功能

 更新時間:2021年11月17日 11:02:59   作者:蛇皮皮蛋  
這篇文章主要為大家詳細介紹了OpenCV Java實現人臉識別和裁剪功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了OpenCV Java實現人臉識別和裁剪的具體代碼,供大家參考,具體內容如下

安裝及配置

1.首先安裝OpenCV,地址

這里我下載的是Windows版的3.4.5

然后安裝即可……

2.Eclipse配置OpenCV

Window->Preferences->Java->User Libraries

New輸入你的Libraries名

這里我的安裝目錄是D:\OpenCV,所以是:

然后引入dll,我是64位機子,所以是:

Ok,下面創(chuàng)建Java項目做Java與OpenCV的人臉識別。

人臉識別

創(chuàng)建項目后首先右擊選擇Properties

然后引入即可。

引入haarcascade_frontalface_alt.xml這個xml文件:

我的pom文件如下:

 <dependencies>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 
 
 <dependency>
 <groupId>org.bytedeco.javacpp-presets</groupId>
 <artifactId>ffmpeg</artifactId>
 <version>3.1.2-1.2</version>
 </dependency>
 <dependency>
 <groupId>org.bytedeco</groupId>
 <artifactId>javacv</artifactId>
 <version>1.4.1</version>
 </dependency>
 <!-- https://mvnrepository.com/artifact/org.bytedeco.javacpp-presets/ffmpeg-platform -->
 <dependency>
 <groupId>org.bytedeco.javacpp-presets</groupId>
 <artifactId>ffmpeg-platform</artifactId>
 <version>3.4.2-1.4.1</version>
 </dependency>
 <dependency>
 <groupId>commons-io</groupId>
 <artifactId>commons-io</artifactId>
 <version>2.4</version>
 </dependency>
 
 
 <!-- 視頻攝像頭 -->
 <!-- https://mvnrepository.com/artifact/org.bytedeco/javacv-platform -->
 <dependency>
 <groupId>org.bytedeco</groupId>
 <artifactId>javacv-platform</artifactId>
 <version>1.4.1</version>
 </dependency>
 <!-- https://mvnrepository.com/artifact/org.bytedeco.javacpp-presets/opencv-platform -->
 <dependency>
 <groupId>org.bytedeco.javacpp-presets</groupId>
 <artifactId>opencv-platform</artifactId>
 <version>3.4.1-1.4.1</version>
 </dependency>
 
 <dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>4.12</version>
 <scope>test</scope>
 </dependency>
 
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 </dependency>
 </dependencies>

修改我的端口號:

server.port=8889

最后代碼如下:

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
 
import javax.servlet.http.HttpServletResponse;
 
import org.apache.commons.io.FileUtils;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
 
/* 
* @author zzf 
* @date 2019年1月17日 下午12:04:45 
*/
@RestController
public class OpenCVController {
 
 @Value("classpath:haarcascade_frontalface_alt.xml")
 private Resource xml;
 
 @PostMapping("/face")
 public void FaceDetector(HttpServletResponse response, MultipartFile file) throws IOException {
 // D:\workspace-sts-3.9.2.RELEASE\OpenCV\src\main\resources
 // String opencvpath = System.getProperty("user.dir") +
 // "\\src\\main\\resources\\";
 // String opencvDllName = opencvpath + Core.NATIVE_LIBRARY_NAME + ".dll";
 // System.load(opencvDllName);
 System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
 System.out.println("人臉檢測開始……");
 
 // 創(chuàng)建臨時文件,因為boot打包后無法讀取文件內的內容
 File targetXmlFile = new File("src/" + xml.getFilename() + "");
 FileUtils.copyInputStreamToFile(xml.getInputStream(), targetXmlFile);
 CascadeClassifier faceDetector = new CascadeClassifier(targetXmlFile.toString());
 if (faceDetector.empty()) {
 System.out.println("請引入文件……");
 return;
 }
 // 創(chuàng)建圖片tempFile
 File tempFile = new File("src/" + file.getOriginalFilename() + "");
 FileUtils.copyInputStreamToFile(file.getInputStream(), tempFile);
 
 // 讀取創(chuàng)建的圖片tempFile
 Mat image = Imgcodecs.imread(tempFile.toString());
 MatOfRect faceDetections = new MatOfRect();
 // 進行人臉檢測
 faceDetector.detectMultiScale(image, faceDetections);
 System.out.println(String.format("檢測到人臉: %s", faceDetections.toArray().length));
 Integer i = 1;
 // 制圖將圖填充到image中
 for (Rect rect : faceDetections.toArray()) {
 Imgproc.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
  new Scalar(0, 255, 0), 3);
 imageCut(tempFile.toString(), i+".jpg", rect.x, rect.y, rect.width, rect.height);// 進行圖片裁剪
 i++;
 }
 // 下面部分是返回給頁面
 String filename = file.getOriginalFilename();
 Imgcodecs.imwrite(filename, image);
 File imgFile = new File(filename);
 if (imgFile.exists()) {
 response.getOutputStream().write(toByteArray(imgFile));
 response.getOutputStream().close();
 }
 
 // 刪除臨時文件
 if (targetXmlFile.exists() && targetXmlFile.isFile()) {
 if (targetXmlFile.delete()) {
 System.out.println("刪除臨時文件" + targetXmlFile + "成功!");
 }
 }
 if (imgFile.exists() && imgFile.isFile()) {
 if (imgFile.delete()) {
 System.out.println("刪除臨時文件" + imgFile + "成功!");
 }
 }
 if (tempFile.exists() && tempFile.isFile()) {
 if (tempFile.delete()) {
 System.out.println("刪除臨時文件" + tempFile + "成功!");
 }
 }
 }
 
 public static void imageCut(String imagePath, String outFile, int posX, int posY, int width, int height) {
 // 原始圖像
 Mat image = Imgcodecs.imread(imagePath);
 // 截取的區(qū)域:參數,坐標X,坐標Y,截圖寬度,截圖長度
 Rect rect = new Rect(posX, posY, width, height);
 // 兩句效果一樣
 Mat sub = image.submat(rect); // Mat sub = new Mat(image,rect);
 Mat mat = new Mat();
 Size size = new Size(width, height);
 Imgproc.resize(sub, mat, size);// 將人臉進行截圖并保存
 Imgcodecs.imwrite(outFile, mat);
 System.out.println(String.format("圖片裁切成功,裁切后圖片文件為: %s", outFile));
 
 }
 
 public static byte[] toByteArray(File file) throws IOException {
 File f = file;
 if (!f.exists()) {
 throw new FileNotFoundException("file not exists");
 }
 ByteArrayOutputStream bos = new ByteArrayOutputStream((int) f.length());
 BufferedInputStream in = null;
 try {
 in = new BufferedInputStream(new FileInputStream(f));
 int buf_size = 1024;
 byte[] buffer = new byte[buf_size];
 int len = 0;
 while (-1 != (len = in.read(buffer, 0, buf_size))) {
 bos.write(buffer, 0, len);
 }
 return bos.toByteArray();
 } catch (IOException e) {
 e.printStackTrace();
 throw e;
 } finally {
 try {
 in.close();
 } catch (IOException e) {
 e.printStackTrace();
 }
 bos.close();
 }
 }
 
}

下面來一張我男神們的合照

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java 8 新特性終極版指南詳解

    Java 8 新特性終極版指南詳解

    Java 8已經公布有一段時間了,種種跡象表明Java 8是一個有重大改變的發(fā)行版。本文給大家介紹Java 8 新特性終極版指南詳解,需要的朋友參考下
    2016-03-03
  • Java微信公眾平臺之獲取地理位置

    Java微信公眾平臺之獲取地理位置

    這篇文章主要為大家詳細介紹了Java微信公眾平臺之獲取地理位置的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • java 方法重寫與權限修飾符以及多態(tài)和抽象類詳解概念和用法

    java 方法重寫與權限修飾符以及多態(tài)和抽象類詳解概念和用法

    重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。即外殼不變,核心重寫,權限修飾符用于控制被修飾變量、方法、類的可見范圍,說明了面向對象的封裝性,所以我們要適用他們盡可能的讓權限降到最低,從而安全性提高
    2021-10-10
  • IDEA中Git的配置及其使用過程

    IDEA中Git的配置及其使用過程

    本文介紹了如何在IntelliJ IDEA中配置和使用Git,包括配置Git路徑、克隆項目、更新代碼、提交和推送代碼、合并分支、管理分支以及將本地項目推送到GitHub
    2025-12-12
  • Java Spring中Bean配置核心規(guī)則id、name、ref的用法與區(qū)別解析

    Java Spring中Bean配置核心規(guī)則id、name、ref的用法與區(qū)別解析

    本文詳解Spring XML中Bean配置的id、name、ref屬性用法與區(qū)別,涵蓋唯一性、命名規(guī)范及依賴引用規(guī)則,分析常見錯誤,幫助開發(fā)者正確配置Bean并掌握依賴注入邏輯,為整合其他框架打下基礎,感興趣的朋友一起看看吧
    2025-07-07
  • springboot整合TDengine全過程

    springboot整合TDengine全過程

    這篇文章主要介紹了springboot整合TDengine全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Java中簡單實用Quartz概述

    Java中簡單實用Quartz概述

    Quartz是一個開源的Java調度框架,可以用來實現在指定的時間或時間間隔觸發(fā)任務執(zhí)行的功能,這篇文章主要介紹了Java中簡單實用Quartz,需要的朋友可以參考下
    2023-02-02
  • SpringBoot--Banner的定制和關閉操作

    SpringBoot--Banner的定制和關閉操作

    這篇文章主要介紹了SpringBoot--Banner的定制和關閉操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2018-05-05
  • Java實現茶葉售賣商城系統(tǒng)(java+SSM+JSP+EasyUi+mysql)

    Java實現茶葉售賣商城系統(tǒng)(java+SSM+JSP+EasyUi+mysql)

    這篇文章主要介紹了基于SSM框架實現的一個茶葉售賣商城系統(tǒng),應用到的技術有Jsp、SSM 、EasyUi,文中的示例代碼具有一定的學習價值,需要的朋友可以參考一下
    2021-12-12
  • 解決springboot生成bean名稱沖突(AnnotationBeanNameGenerator)

    解決springboot生成bean名稱沖突(AnnotationBeanNameGenerator)

    這篇文章主要介紹了解決springboot生成bean名稱沖突(AnnotationBeanNameGenerator),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論

垦利县| 铜梁县| 毕节市| 临潭县| 章丘市| 民勤县| 石柱| 陵川县| 托克逊县| 华亭县| 黑龙江省| 临海市| 社会| 蒙山县| 临泽县| 福安市| 屯留县| 浠水县| 耒阳市| 山阳县| 秀山| 平安县| 抚顺县| 永泰县| 青阳县| 司法| 兖州市| 榕江县| 开原市| 新乡县| 宝应县| 澜沧| 吉首市| 靖江市| 临江市| 新郑市| 清水河县| 富川| 宜都市| 连山| 兰州市|