日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

springboot集成opencv實現(xiàn)人臉識別功能的詳細(xì)步驟

瀏覽:123日期:2023-03-05 15:35:32
目錄前言什么是opencv?項目集成步驟準(zhǔn)備工作代碼Linux安裝opencvLinux啟動github直接白嫖前言

項目中檢測人臉圖片是否合法的功能,之前用的是百度的人臉識別接口,由于成本高昂不得不尋求替代方案。

什么是opencv?

OpenCV是一個基于BSD許可(開源)發(fā)行的跨平臺計算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。輕量級而且高效——由一系列 C 函數(shù)和少量 C++ 類構(gòu)成,同時提供了Python、Java、MATLAB等語言的接口,實現(xiàn)了圖像處理和計算機(jī)視覺方面的很多通用算法。

項目集成步驟

由于項目是放在Linux系統(tǒng)中跑的,開發(fā)環(huán)境是Windows10,所以項目中涉及到opencv的要分兩套。

準(zhǔn)備工作

Windows安裝opencv

opencv官網(wǎng)下載安裝包https://opencv.org/releases/

springboot集成opencv實現(xiàn)人臉識別功能的詳細(xì)步驟

我這里選擇的是4.1.1版本分別下載了Windows版本和源碼

springboot集成opencv實現(xiàn)人臉識別功能的詳細(xì)步驟

Windows環(huán)境下集成

安裝opencv,沒什么說的,指定一個路徑安裝即可,注意安裝路徑不能是中文。項目中集成的三個關(guān)鍵點(diǎn)

引入jar依賴 讀取OpenCV自帶的人臉識別特征XML文件 配置opencv的庫文件地址

關(guān)鍵點(diǎn)1:引入jar包

jar包位置在安裝路徑下的java文件夾中

springboot集成opencv實現(xiàn)人臉識別功能的詳細(xì)步驟

兩種方式引入

方式一:idea添加jar

springboot集成opencv實現(xiàn)人臉識別功能的詳細(xì)步驟

或者直接在Libraries中添加二者皆可。

方式二:將jar上傳至私服,在maven中引入

我這里是將jar上傳至私服,然后引用的。注意Windows版的jar和Linux中的jar不一樣,二者要區(qū)分開來通過Maven配置在不同環(huán)境下加載不同的jar

<profiles> <profile><id>dev</id><dependencies><!-- 本地引用--><!--<dependency>--><!-- <groupId>op</groupId>--><!-- <artifactId>opencv</artifactId>--><!-- <version>411</version>--><!-- <scope>system</scope>--><!-- <systemPath>--><!--${project.basedir}/src/main/resources/opencv/windows/opencv-411.jar--><!-- </systemPath>--><!--</dependency>--> <!-- 倉庫引用--> <dependency> <!--這里改成自己的倉庫地址--><groupId>com.***.cloud.resource</groupId><artifactId>opencv-window</artifactId><version>411</version> </dependency></dependencies><activation> <activeByDefault>true</activeByDefault></activation> </profile> <profile><id>test</id><dependencies> <dependency> <!--這里改成自己的倉庫地址--><groupId>com.***.cloud.resource</groupId><artifactId>opencv-linux</artifactId><version>411</version> </dependency></dependencies> </profile></profiles>

關(guān)鍵點(diǎn)2:配置人臉識別特征XML文件的地址

在bootstrap.yml添加如下參數(shù)

# 函數(shù)庫地址 在 vm optionis中 配置# windows地址: -Djava.library.path=D:softwareopencvbuildjavax64# linux地址: -Djava.library.path=/usr/local/opencv-4.1.1/build/lib/opencv: lib: linuxxmlpath: /usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml windowxmlpath: D:softwareopencvsourcesdatahaarcascadeshaarcascade_frontalface_alt.xml

測試的方法中就直接寫死了

/** * 初始化人臉探測器 */ static CascadeClassifier faceDetector; static {String systemProperties = String.valueOf(System.getProperties());log.info(systemProperties);System.loadLibrary(Core.NATIVE_LIBRARY_NAME);faceDetector = new CascadeClassifier('D:softwareopencvsourcesdatahaarcascadeshaarcascade_frontalface_alt.xml'); }

注意路徑!!

關(guān)鍵點(diǎn)3:配置opencv的庫文件地址

springboot集成opencv實現(xiàn)人臉識別功能的詳細(xì)步驟

-Djava.library.path=D:softwareopencvbuildjavax64

這里其實指向的就是 該目錄下的 opencv_java411.dll 文件(linux的配置見下文)

代碼

測試方法

package com.example.opencvdemo.test;import lombok.extern.slf4j.Slf4j;import org.opencv.core.*;import org.opencv.highgui.HighGui;import org.opencv.imgcodecs.Imgcodecs;import org.opencv.imgproc.Imgproc;import org.opencv.objdetect.CascadeClassifier;/** * @author aaron * @since 2021-06-07 */@Slf4jpublic class FaceVideo { /** * 初始化人臉探測器 */ static CascadeClassifier faceDetector; static {String systemProperties = String.valueOf(System.getProperties());log.info(systemProperties);System.loadLibrary(Core.NATIVE_LIBRARY_NAME);faceDetector = new CascadeClassifier('D:softwareopencvsourcesdatahaarcascadeshaarcascade_frontalface_alt.xml'); } public static void main(String[] args){// 3- 本地圖片人臉識別,識別成功并保存人臉圖片到本地String imgPath = 'C:UsersAdministratorPictureswang.jpg';face(imgPath); } /** * OpenCV-4.1.1 圖片人臉識別 * * @return: void * @date: 2019年5月7日12:16:55 */ public static void face(String imgPath) {/** * 讀取本地 */Mat image = Imgcodecs.imread(imgPath);if (image.empty()) { System.out.println('image 內(nèi)容不存在!'); return;}// 3 特征匹配MatOfRect face = new MatOfRect();faceDetector.detectMultiScale(image, face);// 4 匹配 Rect 矩陣 數(shù)組Rect[] rects = face.toArray();System.out.println('匹配到 ' + rects.length + ' 個人臉');// 5 為每張識別到的人臉畫一個圈int i = 1;for (Rect rect : face.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(imgPath, 'D:pictures' + i + '.jpg', rect.x, rect.y, rect.width, rect.height);// 進(jìn)行圖片裁剪 i++;}// 6 展示圖片HighGui.imshow('人臉識別', image);HighGui.waitKey(0); } /** * 裁剪人臉 * * @param imagePath * @param outFile * @param posX * @param posY * @param width * @param height */ public static void imageCut(String imagePath, String outFile, int posX, int posY, int width, int height) {// 原始圖像Mat image = Imgcodecs.imread(imagePath);// 截取的區(qū)域:參數(shù),坐標(biāo)X,坐標(biāo)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);// 將人臉進(jìn)行截圖并保存Imgcodecs.imwrite(outFile, mat);System.out.println(String.format('圖片裁切成功,裁切后圖片文件為: %s', outFile)); }}

注意!Mat image = Imgcodecs.imread(imgPath);imgPath中不能帶有中文! opencv安裝路徑中如果有中文的話就會報錯。

集成到Springboot

package com.example.opencvdemo.util;import com.example.opencvdemo.exception.PublicException;import com.example.opencvdemo.result.ErrorCode;import com.google.common.primitives.Bytes;import lombok.extern.slf4j.Slf4j;import org.opencv.core.*;import org.opencv.imgcodecs.Imgcodecs;import org.opencv.objdetect.CascadeClassifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.CommandLineRunner;import org.springframework.stereotype.Component;import java.io.*;import java.net.URL;import java.net.URLConnection;import java.util.ArrayList;import java.util.List;/** * @author aaron * @since 2021-06-07 */@Component@Slf4jpublic class OpenCvUtils implements CommandLineRunner { @Value('${opencv.lib.linuxxmlpath}') private String linuxXmlPath; @Value('${opencv.lib.windowxmlpath}') private String windowXmlPath; /** * 人臉探測器對象 */ static CascadeClassifier faceDetector; /** * 判斷是否是Windows系統(tǒng) */ private static final boolean IS_WINDOWS = System.getProperty('os.name').toLowerCase().contains('win'); /** * 監(jiān)測圖片是否合法,是否只有一張臉 */ public static void checkFace(String pictureUrl) throws Exception {////將在線圖片保存為本地圖片//String imgPath = saveLocal(pictureUrl);////本地圖片//File file = new File(imgPath);//FileInputStream fileInputStream = new FileInputStream(file);//ByteArrayOutputStream out = new ByteArrayOutputStream();//byte[] localBuff = new byte[fileInputStream.available()];//fileInputStream.read(localBuff);//out.write(localBuff);//log.info('本地圖片:'+localBuff.length);//在線圖片URL url = new URL(pictureUrl);URLConnection uc = url.openConnection();InputStream inputStream = uc.getInputStream();ByteArrayOutputStream swapStream = new ByteArrayOutputStream();byte[] buff = new byte[1024];int rc;while ((rc = inputStream.read(buff, 0, 1024)) > 0) { swapStream.write(buff, 0, rc);}byte[] urlBuff = swapStream.toByteArray();log.info('在線圖片:'+urlBuff.length);List<Byte> bs = new ArrayList<>();bs.addAll(Bytes.asList(urlBuff));log.info('buffer長度'+bs.size());/** * 不好使 *///Mat image = Converters.vector_char_to_Mat(bs);//Mat image = Converters.vector_uchar_to_Mat(bs);/** * 讀取本地 *///Mat image = Imgcodecs.imread(imgPath);/** * 讀數(shù)據(jù)流 */Mat image = Imgcodecs.imdecode(new MatOfByte(urlBuff), Imgcodecs.IMREAD_UNCHANGED);if (image.empty()) { log.error('image 內(nèi)容不存在!'); return;}// 3 特征匹配MatOfRect face = new MatOfRect();faceDetector.detectMultiScale(image, face);// 4 匹配 Rect 矩陣 數(shù)組Rect[] rects = face.toArray();System.out.println('匹配到 ' + rects.length + ' 個人臉');//delFile(imgPath);if (rects.length == 0) { throw new PublicException(ErrorCode.A0430.getCode(), '沒有監(jiān)測到人臉');} else if (rects.length > 1) { throw new PublicException(ErrorCode.A0430.getCode(), '檢測到圖片有多張人臉,請重新上傳');} } public static String saveLocal(String pictureUrl) throws IOException {URL url = new URL(pictureUrl);URLConnection uc = url.openConnection();InputStream inputStream = uc.getInputStream();String[] value = pictureUrl.split('/');String firstFilePath = 'D:pictures';if (!IS_WINDOWS) { firstFilePath = '/tmp/tmp-picture/';}String fileName = firstFilePath + value[value.length - 1];FileOutputStream out = new FileOutputStream(fileName);int j = 0;while ((j = inputStream.read()) != -1) { out.write(j);}inputStream.close();return fileName; } /** * Callback used to run the bean. * * @param args incoming main method arguments * @throws Exception on error */ @Override public void run(String... args){String systemProperties = String.valueOf(System.getProperties());log.info(systemProperties);System.loadLibrary(Core.NATIVE_LIBRARY_NAME);String path = '';//如果是window系統(tǒng)取出路徑開頭的/if (IS_WINDOWS) { path = windowXmlPath;}else{ path = linuxXmlPath;}/** * 初始化人臉探測器 */faceDetector = new CascadeClassifier(path);log.info('==========初始化人臉探測器成功==========='); }}

OpenCV 提供的 API 是直接根據(jù)路徑讀取圖片的,所以最開始的時候我是把圖片保存到本地在讀取才成功的,但是這種方式太憨了點(diǎn),在實際生產(chǎn)環(huán)境中,大部分情況下都是直接讀取網(wǎng)絡(luò)圖片。在內(nèi)存就完成圖片和 opencv 的 Mat 對象的轉(zhuǎn)換。這里代碼中已經(jīng)解決了url地址圖片轉(zhuǎn)化的問題。這里附上解決該問題的博客 傳送門

Linux安裝opencv

Linux平臺須要咱們手動編譯,下載opencv-4.1.1.zip,解壓到/user/local目錄下,而后編譯

yum install ant gcc gtk2-devel pkgconfig zlib-devel

安裝unzip命令

yum install -y unzip zip

解壓命令

unzip opencv-4.1.1.zip

yum groupinstall 'Development Tools'

安裝cmake

查看cmake當(dāng)前版本

cmake --version

yum -y install wget

下載獲得cmake-3.9.2源碼

wget https://cmake.org/files/v3.9/cmake-3.9.2.tar.gz

解壓、安裝新版本

tar -xvf cmake-3.9.2.tar.gzcd cmake-3.9.2./configuresudo make && make install

cd /usr/local/opencv-4.1.1mkdir buildcd buildcmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DBUILD_TESTS=OFF ..make -j8sudo make install

對應(yīng)的jar和.so文件在

/usr/local/share/java/opencv4/

springboot集成opencv實現(xiàn)人臉識別功能的詳細(xì)步驟

人臉識別特征XML文件的地址

/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xmlLinux啟動

jar 啟動命令添加Vm options

nohup java -jar -Djava.library.path=/usr/local/opencv-4.1.1/build/lib/ opencv-demo-1.0.jar > logs/opencv-demo-1.0.log 2>&1 &github直接白嫖

項目代碼已上傳至github,可通過web接口測試,也可用main方法測試。傳送門

參考博客地址https://blog.csdn.net/fangchao2011/article/details/99858927https://blog.csdn.net/eggtargaryen/article/details/83343358https://blog.csdn.net/wangyulj/article/details/79058390https://blog.csdn.net/qq_25775675/article/details/107808544?https://lequ7.com/guan-yu-springbootspringboot-shi-yong-opencv-zong-jie.htmlutm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242https://blog.csdn.net/whudee/article/details/93379780

以上就是springboot集成opencv實現(xiàn)人臉識別功能的詳細(xì)內(nèi)容,更多關(guān)于springboot opencv人臉識別的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区二区三区亚洲| 免费毛片在线不卡| 久久高清免费观看| 欧洲精品一区二区三区| 黑森林国产精品av| 久久精品亚洲人成影院 | 日韩久久精品网| 九九精品调教| 精品成人免费一区二区在线播放| 欧美sss在线视频| 激情婷婷综合| 婷婷亚洲成人| 国产欧美亚洲一区| 欧美国产先锋| 在线人成日本视频| 国产日韩专区| 欧美日韩一区二区三区在线电影| 精品一区电影| 欧美69视频| 日韩精品免费视频一区二区三区| 国产精品免费精品自在线观看| 久久精品国产在热久久| 日韩欧美少妇| 日韩精品亚洲一区二区三区免费| 国产精品nxnn| 久久精品av| 日韩av一区二区三区| 91中文字幕精品永久在线| 亚洲v在线看| 亚洲区欧美区| 国产一区丝袜| 亚洲香蕉视频| 超碰99在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精久久久| 视频一区中文字幕| 国产精品福利在线观看播放| 国产午夜久久| 国产成人精品一区二区三区在线| 亚洲欧美日韩专区| 成人亚洲一区二区| 中文字幕日韩亚洲| 91综合视频| 亚洲性视频在线| 成人亚洲欧美| 国产调教一区二区三区| 美女少妇全过程你懂的久久| 国产精品大片免费观看| 亚洲一区二区动漫| 麻豆国产在线| 国产精品1区| 亚洲一二av| 国产中文一区| 麻豆91精品视频| 天堂成人国产精品一区| 高清在线一区| 天堂久久av| 国产综合精品一区| 久久在线91| 五月亚洲婷婷 | 国产日韩欧美三区| 亚洲精品888| 久久中文字幕导航| 亚洲色图网站| 欧美影院三区| 国产精品毛片久久| 国产精品亚洲四区在线观看| 美国欧美日韩国产在线播放| 欧洲av不卡| 久久亚洲精品中文字幕| 777久久精品| 亚洲精品乱码| 男女性色大片免费观看一区二区| 香蕉久久99| 色天使综合视频| 欧美xxxx中国| 美日韩一区二区三区| 日韩av不卡在线观看| 日本欧美在线看| 99日韩精品| 亚洲va中文在线播放免费| 久久久久九九精品影院| 国产精品免费不| 国产欧美69| 国产欧美久久一区二区三区| 在线精品亚洲| 免费不卡在线观看| 久久成人精品| 亚洲免费婷婷| 99国产一区| 国产精品腿扒开做爽爽爽挤奶网站| 丝袜美腿诱惑一区二区三区| 欧美aa在线观看| 欧美freesex黑人又粗又大| 欧美国产一级| 高清av一区| 亚洲三级欧美| 日韩三区免费| 免费高潮视频95在线观看网站| 成人国产精品久久| av高清不卡| 国产91精品对白在线播放| 欧美日韩中文字幕一区二区三区 | 九九久久国产| 精品国产不卡| 国产精品二区不卡| 日本不良网站在线观看| 久久影院午夜精品| 一本大道色婷婷在线| 成人精品中文字幕| 欧美午夜不卡影院在线观看完整版免费| 欧美1区免费| 另类激情亚洲| 日韩国产欧美一区二区三区| 国产精品一区二区精品视频观看 | 在线 亚洲欧美在线综合一区| 亚洲深夜福利| 午夜久久av| 国产精品自拍区| 国产中文欧美日韩在线| 99精品在线免费在线观看| 九九综合九九| 青青伊人久久| 成人一二三区| 999在线观看精品免费不卡网站| 免费在线观看一区二区三区| 国产丝袜一区| 日韩免费久久| 美国欧美日韩国产在线播放| 国产精品一区亚洲| 亚洲国产福利| 国产亚洲福利| 国产精品网址| 久久青青视频| 午夜一级久久| 久久av影视| 在线精品小视频| 国产精品天天看天天狠| 日韩精品一区二区三区免费观影| 午夜在线一区| 久久久久久亚洲精品美女| 亚洲激情中文在线| 久久中文字幕一区二区三区| 午夜日本精品| 久久久国产精品网站| 自拍日韩欧美| 毛片不卡一区二区| 亚洲免费黄色| 国产精品亚洲产品| 狠狠色狠狠色综合日日tαg| 国产精品自在| 亚洲黄页一区| 国产一区二区三区黄网站| 免费观看在线综合| 日韩欧美不卡| 欧美亚洲三级| 婷婷亚洲综合| 国产+成+人+亚洲欧洲在线| 免费视频一区二区| 午夜av不卡| 国产乱人伦丫前精品视频| 亚洲国产专区| 久久这里只有| 亚洲精品影视| 久久亚洲在线| 久久天堂影院| 亚洲欧美专区| 欧美a级片一区| 欧美www视频在线观看| 欧美久久亚洲| 国产美女一区| 丝袜美腿诱惑一区二区三区 | 亚洲永久字幕| 亚洲啊v在线| 免费在线日韩av| 亚洲精品麻豆| 欧美日韩国产探花| 国产一区二区三区免费在线| 日韩极品在线观看| 石原莉奈一区二区三区在线观看| 成人三级高清视频在线看| 日韩国产欧美三级| 日韩在线一二三区| 亚洲精品一二三区区别| 午夜av成人| 成人小电影网站| 高清一区二区三区| 欧美黑人做爰爽爽爽| 欧美在线91| 日本不卡高清| 午夜天堂精品久久久久| 国产精品呻吟| 久久久成人网| 欧美日韩国产观看视频| 成人在线视频区| 欧美国产先锋| 国产黄色一区| 美腿丝袜亚洲一区| 久久超级碰碰| 久久女人天堂|