kaustubh-sadekar / omnicv-lib Goto Github PK
View Code? Open in Web Editor NEWA computer vision library for omnidirectional (360 degree) cameras.
License: MIT License
A computer vision library for omnidirectional (360 degree) cameras.
License: MIT License
OmniCV-Lib/omnicv/utils.hpp
and OmniCV-Lib/ros_files/src/utils.hpp
, ros_files/src/imgMap.cpp
and omnicv/imgMap.cpp
are basically identical. Why? The whole point of a library is to code once and then share. The C++ module should be imported into the ROS packages.
The Makefile currently calls sudo ${PYTHON}
. Long story short, sudo
should never be used by an external package. Moreover, this locks the repo to POSIX-based systems (i.e., Windows wouldn't work).
There is currently no automated testing and deployment of the codebase. For this to be considered, a CI/CD setup (e.g., GitHub Actions) should be created that tests PRs, creates releases, and deploys to PyPI
How were these authors involved in developing this codebase?
Remember, with JOSS co-authorship is not awarded to supervisors: https://joss.readthedocs.io/en/latest/submitting.html#authorship
to, simulate virtual
As seen in the Makefile, PYTHON = python3
attempts to specify the Python version/executable for development and testing. This is non-standard in Python development. A virtual environment (e.g., virtualenv, pipenv, poetry) should be used instead.
Related to #13, commented code shouldn't exist in the repo
e.g. in omnicv/omnicv.py
:
# print(self.fmin)
if np.real(self.fmin) <= 0:
self.fmin = np.imag(self.fmin)
# print(self.f)
# print(self.fmin)
mx = (x - self.Cx) / self.f
my = (y - self.Cy) / self.f
The README doesn't explicitly specific OpenCV as a dependency for the project. Running cmake will result in the following error:
CMake Warning (dev) in CMakeLists.txt:
No project() command is present. The top-level CMakeLists.txt file must
contain a literal, direct call to the project() command. Add a line of
code such as
project(ProjectName)
near the top of the file, but after cmake_minimum_required().
CMake is pretending there is a "project(Project)" command on the first
line.
This warning is for project developers. Use -Wno-dev to suppress it.
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at CMakeLists.txt:8 (find_package):
By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "OpenCV", but
CMake did not find one.
Could not find a package configuration file provided by "OpenCV" with any
of the following names:
OpenCVConfig.cmake
opencv-config.cmake
Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set
"OpenCV_DIR" to a directory containing one of the above files. If "OpenCV"
provides a separate development package or SDK, be sure it has been
installed.
-- Configuring incomplete, errors occurred!
See also "/home/nicholas/git/OmniCV-Lib/build/CMakeFiles/CMakeOutput.log".
The README should explain the dependencies required and where/how to get them
==
)pip install
will have conflicts with the globally installed packagespipenv
or poetry
). This is the ideal method for scientific research, as it freezes the requirements and isolates the environmentPer the instructions in Running Tests
, the Makefile
is located in OmniCV-Lib/omnicv/
. As Makefiles are typically an entrypoint, it should be located in the repo root (i.e., OmniCV-Lib/
)
Much like Makefiles, CMakeLists.txt
is a type of entrypoint and should be located in the root of the repo. Typically, the workflow for CMake is e.g.:
cd /home/nicholas/git/OmniCV-Lib/
mkdir build
cd build
cmake ..
make
Currently, the flake8 settings are in the Makefile as a one-liner. The configurations should be found in a config file (https://flake8.pycqa.org/en/latest/user/configuration.html#configuration-locations) to ensure consistent usage and better change tracking
The C++ and Python code is currently lumped into a single subfolder. Ideally, these should be in two separate subfolders for "separation of concerns", cleanliness, and maintainability. I'd suggestion omnicv_py
and omnicv_cpp
As noted in #10, the Python code didn't follow formatting best practices. black
(or another formatting tool) should be enforced through a Makefile command (e.g., make format
) and CI.
>>> black .
reformatted /home/nicholas/git/OmniCV-Lib/setup.py
reformatted /home/nicholas/git/OmniCV-Lib/applications/set_fisheye_params_gui.py
reformatted /home/nicholas/git/OmniCV-Lib/tests/test_.py
reformatted /home/nicholas/git/OmniCV-Lib/omnicv/omnicv.py
All done! ✨ 🍰 ✨
4 files reformatted, 10 files left unchanged.
Currently, the Makefile build commands (e.g., build-py
) calls the testing ($(MAKE) test-py
) at the end of the build script. Testing and building should be two separate steps.
Moreover, if you want to make a command that both builds and test (for convenience, but this shouldn't be a primary entrypoint), then Makefiles allow for dependent actions, e.g.:
build-py:
............
test-py:
............
build-test: build-py test-py
............
In the above, build-test
will run build-py
and test-py
before its own commands
Wondering if this is the intended behavior. In equirect2Fisheye the output size simply adds more black space around the image. So that when I input a large output size, I can only see the fisheye image as a very small circle in the center of a black image.
On the latest python/numpy (Python 3.12.4
) the numpy type aliases for float
and bool
are throwing errors. I was able to get things working by going in an manually changing this, but it would be nice if pip install
worked out of the box. I saw that someone has already made a pull request for this that seems to cover this issue - it just needs to be merged. I wanted to flag the issue here to give the issue some visibility to the maintainers.
Thank you very much for the nice library,
Is it possible to generate training data from panoramas using OpenCV fisheye or radial models with ([K1, K2, P1,P2,k3]) distortion paramètres?
The README instructions call for bash test.sh
but the shebang in test.sh
calls for sh
. These are not the same. Moreover, calling bash
on a file isn't standard practice. Rather the permissions should be updated so that we call the file like this: ./test.sh
(see #7 )
All the tests, whether C++ or Python, aren't using modern, tested, and robust testing frameworks. For Python, I personally recommend pytest
. For C++, I personally recommend Catch2
.
This should also be integrated with #12
When getting started with the repo, the two primary entrypoints are "building the code" and "running examples".
While a skilled developer will have no problem building with cmake, running chmod +x tests/test.sh
, and understanding what is needed to run the examples, these are an extra impedance for someone new to the repo.
I'd recommend using a Makefile
as the entrypoint for building, running tests, etc. The READMEs will need to be updated as well.
Has OmniCV been used in any research? If so, paper/paper.md
should cite that research as it demonstrates the significance of the codebase.
The function fisheyeImgConv.mapper.fisheye2equirect()
seems to ignore delx and dely parameters.
I'm using applications/set_fisheye_params_gui.py
without modification and the resulting equirectangular image from fisheye is incorrect. The sliders delCx and delCy don't have any effect on resulting image. fisheyeImgConv.Cx
and fisheyeImgConv.Cy
vary when the slider is used but these variations have no effect on resulting image.
Expected result
According to documentation delCx and delCy sliders should have effect on resulting image:
How to replicate
For the following fisheye image:
This is the resulting equirectangular image (for any delCx and delCy values):
Related to #29, the paper/paper.md
needs to better explain the significance of the project.
When I review omnicv/omnicv.py
and omnicv/imgMap.cpp
, all I see is a collection of "X to Y" conversion functions.
There also needs to be an example and explanation of HOW a researcher should include this repo into their project.
Currently, tests/test.cpp
lumps all tests into a single TEST_CASE("Test")
. This isn't maintainable nor readable. The tests should be properly set up following best practices.
https://stackoverflow.com/questions/72891231/python-omnicv-fisheye-camera
It doesn't work properly. help me.
Linting errors should be fixed and CI should be created to prevent these errors in the future.
Running flake8
on the codebase gives many linting errors:
./Examples/fisheye2equirect.py:3:1: F401 'numpy as np' imported but unused
./Examples/fisheye2equirect.py:4:1: F401 'math' imported but unused
./Examples/fisheye2equirect.py:6:1: F401 'time' imported but unused
./Examples/fisheye2equirect.py:22:1: E266 too many leading '#' for block comment
./Examples/fisheye2equirect.py:22:80: E501 line too long (106 > 79 characters)
./Examples/fisheye2equirect.py:31:80: E501 line too long (100 > 79 characters)
./Examples/fisheye2equirect.py:33:1: W191 indentation contains tabs
./Examples/fisheye2equirect.py:46:80: E501 line too long (80 > 79 characters)
./Examples/cubemap2persp.py:3:1: F401 'numpy as np' imported but unused
./Examples/cubemap2persp.py:4:1: F401 'math' imported but unused
./Examples/cubemap2persp.py:5:1: F401 'time' imported but unused
./Examples/cubemap2persp.py:19:1: E266 too many leading '#' for block comment
./Examples/cubemap2persp.py:19:80: E501 line too long (95 > 79 characters)
./Examples/cubemap2persp.py:22:80: E501 line too long (86 > 79 characters)
./Examples/equirect2persp.py:3:1: F401 'numpy as np' imported but unused
./Examples/equirect2persp.py:4:1: F401 'math' imported but unused
./Examples/equirect2persp.py:17:1: E266 too many leading '#' for block comment
./Examples/equirect2persp.py:17:80: E501 line too long (95 > 79 characters)
./Examples/equirect2persp.py:39:80: E501 line too long (133 > 79 characters)
./Examples/equirect2cubemap.py:3:1: F401 'numpy as np' imported but unused
./Examples/equirect2cubemap.py:4:1: F401 'math' imported but unused
./Examples/equirect2cubemap.py:19:1: E266 too many leading '#' for block comment
./Examples/equirect2cubemap.py:19:80: E501 line too long (95 > 79 characters)
./Examples/equirect2fisheye.py:3:1: F401 'numpy as np' imported but unused
./Examples/equirect2fisheye.py:4:1: F401 'math' imported but unused
./Examples/equirect2fisheye.py:5:1: F401 'time' imported but unused
./Examples/equirect2fisheye.py:19:1: E266 too many leading '#' for block comment
./Examples/equirect2fisheye.py:19:80: E501 line too long (95 > 79 characters)
./Examples/equirect2fisheye.py:30:80: E501 line too long (100 > 79 characters)
./Examples/equirect2fisheye.py:37:80: E501 line too long (93 > 79 characters)
./Examples/equirect2fisheye.py:74:80: E501 line too long (80 > 79 characters)
./Examples/cubemap2equirect.py:3:1: F401 'numpy as np' imported but unused
./Examples/cubemap2equirect.py:4:1: F401 'math' imported but unused
./Examples/cubemap2equirect.py:19:1: E266 too many leading '#' for block comment
./Examples/cubemap2equirect.py:19:80: E501 line too long (95 > 79 characters)
./Examples/cubemap2equirect.py:23:80: E501 line too long (138 > 79 characters)
./omnicv/__init__.py:1:1: F403 'from omnicv.omnicv import *' used; unable to detect undefined names
./omnicv/__init__.py:1:1: F401 'omnicv.omnicv.*' imported but unused
./omnicv/omnicv.py:4:1: F401 'math' imported but unused
./omnicv/omnicv.py:5:1: F401 'time' imported but unused
./omnicv/omnicv.py:45:80: E501 line too long (87 > 79 characters)
./omnicv/omnicv.py:80:80: E501 line too long (82 > 79 characters)
./omnicv/omnicv.py:96:80: E501 line too long (97 > 79 characters)
./omnicv/omnicv.py:107:80: E501 line too long (81 > 79 characters)
./omnicv/omnicv.py:108:80: E501 line too long (81 > 79 characters)
./omnicv/omnicv.py:132:80: E501 line too long (84 > 79 characters)
./omnicv/omnicv.py:137:33: E203 whitespace before ':'
./omnicv/omnicv.py:138:33: E203 whitespace before ':'
./omnicv/omnicv.py:141:33: E203 whitespace before ':'
./omnicv/omnicv.py:142:33: E203 whitespace before ':'
./omnicv/omnicv.py:145:33: E203 whitespace before ':'
./omnicv/omnicv.py:146:33: E203 whitespace before ':'
./omnicv/omnicv.py:149:33: E203 whitespace before ':'
./omnicv/omnicv.py:150:33: E203 whitespace before ':'
./omnicv/omnicv.py:153:33: E203 whitespace before ':'
./omnicv/omnicv.py:154:33: E203 whitespace before ':'
./omnicv/omnicv.py:157:33: E203 whitespace before ':'
./omnicv/omnicv.py:158:33: E203 whitespace before ':'
./omnicv/omnicv.py:162:33: E203 whitespace before ':'
./omnicv/omnicv.py:163:33: E203 whitespace before ':'
./omnicv/omnicv.py:166:33: E203 whitespace before ':'
./omnicv/omnicv.py:167:33: E203 whitespace before ':'
./omnicv/omnicv.py:170:33: E203 whitespace before ':'
./omnicv/omnicv.py:171:33: E203 whitespace before ':'
./omnicv/omnicv.py:174:33: E203 whitespace before ':'
./omnicv/omnicv.py:175:33: E203 whitespace before ':'
./omnicv/omnicv.py:178:33: E203 whitespace before ':'
./omnicv/omnicv.py:179:33: E203 whitespace before ':'
./omnicv/omnicv.py:182:33: E203 whitespace before ':'
./omnicv/omnicv.py:183:33: E203 whitespace before ':'
./omnicv/omnicv.py:185:80: E501 line too long (101 > 79 characters)
./omnicv/omnicv.py:188:80: E501 line too long (86 > 79 characters)
./omnicv/omnicv.py:191:80: E501 line too long (82 > 79 characters)
./omnicv/omnicv.py:194:80: E501 line too long (103 > 79 characters)
./omnicv/omnicv.py:214:41: E203 whitespace before ':'
./omnicv/omnicv.py:215:50: E203 whitespace before ':'
./omnicv/omnicv.py:216:41: E203 whitespace before ':'
./omnicv/omnicv.py:217:41: E203 whitespace before ':'
./omnicv/omnicv.py:222:41: E203 whitespace before ':'
./omnicv/omnicv.py:223:41: E203 whitespace before ':'
./omnicv/omnicv.py:224:50: E203 whitespace before ':'
./omnicv/omnicv.py:225:50: E203 whitespace before ':'
./omnicv/omnicv.py:230:41: E203 whitespace before ':'
./omnicv/omnicv.py:231:41: E203 whitespace before ':'
./omnicv/omnicv.py:232:41: E203 whitespace before ':'
./omnicv/omnicv.py:233:41: E203 whitespace before ':'
./omnicv/omnicv.py:271:21: E203 whitespace before ':'
./omnicv/omnicv.py:272:25: E203 whitespace before ':'
./omnicv/omnicv.py:273:25: E203 whitespace before ':'
./omnicv/omnicv.py:274:25: E203 whitespace before ':'
./omnicv/omnicv.py:365:9: F841 local variable 'wangle' is assigned to but never used
./omnicv/omnicv.py:366:80: E501 line too long (85 > 79 characters)
./omnicv/omnicv.py:370:9: F841 local variable 'hangle' is assigned to but never used
./omnicv/omnicv.py:371:80: E501 line too long (85 > 79 characters)
./omnicv/omnicv.py:411:80: E501 line too long (108 > 79 characters)
./omnicv/omnicv.py:414:80: E501 line too long (82 > 79 characters)
./omnicv/omnicv.py:451:9: F841 local variable 'wangle' is assigned to but never used
./omnicv/omnicv.py:452:80: E501 line too long (87 > 79 characters)
./omnicv/omnicv.py:455:9: F841 local variable 'hangle' is assigned to but never used
./omnicv/omnicv.py:456:80: E501 line too long (87 > 79 characters)
./omnicv/omnicv.py:494:80: E501 line too long (108 > 79 characters)
./omnicv/omnicv.py:497:80: E501 line too long (82 > 79 characters)
./omnicv/omnicv.py:532:80: E501 line too long (85 > 79 characters)
./omnicv/omnicv.py:599:80: E501 line too long (82 > 79 characters)
./omnicv/omnicv.py:619:80: E501 line too long (85 > 79 characters)
./omnicv/omnicv.py:716:80: E501 line too long (93 > 79 characters)
./omnicv/omnicv.py:740:80: E501 line too long (84 > 79 characters)
./omnicv/omnicv.py:797:80: E501 line too long (82 > 79 characters)
./omnicv/omnicv.py:812:9: F841 local variable 'xref' is assigned to but never used
./omnicv/omnicv.py:813:9: F841 local variable 'yref' is assigned to but never used
./omnicv/omnicv.py:815:80: E501 line too long (93 > 79 characters)
./omnicv/omnicv.py:865:80: E501 line too long (86 > 79 characters)
./omnicv/omnicv.py:891:80: E501 line too long (93 > 79 characters)
./omnicv/omnicv.py:893:80: E501 line too long (87 > 79 characters)
./omnicv/omnicv.py:903:80: E501 line too long (88 > 79 characters)
./omnicv/omnicv.py:907:80: E501 line too long (86 > 79 characters)
./omnicv/omnicv.py:982:50: E203 whitespace before ':'
./omnicv/omnicv.py:983:59: E203 whitespace before ':'
./omnicv/omnicv.py:983:80: E501 line too long (83 > 79 characters)
./omnicv/omnicv.py:984:50: E203 whitespace before ':'
./omnicv/omnicv.py:985:50: E203 whitespace before ':'
./omnicv/omnicv.py:990:50: E203 whitespace before ':'
./omnicv/omnicv.py:991:50: E203 whitespace before ':'
./omnicv/omnicv.py:992:59: E203 whitespace before ':'
./omnicv/omnicv.py:992:80: E501 line too long (83 > 79 characters)
./omnicv/omnicv.py:993:59: E203 whitespace before ':'
./omnicv/omnicv.py:993:80: E501 line too long (83 > 79 characters)
./omnicv/omnicv.py:998:50: E203 whitespace before ':'
./omnicv/omnicv.py:999:50: E203 whitespace before ':'
./omnicv/omnicv.py:1000:50: E203 whitespace before ':'
./omnicv/omnicv.py:1001:50: E203 whitespace before ':'
./omnicv/omnicv.py:1015:80: E501 line too long (83 > 79 characters)
./omnicv/omnicv.py:1055:80: E501 line too long (83 > 79 characters)
./applications/UCM_GUI.py:3:1: F401 'numpy as np' imported but unused
./applications/UCM_GUI.py:4:1: F401 'math' imported but unused
./applications/UCM_GUI.py:5:1: F401 'time' imported but unused
./applications/set_fisheye_params_gui.py:3:1: F401 'numpy as np' imported but unused
./applications/set_fisheye_params_gui.py:4:1: F401 'math' imported but unused
./applications/set_fisheye_params_gui.py:55:80: E501 line too long (87 > 79 characters)
./applications/ViewerGUI.py:3:1: F401 'numpy as np' imported but unused
./applications/ViewerGUI.py:4:1: F401 'math' imported but unused
./applications/ViewerGUI.py:5:1: F401 'time' imported but unused
./tests/tests_visual.py:5:1: F401 'math' imported but unused
./tests/tests_visual.py:6:1: F401 'time' imported but unused
./tests/tests_visual.py:7:1: F401 'sys' imported but unused
./tests/tests_visual.py:22:80: E501 line too long (88 > 79 characters)
./tests/tests_visual.py:32:80: E501 line too long (82 > 79 characters)
./tests/tests_visual.py:47:80: E501 line too long (82 > 79 characters)
./tests/tests_visual.py:62:80: E501 line too long (82 > 79 characters)
./tests/tests_visual.py:77:80: E501 line too long (82 > 79 characters)
./tests/tests_visual.py:101:80: E501 line too long (83 > 79 characters)
./tests/tests_visual.py:117:80: E501 line too long (83 > 79 characters)
./tests/tests_visual.py:135:80: E501 line too long (82 > 79 characters)
./tests/tests_visual.py:148:80: E501 line too long (82 > 79 characters)
./tests/tests_visual.py:160:80: E501 line too long (88 > 79 characters)
./tests/tests_visual.py:179:80: E501 line too long (83 > 79 characters)
./tests/tests_visual.py:198:80: E501 line too long (83 > 79 characters)
./tests/tests_visual.py:215:80: E501 line too long (88 > 79 characters)
./tests/tests_visual.py:231:80: E501 line too long (88 > 79 characters)
./tests/tests.py:4:1: F401 'numpy as np' imported but unused
./tests/tests.py:5:1: F401 'math' imported but unused
./tests/tests.py:6:1: F401 'time' imported but unused
./tests/tests.py:7:1: F401 'sys' imported but unused
./tests/tests.py:20:80: E501 line too long (88 > 79 characters)
vulture
gives the following errors:
applications/set_fisheye_params_gui.py:4: unused import 'math' (90% confidence)
applications/set_fisheye_params_gui.py:29: redundant if-condition (100% confidence)
applications/set_fisheye_params_gui.py:63: redundant if-condition (100% confidence)
applications/UCM_GUI.py:4: unused import 'math' (90% confidence)
applications/ViewerGUI.py:4: unused import 'math' (90% confidence)
Examples/cubemap2equirect.py:4: unused import 'math' (90% confidence)
Examples/cubemap2persp.py:4: unused import 'math' (90% confidence)
Examples/equirect2cubemap.py:4: unused import 'math' (90% confidence)
Examples/equirect2fisheye.py:4: unused import 'math' (90% confidence)
Examples/equirect2persp.py:4: unused import 'math' (90% confidence)
Examples/fisheye2equirect.py:4: unused import 'math' (90% confidence)
omnicv/omnicv.py:4: unused import 'math' (90% confidence)
omnicv/omnicv.py:41: unused attribute 'singleLens' (60% confidence)
omnicv/omnicv.py:365: unused variable 'wangle' (60% confidence)
omnicv/omnicv.py:370: unused variable 'hangle' (60% confidence)
omnicv/omnicv.py:451: unused variable 'wangle' (60% confidence)
omnicv/omnicv.py:455: unused variable 'hangle' (60% confidence)
omnicv/omnicv.py:961: unused method 'applyMap' (60% confidence)
tests/tests.py:5: unused import 'math' (90% confidence)
tests/tests_visual.py:5: unused import 'math' (90% confidence)
Please update your packaging settings to ensure that PyPI has a README
I'm assuming @todo.todo
isn't the correct domain in ros_files/package.xml
?
<maintainer email="[email protected]">kaustubh</maintainer>
If this library is to be used and maintained by the research community, documentation is paramount. Code documentation should be enforced (e.g., by a tool like pydocstyle
:
>>> pydocstyle .
./setup.py:1 at module level:
D100: Missing docstring in public module
./Examples/fisheye2equirect.py:1 at module level:
D100: Missing docstring in public module
./Examples/cubemap2persp.py:1 at module level:
D100: Missing docstring in public module
./Examples/equirect2persp.py:1 at module level:
D100: Missing docstring in public module
./Examples/equirect2cubemap.py:1 at module level:
D100: Missing docstring in public module
./Examples/equirect2fisheye.py:1 at module level:
D100: Missing docstring in public module
./Examples/cubemap2equirect.py:1 at module level:
D100: Missing docstring in public module
./omnicv/__init__.py:1 at module level:
D104: Missing docstring in public package
./omnicv/omnicv.py:1 at module level:
D100: Missing docstring in public module
./omnicv/omnicv.py:6 in public function `rmat`:
D103: Missing docstring in public function
./omnicv/omnicv.py:33 in public class `fisheyeImgConv`:
D101: Missing docstring in public class
./omnicv/omnicv.py:34 in public method `__init__`:
D107: Missing docstring in __init__
./omnicv/omnicv.py:43 in public method `fisheye2equirect`:
D102: Missing docstring in public method
./omnicv/omnicv.py:119 in public method `equirect2cubemap`:
D102: Missing docstring in public method
./omnicv/omnicv.py:242 in public method `cubemap2equirect`:
D102: Missing docstring in public method
./omnicv/omnicv.py:341 in public method `eqruirect2persp`:
D102: Missing docstring in public method
./omnicv/omnicv.py:410 in public method `cubemap2persp`:
D102: Missing docstring in public method
./omnicv/omnicv.py:481 in public method `equirect2Fisheye`:
D102: Missing docstring in public method
./omnicv/omnicv.py:567 in public method `equirect2Fisheye_UCM`:
D102: Missing docstring in public method
./omnicv/omnicv.py:657 in public method `equirect2Fisheye_EUCM`:
D102: Missing docstring in public method
./omnicv/omnicv.py:759 in public method `equirect2Fisheye_FOV`:
D102: Missing docstring in public method
./omnicv/omnicv.py:823 in public method `equirect2Fisheye_DS`:
D102: Missing docstring in public method
./omnicv/omnicv.py:914 in public method `applyMap`:
D102: Missing docstring in public method
./applications/UCM_GUI.py:1 at module level:
D100: Missing docstring in public module
./applications/UCM_GUI.py:20 in public function `nothing`:
D103: Missing docstring in public function
./applications/set_fisheye_params_gui.py:1 at module level:
D100: Missing docstring in public module
./applications/set_fisheye_params_gui.py:7 in public function `nothing`:
D103: Missing docstring in public function
./applications/ViewerGUI.py:1 at module level:
D100: Missing docstring in public module
./applications/ViewerGUI.py:7 in public function `nothing`:
D103: Missing docstring in public function
./tests/srcpath.py:1 at module level:
D100: Missing docstring in public module
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.