I'm currently attempting to start a project using JavaCV in Kotlin. I'm using IntelliJ Idea as my IDE. I'm using JavaCV 1.3.2 and OpenCV 3.20.
This is my setup for the module's dependancies for OpenCV:
and for JavaCV:
I have opencv before javacv in the dependancies.
To test that OpenCV is present and valid, I wrote the below to test. As I can loadLibrary and the version number shows correctly I can assume that OpenCV is actually working.
import org.opencv.core.Core
import org.opencv.core.Mat
import org.opencv.core.CvType
import org.opencv.core.Scalar
import org.bytedeco.javacv.OpenCVFrameGrabber
fun main(args : Array<String>) {
println("Test Built Successfully")
System.loadLibrary(Core.NATIVE_LIBRARY_NAME)
println("Running OpenCV Version ${Core.VERSION}")
val grabber = OpenCVFrameGrabber(1)
}
The line where we initialize the grabber rasies the following exception:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jniopencv_core in java.library.path
Caused by: java.lang.UnsatisfiedLinkError: no opencv_imgproc320 in java.library.path
Perhaps I am missing something here, but I have followed the instructions provided by the README.md in the Git repository for JavaCV. I haven't seen anybody else trying to use this library with Kotlin on StackOverflow, though have checked out some posts about the same exception being raised using java.
Handling this error is no different in Kotlin from Java; you need to specify the path to the native libraries for opencv. By default on Windows it will look for the native libraries in whatever is set in your PATH environment variable.
You can also explicitly specify which directory to look for the native libraries by specifying the system property java.library.path (as indicated by the error message).
For example, you can add a run configuration like this:
Where ${PATH_TO_DYNAMIC_LIB} would be where ever the native lib opencv_imgproc320.dll is - I think in your case it would be C:/Users/ms/IdeaProjects/CVTest/opencv/build/java/x64.
I was able to resolve this by leaving my VM options blank and adding all necessary OpenCV libraries as native library paths in my JavaCV library configuration.
on MacOS, you don't need to install a native library. On OpenCV3.41, as fetched from
<!-- https://mvnrepository.com/artifact/org.openpnp/opencv -->
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>3.4.2-1</version>
</dependency>
I looked in the library (jar tf ~/.m2/repository/org/openpnp/opencv/3.4.2-1/opencv-3.4.2.-1.jar) and found dlls and whatnot in it:
jar tf *1.jar | grep nu
...
nu/pattern/opencv/osx/
nu/pattern/opencv/osx/x86_64/
nu/pattern/opencv/osx/x86_64/README.md
nu/pattern/opencv/osx/x86_64/cmake.log
nu/pattern/opencv/osx/x86_64/libopencv_java342.dylib
...
This led me to this StackOverflow question on nu.pattern which show how to use the nu.pattern in code.
static {
nu.pattern.OpenCV.loadShared();
System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);
}
This prologue code enabled sample apps which used to fail as above to run.
Related
I am using latest dependency of Apache POI 4.1.2 in my java application together with Tika.
I realized that the class ImageHeaderPNG is missing with the following calls tack:
java.lang.NoClassDefFoundError: org/apache/poi/sl/image/ImageHeaderPNG
at org.apache.poi.hwpf.usermodel.Picture.fillImageContent(Picture.java:172)
at org.apache.poi.hwpf.usermodel.Picture.getContent(Picture.java:279)
Inside Tika:
org.apache.tika.parser.microsoft.WordExtractor.handlePictureCharacterRun(WordExtractor.java:560
at org.apache.tika.parser.microsoft.WordExtractor.handleParagraph(WordExtractor.java:365)
at org.apache.tika.parser.microsoft.WordExtractor.handleHeaderFooter(WordExtractor.java:257)
at org.apache.tika.parser.microsoft.WordExtractor.parse(WordExtractor.java:180)
at org.apache.tika.parser.microsoft.OfficeParser.parse(OfficeParser.java:175)
at org.apache.tika.parser.microsoft.OfficeParser.parse(OfficeParser.java:131)
at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:280)
at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:280)
at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:143)
at org.apache.tika.Tika.parseToString(Tika.java:527)
at org.apache.tika.Tika.parseToString(Tika.java:602)
Any idea, hints where this class was moved to?
According to the online documentation it should be available:
https://poi.apache.org/apidocs/dev/org/apache/poi/sl/image/package-frame.html
https://poi.apache.org/apidocs/dev/org/apache/poi/sl/image/ImageHeaderPNG.html
I am building Yocto 2.5(Sumo) with Gstreamer 1.14 and OpenCV 3.4.5
I am getting this error while compiling Gstreamer:
build_xwayland_mq/tmp/work/aarch64-mx8m-poky-linux/gstreamer1.0-plugins-bad/1.14.4.imx-r0/recipe-sysroot/usr/include/opencv2/imgproc/types_c.h:445:21: error: conflicting declaration of C function 'CvMoments cvMoments(const cv::Moments&)'
CV_INLINE CvMoments cvMoments(const cv::Moments& m)
same error in imgproc_c.h:360:13
I saw someone solved this by building with OpenCV 4 instead, but we need OpenCV 3.4.5 for our own project.
Anyone know how to resolve this conflict?
too long for comment..
I did just quick search, found this:
https://www.yoctoproject.org/pipermail/meta-freescale/2019-March/023888.html
There is some problem in includes .. I guess in mentioned hpp files there are some types that are not declared in that imgproc_c.h for 3.4, but already are moved there for opencv 4 (just my guess).
You just need to add those hpp on all places (in gst plugins bad) where you find include for imgproc_c.h.
Take inspiration from this.. or maybe it itself will solve your issue:
https://git.yoctoproject.org/cgit/cgit.cgi/meta-freescale/tree/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-opencv-fix-build-for-opencv-3-4-2.patch?h=thud
The patch is for yocto thud.. but perhaps it does not matter for GStreamer.
In worst case you will have to backport it or make your own patch for sumo.
Or if you can try update to thud (should be small difference) or newer and check if it persists.
I know... Another one of this... But no one else's error is the same as mine and I've been trying to build opencv with mingw32 for days now.
When building OpenCV with mingw the command mingw32-make fails at some point trying to compile sources\modules\ts\src\ts_gtest.cpp with error pic bellow:
I've tried following several tutorials, but none work cleanly and this is the best I could get stuff to work.
What I did:
Installed Mingw and added C:\Mingw\bin\ to PATH environment variable.
Installed CMake and added it too to PATH.
Extracted OpenCV to C:\ and created forlder C:\opencv\mingwBuild\
In CMake-GUI I define source folder as C:\opencv\sources\ and build folder as C:\opencv\mingwBuild\.
Hit Configure and select Mingw Makefiles, with 'Use default native compilers' (have also specified compilers explicitly and the result is the same.).
Hit Generate, which creates the Makefile.
I open C:\Mingw\msys\1.0\msys.bat to have a console with all variables loaded (have also tried directly from a simple cmd.exe, given that PATH is set for mingw, but I get the same error in compilation). Navigate to C:\opencv\mingwBuild\ and run mingw32-make.
And that's where the error shows up after a while. Any ideas?
Turns ou gTest was not compiling in Mingw for some reason.
As I don't intend to test my code (for now) I removed opencv_ts from instalation (by deselecting it in Cmake, after configuring and before generating).
Someone mentions, in the first link #Dan Masek refers, that GTest has this issue with type conversion under mingw. They say that you can edit ts_gtest.cpp to apply the correct conversion, according to error message. That may be a solution if you need this module.
Another comment in #Dan Masek's second link mentions that gcc's version 5 surpasses the issue, which version 4 has. So, getting a hold of such distro may also be a solution.
For me it seems to be fixed by applying this fix: https://github.com/msk-repo01/opencv/commit/9a1835ce6676836ce278d723da4ff55a8f900ff1
(Also see: https://github.com/opencv/opencv/issues/8105)
The fix basically replaces the "_RTL_CRITICAL_SECTION" by "_CRITICAL_SECTION" for MingW compilers in modules/ts/include/opencv2/ts/ts_gtest.h in the following way:
The lines
// assuming CRITICAL_SECTION is a typedef of _RTL_CRITICAL_SECTION.
// This assumption is verified by
// WindowsTypesTest.CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION.
struct _RTL_CRITICAL_SECTION;
(around line 723 in OpenCV 3.2.0 release from Dec. 2016) are replaced by
# if GTEST_OS_WINDOWS_MINGW
// MinGW defined _CRITICAL_SECTION and _RTL_CRITICAL_SECTION as two
// separate (equivalent) structs, instead of using typedef
typedef struct _CRITICAL_SECTION GTEST_CRITICAL_SECTION;
# else
// assuming CRITICAL_SECTION is a typedef of _RTL_CRITICAL_SECTION.
// This assumption is verified by
// WindowsTypesTest.CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION.
typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
# endif
and
_RTL_CRITICAL_SECTION* critical_section_;
is replaced by
GTEST_CRITICAL_SECTION* critical_section_;
I try to use the well known "jpeglib" now available in version 9.
Overview: I am a programming starter in C using MS Visual C++ 2010 Express and read a C-book finally. My goal is to compress a RGB(.bmp)-file into JPEG. So I downloaded the jpeglib (v9), read all the install and so on *.txt-files. It was possible to compile the C-files to get cjpeg.exe, djpeg.exe, jpeg.lib and so on.
After this success I tried to use the example.c to get deeper into the jpeg and to control the compression. -> It did not work. Then I tried to use the jpeglib included in OpenCV. Same non working result, while the OpenCV code samples are compiled successfully.
I googled lots of samples, problem solutions and tips how to use jpeglib. Most helpful information I found here. But in the result I was still not able to compile my own jpeg-tool or example.c (rewriting the write_JPEG_file() function ).
Question: What in the basics could be wrong, when every other programmer just uses #include "jpeglib.h" in their codes to run the jpeg functions successfully? For me including this file seems not to be enough. Because of that I have to ask you and to relaunch a one year old Question that also did not helped solving my probs. I can not give you a specific error message because of multiple attempts to solve those issues.
Here is my current MS-VC++2010 config for using OpenCV 2.4.6:
C/C++ -> General -> Additional Include Directories:
C:\opencv\build\include
C:\opencv\build\include\opencv
C:\opencv\build\include\opencv2
C:\opencv\include
C:\opencv\include\opencv
C:\opencv\include\opencv2
C:\opencv\3rdparty\libjpeg
Linker -> General -> Additional Library Directories:
C:\opencv\build\x86\vc10\lib
Linker -> Input -> Additional Dependencies:
opencv_core246d.lib
opencv_imgproc246d.lib
opencv_highgui246d.lib
opencv_ml246d.lib
opencv_video246d.lib
opencv_features2d246d.lib
opencv_calib3d246d.lib
opencv_objdetect246d.lib
opencv_contrib246d.lib
opencv_legacy246d.lib
opencv_flann246d.lib
jpeg.lib [this I added into C:\opencv\build\x86\vc10\lib]
At last some threads I have already read:
Compressing IplImage to JPEG using libjpeg in OpenCV - 1
Compressing IplImage to JPEG using libjpeg in OpenCV - 2
Need help in reading JPEG file using libjpeg
how can i use jpeg_mem_src, jpeg_mem_dest in libjpeg-turbo?
If there is something missing you want to know I will do my best to add this information!
EDIT - Some error messages:
1>jpeg_coder.obj : error LNK2001: unresolved external symbol ""unsigned char * image_buffer" (?image_buffer##3PAEA)".
1>jpeg_coder.obj : error LNK2001: unresolved external symbol ""int image_height" (?image_height##3HA)".
1>jpeg_coder.obj : error LNK2001: unresolved external symbol """int image_width" (?image_width##3HA)".
First symbol should be typedefed in jpeglib.h as JSAMPLE FAR *JSAMPROW,
second and third are defined in rdjpgcom.c as unsigned int image_height, image_width;
Maybe, with a lot of luck, I figured out what is need to be done to get jpeglib running. In the current state I have to check and double check whether my problem solution is correct or not. At this point thank you very much for your attention for my issues. As soon as I am sure with the solution I will post it.
Problem Solution: I did not setup OpenCV correctly for using jpeglib. The mistake I made was to link the wrong *.lib-file. The proper file for linking is libjpegd.lib. Too bad that jpeglib v6.2 is included in OpenCV 2.4.6 instead of v9. The hint to add HAVE_JPEG to use jpeglib functions inside OpenCV I ignored completely. For now the problem is solved.
Problem Solution: I did not setup OpenCV correctly for using jpeglib. The mistake I made was to link the wrong *.lib-file.
The proper file for linking is libjpegd.lib.
Too bad that jpeglib v6.2 is included in OpenCV 2.4.6 instead of v9. The hint to add HAVE_JPEG to use jpeglib functions inside OpenCV I ignored completely. Thanks to all who tried solving this issue. For now the problem is solved.
I use Emacs\Slime\SBCL\QuickLisp\Cygwin(new to Cywgin I know nothing really about it) I, per this GNU link http://common-lisp.net/project/gsll/, tried to follow these instructions under the download and install section:
"You will need to make sure that the libraries and header files associated with GNU Scientific Library (GSL) and libffi are installed; your distribution may name these libgsl0-dev and libffi-dev. Once they are installed and you have loaded the quicklisp file:
run (ql:quickload "gsll")"
but its not working . I get this error message in emacs when running (ql:quickload "gsll")
Unable to load any of the alternatives:
("libffi-6.dll" "libffi-5.dll" "libffi.dll")
[Condition of type CFFI:LOAD-FOREIGN-LIBRARY-ERROR]
I have quicklisp installed correctly i use it all the time so I know its not that ....I don't really understand this part of above excerpt from website(above)
"your distribution may name these libgsl0-dev and libffi-dev." Once they are installed and you have loaded the quicklisp file"
well I do kind of and quicklisp can't seem to find them with "(ql:system-apropos "libffi")" or "(ql:system-apropos "libffi")" also the website(above link) names these dependencies, I think here in this exerpt:
"Requirements
GSLL should work in any Common Lisp implementation and platform combination for which the following are supported:
GSL
CFFI and cffi-grovel, version 0.11.0 or newer; callbacks and foreign-funcall must be supported.
trivial-garbage
Antik
ASDF
Osicat
lisp-unit, (Optional) necessary to run the tests
FSBV, (Optional) necessary for functions using complex scalars or simulated annealing
iterate and asdf-system-connnections, (Optional) provides a convenient way to iterate over elements or indices of vectors or matrices."
of the above I have CFFI CFFI-Grovel,trivial garbage, asdf,iterate ,Antik(all from quicklisp) but still can't figure it out please help me with step by step instructions for Windows 8 64-bit with perfectly functioning Emacs\Slime\SBCL\QuickLisp\Cygwin installed and available...I would appreciate any and all advice..Thank You
Note: now of these - Excerpt from website http://comments.gmane.org/gmane.lisp.gsll/257"
To load "gsll":
Load 3 ASDF systems:
alexandria cl-ppcre split-sequence
Install 20 Quicklisp releases:
antik asdf-system-connections babel bordeaux-threads
cffi chunga cl+ssl cl-base64 drakma flexi-streams fsbv
gsll iterate osicat puri static-vectors
trivial-features trivial-garbage trivial-gray-streams
usocket"
I have all but Osicat. GSLL, and fsbv. When I try to load GSLL with
(ql:quickload "gsll")
I get:
Error while trying to load definition for system gsll from pathname
D:/Users/W/AppData/Roaming/quicklisp/dists/quicklisp/software/gsll-20130312-git/gsll.asd:
Unable to load any of the alternatives:
("libffi-6.dll" "libffi-5.dll" "libffi.dll")
[Condition of type ASDF:LOAD-SYSTEM-DEFINITION ERROR]
When I try to load Osicat with
(ql:quickload "osicat")
I get:
Error while invoking <COMPILE-OP (:VERBOSE NIL) {26FB8F59}> on
<CL-SOURCE-FILE "osicat" "src" "osicat">
[Condition of type ASDF:COMPILE-ERROR]
and quicklisp doesn't have FSBV.....Any Help would be appreciated.
;;;;;;;;;;;;;;;;EDIT;;;;;;;;;;;;;;;;;;;
#Nelson
Made new progress on this one ...I got past the:
"Error while trying to load definition for system gsll from pathname
D:/Users/W/AppData/Roaming/quicklisp/dists/quicklisp/software/gsll-20130312-git/gsll.asd:
Unable to load any of the alternatives:
("libffi-6.dll" "libffi-5.dll" "libffi.dll")
[Condition of type ASDF:LOAD-SYSTEM-DEFINITION ERROR]"
Error Message when I ran (ql:quickload "gsll") in Emacs. I did it by downloading the LIBFFI tarball from here:
http://sourceware.org/libffi/ ..the link at the top of page.
then i followed this tutorial http://phosphor-escence.blogspot.com/2011/08/build-libffi-and-libyaml-on-mingw-for.html
to build LIBFFI with a correctly installed MinGW(installed at C:\MinGW)
I learned to install MinGw correctly here: http://www.mingw.org/wiki/Getting_Started
after building LIBFFI I added its path - D:\libffi-3.0.13 - to my "system" Environment Variables "path" variable:
D: is my root drive.
I searched the D:\libffi-3.0.13 folder in Windows Explorer by putting *.dll in search bar, found libffi-6.dll
and put it in D:\Program Files (x86)\Steel Bank Common Lisp\1.1.4 so SBCL could access it , the libffi-6.dll
was named in the previous error message:
Error while trying to load definition for system gsll from pathname
D:/Users/W/AppData/Roaming/quicklisp/dists/quicklisp/software/gsll-20130312-git/gsll.asd:
Unable to load any of the alternatives:
("libffi-6.dll" "libffi-5.dll" "libffi.dll")
[Condition of type ASDF:LOAD-SYSTEM-DEFINITION ERROR]
Jobs not done though...now I'm getting this Error Message, Which I will start on Tomorrow:
"Error while trying to load definition for system gsll from
pathname
D:/Users/W/AppData/Roaming/quicklisp/dists/quicklisp/software/gsll-20130312-git/gsll.asd:
External process exited with code 1.
Command was: "C:/MinGW/bin/gcc.exe" "-m32" "-I/Program Files (x86)/Steel Bank Common Lisp/1.1.4/site/cffi/" "-o" "D:\Program Files (x86)\Steel Bank Common Lisp\1.1.4\site\cffi\libffi\libffi-win32.exe" "D:\Program Files (x86)\Steel Bank Common Lisp\1.1.4\site\cffi\libffi\libffi-win32.c"
Output was:
[Condition of type ASDF:LOAD-SYSTEM-DEFINITION-ERROR]"
Any help in the meantime would be appreciated:
;;;;;;;;;;SOLVED;;;;;;;;;;
A Tutorial link for it is coming soon and will posted right
under this point<-----here.
Here it is Fellow Lispers..I give you GSLL on Windows 7 AND 8: https://wnetai.wordpress.com/how-to-install-gsll_the-gnu-scientific-library-for-lisp-on-windows-7-and-windows-8/
and here is a link of GSLL Error Mesages and their Solutions: https://wnetai.wordpress.com/how-to-install-gsll_the-gnu-scientific-library-for-lisp-on-windows-7-and-windows-8/error-message-you-may-get-when-installing-gsll-and-their-solutions/
I'm working on a Database of Code Snippets for GSLL starting with Linear Algebra which will be on the same Blog as those upper two links so stay tuned here and on my Lisp Blog for those. Its basically a How to use GSLL Tutorial made with Code Snippets, Descriptions of the Snippets and Examples.
Your problem is that the development version of libffi (with header files) is not installed. There might be windows users on the cffi-devel mailing list that could help you with that; I recommend you post your question there. As far as the lisp libraries are concerned, quicklisp should take care of that and they are irrelevant to your problem. (And also, FSBV is obsolete and not needed; thanks for pointing out that the documentation needs to be updated.) (Also, emacs and slime are irrelevant to the problem, tags should be removed.)
It seems like you need to install those libraries into your system, you'll have to find the windows equivalents.
For debian/ubuntu : http://pkgs.org/download/libffi-dev
These aren't installed through quicklisp but through the system package manager, in your case you will have to find a windows compatible version and install it.
Any luck with getting GSLL to work on Windows 7? I've been trying to install the software and
have even used Dependency Walker to track any missing DLLs that might be needed but still have not been able to get it to run. I do have it running fine on Linux but I am looking to have it running under Window 7.