电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

SpringBoot使用OpenCV示例總結

瀏覽:11日期:2023-05-03 08:35:10

前言

最近有個項目需要對圖片圖像進行處理,使用到了開源框架OpenCV全稱是Open Source Computer Vision Library,是一個跨平臺的計算機視覺庫;而現在的項目都是基于SpringBoot,需要把OpenCv整合進去,下面把在使用中遇到的問題進行一個匯總整理。

下載安裝

Opencv官網提供了一個多個平臺的版本包括:Windows,IOS,Android,地址如下:opencv.org/releases/;因為開發在Windows平臺,發布在Linux平臺,所以我們這里至少需要兩個版本;

windows平臺

直接可以在官網下載opencv-3.4.10-vc14_vc15.exe安裝即可,安裝完會出現opencv文件夾在buildjava目錄下有我們需要的opencv-3410.jar,x64/opencv_java3410.dll,x86/opencv_java3410.dll文件;

Linux平臺

Linux平臺需要我們手動編譯,下載opencv-3.4.10.zip,解壓到/user/local目錄下,然后編譯安裝,執行如下命令:

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

安裝完之后可以在build/bin目錄下找到opencv-3410.jar,在build/lib目錄下找到libopencv_java3410.so

整合使用

兩個平臺分別安裝完之后,獲取了對應的dll和so文件;兩個平臺獲取到的jar都是一樣的,隨便用哪個都可以,下面看看如何使用

外部引用方式

通過把應用jar與本地庫文件進行分隔開,然后在項目中進行引用

相對路徑方式

可以通過System.loadLibrary來指定本地庫文件,但是這種方式需要在運行時指定-Djava.library.path,具體可以提供配置類:

@Configurationpublic class NativeConfig { static { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }}

運行時需要在VM arguments中添加-Djava.library.path=對應dll存放的路徑,不然會出現如下錯誤:

Caused by: java.lang.UnsatisfiedLinkError: no opencv_java3410 in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860) ~[na:1.8.0_251] at java.lang.Runtime.loadLibrary0(Runtime.java:870) ~[na:1.8.0_251] at java.lang.System.loadLibrary(System.java:1122) ~[na:1.8.0_251] at com.springboot.opencv.NativeConfig.<clinit>(NativeConfig.java:10) ~[classes/:na]

絕對路徑方式

可以通過System.load來指定本地庫函數的絕對路徑:

@Configurationpublic class NativeConfig { static { System.load('C:Usersopencvbuildjavax64opencv_java3410.dll'); }}

踩坑1

在IDE中運行使用Opencv功能的時候,出現如下錯誤:

java.lang.UnsatisfiedLinkError: org.opencv.imgcodecs.Imgcodecs.imread_1(Ljava/lang/String;)J at org.opencv.imgcodecs.Imgcodecs.imread_1(Native Method) ~[opencv-3.4.10.jar:unknown] at org.opencv.imgcodecs.Imgcodecs.imread(Imgcodecs.java:332) ~[opencv-3.4.10.jar:unknown] at com.springboot.opencv.OpenCVController.testOpenCV(OpenCVController.java:13) ~[classes/:na]

很明顯是在使用jar包里面的方法時沒有找到對應的本地庫函數,也就是說loadLibrary沒有成功,但是之前其實在本地Java項目中是有進行測試的,可以通過的,猜測是不是使用了什么工具導致加載失敗,最終鎖定在spring-boot-devtools工具包,提供了動態加載等功能,直接移除此工具包,或者配置如下開關:

System.setProperty('spring.devtools.restart.enabled', 'false');

內部引用方式

為了更加簡單部署,可以把本地庫文件和項目文件打成一個jar包,可以把本地庫文件放在resources目錄下,這樣可以打成一個jar包,現在的主要問題就是如何加載jar包里面的本地庫文件,通過測試發現可以讀取到resources目錄下的庫文件,但是通過system.load并不能去加載成功,對應的是一個類似如下的路徑:

file:/C:/Users/Administrator.SKY-20170404CXG/Desktop/springboot-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/opencv

最后采用的方式是把讀取的庫文件,存放到系統的一個臨時文件夾下,然后拿到庫文件的絕對路徑,這樣就可以通過system.load直接去加載,具體實現代碼可以參考Github

踩坑2

在執行maven編譯打包的時候,發現本地庫文件(dll或者so文件)體積會變大,猜測maven在編譯的時候對本地庫文件也進行了編譯,具體如何禁用指定的文件格式編譯,而只需要拷貝即可:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>UTF-8</encoding> <!-- maven編譯下面擴展類型文件的時候直接復制原文件,而不會進行二次編碼--> <nonFilteredFileExtensions>dll,so</nonFilteredFileExtensions> </configuration></plugin>

第三方Jar包

除了以上兩種需要我們自己去實現加載的方式,其實還可以直接使用第三方提供的jar包OpenPnp,里面包含了OpenCV.jar,對應各個平臺的本地庫,以及加載本地庫的封裝類;查看其源碼可以發現,其實也是通過判斷當前系統,然后將對應的本地庫文件拷貝到系統的臨時文件夾下,最后通過system.load去加載:

Files.createTempDirectory(`opencv_openpnp`);

因為此包兼顧了所有平臺,所以整個包有點大,一百多M,如果部署的系統確定,其實可以自己去加載指定庫文件就可以了,然后以相同的方式打成一個公共包供各個系統使用;

總結

本文雖然介紹的是在項目中使用OpenCV的一些總結,但其實其他的本地庫也可以使用相同的方式;本文重點記錄一下在使用過程中遇到的那些坑,以及加載庫文件的方式。

到此這篇關于SpringBoot使用OpenCV示例總結的文章就介紹到這了,更多相關SpringBoot使用OpenCV內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 空心明胶胶囊|植物胶囊|清真胶囊|浙江绿键胶囊有限公司欢迎您! | 微型气泵-真空-蠕动-水泵-厂家-深圳市品亚科技有限公司 | 粉末包装机,拆包机厂家,价格-上海强牛包装机械设备有限公司 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 济南网站建设|济南建网站|济南网站建设公司【济南腾飞网络】【荐】 | 生物除臭剂-除味剂-植物-污水除臭剂厂家-携葵环保有限公司 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 防腐储罐_塑料储罐_PE储罐厂家_淄博富邦滚塑防腐设备科技有限公司 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 佛山市德信昌电子有限公司| 液压中心架,数控中心架,自定心中心架-烟台恒阳机电设计有限公司 行星搅拌机,双行星搅拌机,动力混合机,无锡米克斯行星搅拌机生产厂家 | 济南保安公司加盟挂靠-亮剑国际安保服务集团总部-山东保安公司|济南保安培训学校 | 济南轻型钢结构/济南铁艺护栏/济南铁艺大门-济南燕翔铁艺制品有限公司 | 电动葫芦|防爆钢丝绳电动葫芦|手拉葫芦-保定大力起重葫芦有限公司 | 润滑脂-高温润滑脂-轴承润滑脂-食品级润滑油-索科润滑油脂厂家 | 珠宝展柜-玻璃精品展柜-首饰珠宝展示柜定制-鸿钛展柜厂家 | 空气能采暖,热泵烘干机,空气源热水机组|设备|厂家,东莞高温热泵_正旭新能源 | 玖容气动液压设备有限公司-气液增压缸_压力机_增压机_铆接机_增压器 | 百方网-百方电气网,电工电气行业专业的B2B电子商务平台 | 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 今日扫码_溯源二维码_产品防伪一物一码_红包墙营销方案 | 活性氧化铝球|氧化铝干燥剂|分子筛干燥剂|氢氧化铝粉-淄博同心材料有限公司 | 噪声治理公司-噪音治理专业隔音降噪公司 | 商秀—企业短视频代运营_抖音企业号托管 | 渗透仪-直剪仪-三轴仪|苏州昱创百科 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 澳威全屋定制官网|极简衣柜十大品牌|衣柜加盟代理|全屋定制招商 百度爱采购运营研究社社群-店铺托管-爱采购代运营-良言多米网络公司 | 臭氧灭菌箱-油桶加热箱-原料桶加热融化烘箱-南京腾阳干燥设备厂 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 精密冲床,高速冲床等冲压设备生产商-常州晋志德压力机厂 | 附着力促进剂-尼龙处理剂-PP处理剂-金属附着力处理剂-东莞市炅盛塑胶科技有限公司 | 低温柔性试验仪-土工布淤堵-沥青车辙试验仪-莱博特(天津)试验机有限公司 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | PO膜_灌浆膜及地膜供应厂家 - 青州市鲁谊塑料厂 | 上海佳武自动化科技有限公司 | 冻干机(冷冻干燥机)_小型|实验型|食品真空冷冻干燥机-松源 | 穿线管|波纹穿线管|包塑金属软管|蛇皮管?闵彬专注弱电工程? | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 挖掘机挖斗和铲斗生产厂家选择徐州崛起机械制造有限公司 |