Hello,
I'm trying to run the QR code detection example on a Ubuntu 20.04.3 LTS 64-bit in a VirtualBox in Win10, but it seems PyBoof is not working properly. Running the DetectQrCodeApp from demonstrations.sh works just fine. The Python scripts are ran in a venv.
Running the qrcode_detect.py example as is or with any of the example images with QR codes says that no QR codes were detected without giving any error:
(AIKIT-env) mihail@myVB:~/AIKIT/PyBoof/examples$ python qrcode_detect.py
Launching Java process
Gateway Server Started
Detected a total of 0 QR Codes
Few examples do work, like:
gradient.py
object_tracking.py (actually tested only under Win10)
threshold_image.py
Others don't, like:
detect_lines.py (window with images shows, but no line can be seen, again no errors received)
video_mosaic.py, error recieved:
Launching Java process: java_port=25333 python_port=25334
Gateway Server Started
Traceback (most recent call last):
File "video_mosaic.py", line 15, in
config_tracker.klt.toleranceFB = 10.0
File "/home/mihail/AIKIT/AIKIT-env/lib/python3.8/site-packages/pyboof/common.py", line 95, in getattr
return object.getattribute(self, item)
AttributeError: 'ConfigPointTracker' object has no attribute 'klt'
estimate_camera_motion.py, error received:
Launching Java process: java_port=25333 python_port=25334
Gateway Server Started
Detected 3150 features in image 0
3179 image 1
Traceback (most recent call last):
File "estimate_camera_motion.py", line 40, in
matches = associator.associate()
File "/home/mihail/AIKIT/AIKIT-env/lib/python3.8/site-packages/pyboof/feature.py", line 205, in associate
output.append((association.src, association.dst, association.fitScore))
File "/home/mihail/AIKIT/AIKIT-env/lib/python3.8/site-packages/pyboof/common.py", line 44, in getattr
return object.getattribute(self, item)
AttributeError: 'JavaWrapper' object has no attribute 'src'
match_features.py, error received:
Launching Java process: java_port=25333 python_port=25334
Gateway Server Started
Traceback (most recent call last):
File "match_features.py", line 22, in
locs0, desc0 = feature_detector.detect(image0)
File "/home/mihail/AIKIT/AIKIT-env/lib/python3.8/site-packages/pyboof/feature.py", line 298, in detect
descriptions = b2p_list_descF64(java_descriptions)
File "/home/mihail/AIKIT/AIKIT-env/lib/python3.8/site-packages/pyboof/feature.py", line 42, in b2p_list_descF64
mmap_list_TupleF64_to_python(boof_list, pylist)
File "/home/mihail/AIKIT/AIKIT-env/lib/python3.8/site-packages/pyboof/feature.py", line 641, in mmap_list_TupleF64_to_python
gateway.jvm.pyboof.PyBoofEntryPoint.mmap.write_List_TupleF64(java_list, num_read)
File "/home/mihail/AIKIT/AIKIT-env/lib/python3.8/site-packages/py4j/java_gateway.py", line 1321, in call
return_value = get_return_value(
File "/home/mihail/AIKIT/AIKIT-env/lib/python3.8/site-packages/py4j/protocol.py", line 326, in get_return_value
raise Py4JJavaError(
py4j.protocol.Py4JJavaError: An error occurred while calling o55.write_List_TupleF64.
: java.lang.IndexOutOfBoundsException: Index 5892 out of bounds for length 5892
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
at java.base/java.util.Objects.checkIndex(Objects.java:359)
at java.base/java.util.ArrayList.get(ArrayList.java:427)
at pyboof.BoofMemoryMapped.write_List_TupleF64(BoofMemoryMapped.java:75)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
at py4j.Gateway.invoke(Gateway.java:282)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.GatewayConnection.run(GatewayConnection.java:238)
at java.base/java.lang.Thread.run(Thread.java:833)
I tried different PyBoof versions as well: 0.39.1.post1, 0.38.0, 0.36.0.
Python 3.8.10
JDK installed from zulu17.30.15-ca-jdk17.0.1-linux_amd64.deb
I get similar success running PyBoof directly on Win10 with Python 3.9.9 and Oracle jdk-17_windows-x64. Same examples work and the ones that don't work give same error. Running the DetectQrCodeApp from demonstrations.bat works with the exception that the movie.mp4 example hangs up after just about 1 second, but I could live with this one.
I have no idea where to search for a possible problem/mistake, so any hint would be useful. The only thing I've still didn't tried is, to use Python 3.5, because the requirement is Python >=3, isn't it?
Thanks!
Mihail
P.S. Building from source fails on both Ubuntu and Win10. Small part from the output from Ubuntu:
(AIKIT-env) mihail@myVB:~/AIKIT/PyBoof$ ./setup.py build
/home/mihail/AIKIT/AIKIT-env/lib/python3.8/site-packages/setuptools/dist.py:473: UserWarning: Normalizing '0.39.1r1' to '0.39.1.post1'
warnings.warn(
running build
running build_py
Starting a Gradle Daemon (subsequent builds will be faster)
FAILURE: Build failed with an exception.
-
Where:
Build file '/home/mihail/AIKIT/PyBoof/build.gradle'
-
What went wrong:
Could not compile build file '/home/mihail/AIKIT/PyBoof/build.gradle'.
startup failed:
General error during semantic analysis: Unsupported class file major version 61
java.lang.IllegalArgumentException: Unsupported class file major version 61
at groovyjarjarasm.asm.ClassReader.(ClassReader.java:196)
at groovyjarjarasm.asm.ClassReader.(ClassReader.java:177)
at groovyjarjarasm.asm.ClassReader.(ClassReader.java:163)
at groovyjarjarasm.asm.ClassReader.(ClassReader.java:284)
at org.codehaus.groovy.ast.decompiled.AsmDecompiler.parseClass(AsmDecompiler.java:81)
at org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:251)
......
EDIT: I just found out, that the tools I actually need are the fiducial functions. So I tried to run the examples:
fiducial_square_aruco.py
fiducial_square_binary_3D.py
fiducial_square_image_3D.py
and all three are only working without intrinsics, which is of no use to me, as I need the 3D position. Otherwise I get the following error:
Launching Java process: java_port=25333 python_port=25334
Gateway Server Started
Configuring detector
Traceback (most recent call last):
File "fiducial_square_binary_3D.py", line 19, in
detector.set_intrinsic(intrinsic)
File "/home/mihail/AIKIT/AIKIT-env/lib/python3.8/site-packages/pyboof/recognition.py", line 218, in set_intrinsic
distortion = create_narrow_lens_distorter(intrinsic)
NameError: name 'create_narrow_lens_distorter' is not defined
So now I have concrete a question: when I download the Python library by entering pip3 install pyboof
, do I get a binary or is it compiling it from source in the background, possibly without letting me know that there were errors like when I try to compile it manually?
under investigation