parent
7cd8f0e2de
commit
91d3fb14b1
@ -1,459 +0,0 @@
|
||||
# User Manual for fingerprint image filtering and model generating application
|
||||
|
||||
## Introduction
|
||||
|
||||
This project has been developed as a part of bachelor's thesis at Brno University of Technology - Faculty of Information Technology.
|
||||
The topic of this thesis was Generating a 3D Fingerprint Model from input fingerprint image.
|
||||
|
||||
This application consists of two main parts.The first part of the application uses image filters to enhance fingerprint images.
|
||||
Application also implements a custom filter library, which consists of several filters imported from image processing modules.
|
||||
|
||||
The second part uses the processed image to make a 3D model of the fingerprint.
|
||||
The model can then be used to print an accurate representation of human fingerprint using a 3D printer.
|
||||
|
||||
## Getting started
|
||||
|
||||
The application has only been tested on Ubuntu gnu/linux machines.
|
||||
It should however be possible to use it in on most linux distributions, WSLs and also virtual machines of most linux distributions.
|
||||
|
||||
To start off, you need these to succesfully use the application.
|
||||
|
||||
* **python** version 3.10 is a requirement might work on earlier python 3 versions:
|
||||
|
||||
```
|
||||
sudo apt install python3.10
|
||||
```
|
||||
|
||||
* **virtualenv** package for virtual enviroment creation, other packages are installed automatically later:
|
||||
|
||||
```
|
||||
pip install virtualenv
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
This will install the application and its components into the Documents directory.
|
||||
It will also install several required python packages, including venv, which is used to create a virtual enviroment.
|
||||
|
||||
1. Go to a suitable installation folder, for example **Documents**:
|
||||
|
||||
```
|
||||
cd /home/username/Documents
|
||||
```
|
||||
|
||||
2. Clone the repository to a suitable directory, for example:
|
||||
|
||||
```
|
||||
git clone ssh://git@strade.fit.vutbr.cz:3022/xlanro00/BP_DP-xlanro00.git
|
||||
```
|
||||
|
||||
3. Go inside cloned directory:
|
||||
|
||||
```
|
||||
cd BP_DP-xlanro00
|
||||
```
|
||||
|
||||
4. Create and enter the virtual enviroment:
|
||||
|
||||
```
|
||||
virtualenv .venv && source .venv/bin/activate
|
||||
```
|
||||
|
||||
5. Install required python modules from **requirements.txt**:
|
||||
|
||||
```
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
6. Now, you are all set to run the application.
|
||||
Examples of how to do this are listedin the section bellow.
|
||||
|
||||
# Filtering images
|
||||
|
||||
Once all the requirements are installed, the application is ready to use.
|
||||
Fingerprint sample is located in res/examples, its name is Palec_P4.tif.
|
||||
|
||||
* You will need to enter the virtual enviroment every time you want to use the application.
|
||||
|
||||
```
|
||||
source .venv/bin/activate
|
||||
```
|
||||
|
||||
* The application requires **input** and **output filenames** including path from the root project directory, **dpi** and **filter list** as shown bellow.
|
||||
|
||||
```
|
||||
python3 src/main.py input_file output_file dpi filters
|
||||
```
|
||||
|
||||
There are two ways to enter the filters:
|
||||
|
||||
1. manually list all filter names and their parameters on the **command line**:
|
||||
|
||||
```
|
||||
python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_cline.png 600 total_variation weight=0.15 median ksize=5
|
||||
```
|
||||
|
||||
2. load them from preset in a JSON **configuration file**, that can be used to tune and modify existing presets, or create new ones:
|
||||
|
||||
```
|
||||
python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json git_example
|
||||
```
|
||||
|
||||
## Configuration and presets
|
||||
#
|
||||
|
||||
There is an option to input the filter series as a preset from JSON configuration file.
|
||||
Here the presets are stored and are ready to be used whenever needed. You can usehow many filters you need as long as you like the output.
|
||||
It is therefore highly recommended to check the output after every preset change.
|
||||
|
||||
Filter used in the example above is listed bellow, along with the general form of configuration file.
|
||||
|
||||
<style>
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
th, td {
|
||||
padding: 8px;
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
.code {
|
||||
font-family: 'Courier New', monospace;
|
||||
background-color: #f5f5f5;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.language-json {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>General format</th>
|
||||
<th>Woking example</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<pre><code class="language-json">
|
||||
{
|
||||
"preset": [
|
||||
{
|
||||
"name": "filter_name",
|
||||
"parameter": value,
|
||||
"parameter": value
|
||||
},
|
||||
{
|
||||
"name": "filter_name",
|
||||
"parameter": value
|
||||
}
|
||||
],
|
||||
"preset": [
|
||||
...
|
||||
]
|
||||
...
|
||||
}
|
||||
</code></pre>
|
||||
</td>
|
||||
<td>
|
||||
<pre><code class="language-json">
|
||||
{
|
||||
"git_example": [
|
||||
{
|
||||
"name": "denoise_tv_chambolle",
|
||||
"weight": 0.01,
|
||||
"iterations": 1
|
||||
},
|
||||
{
|
||||
"name": "median",
|
||||
"ksize": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
</code></pre>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
To avoid accidental loss of information caused by modifying presets that have been used to generate stl files,
|
||||
these presets are stored inside a JSON file db.json.
|
||||
|
||||
This file serves as a simple database for storing presets, stored presets are modified by adding generated hash of all the filters in that preset.
|
||||
There is also an option to save current command line setting as a preset using -d switch and it's new name:
|
||||
|
||||
## Available filters with parameters
|
||||
#
|
||||
|
||||
Overview of all implemented filters and their parameters with descriptions is listed below.
|
||||
|
||||
- median blur
|
||||
|
||||
- ksize (int) - Kernel size, determines how large of an area the filter processes.
|
||||
|
||||
- gaussian blur
|
||||
|
||||
- sigma (int) - Gaussian kernel standart deviation, determines the weight of further pixels on the currently processed pixel.
|
||||
|
||||
- bilateral blur
|
||||
|
||||
- diameter (int) - Diameter of pixel neighborhood used for filtering.
|
||||
- sigmaColor (int) - Determines the weight of pixels of different color.
|
||||
- sigmaSpace (int) - Determines the weight of further pixels.
|
||||
|
||||
- bilateral_scikit
|
||||
|
||||
- sigmaColor (float) - Determines the weight of pixels of different color.
|
||||
- sigmaSpace (float) - Determines the weight of further pixels.
|
||||
|
||||
- nlmeans (non-local means)
|
||||
|
||||
- patch_size (int) - Size of patches used for denoising.
|
||||
- patch_distance (int) - Distance in pixels where to search for patches.
|
||||
- h (float) - Cut-off distance, higher means more smoothed image.
|
||||
|
||||
- total_variation
|
||||
|
||||
- weight (float) - Denoising weight, determines how much the image will be denoised.
|
||||
|
||||
- block_match
|
||||
|
||||
- sigma (float)- Standart deviation
|
||||
|
||||
- unsharp mask scikit
|
||||
|
||||
- radius (int) - Radius of the gaussian filter.
|
||||
- amount (float) - Strength of the unsharp mask, determines how much of the mask will be used for filtering.
|
||||
|
||||
- farid
|
||||
|
||||
- meijering
|
||||
|
||||
- sato
|
||||
|
||||
- hessian
|
||||
|
||||
- sigmas (float) - Standart deviations
|
||||
|
||||
- invert
|
||||
|
||||
- scale_values
|
||||
|
||||
- binarize
|
||||
|
||||
- threshold (int) - Value to cut differentiate pixels.
|
||||
|
||||
- binarize_otsu
|
||||
|
||||
- add_margin
|
||||
|
||||
- margin (int) - Number of pixels to add to the sides of the image.
|
||||
- color (int) - Color value of newly added pixels.
|
||||
|
||||
- erode
|
||||
|
||||
- kernel (numpy matrix) - Shape of the kernel used to erode image.
|
||||
|
||||
- dilate
|
||||
|
||||
- kernel (numpy matrix)- Shape of the kernel used to dilate image.
|
||||
|
||||
# Generating fingerprint model
|
||||
|
||||
## Generating curved finger model
|
||||
|
||||
It is possible to generate stl model using the `--stl` switch. This requires more parameters, first of which is the type of generated fingerprint.
|
||||
|
||||
If the mode is set to `c`, the output model will be a curved finger model, with optional parameters following the filename controlling its shape.
|
||||
|
||||
First optional parameter is papilar line height `height_line`, second is thickness of the model `height_base`,
|
||||
third the rate of curvature along x axis `curv_rate_x` and the third is the rate of curvature along y axis `curv_rate_y`.
|
||||
|
||||
* General form for curved stl generation:
|
||||
|
||||
```
|
||||
python3 src/main.py input_file output_file dpi --config config_file preset --stl c height_line height_base curvature_x curvature_y
|
||||
```
|
||||
|
||||
* Working example curved stl generation:
|
||||
|
||||
```
|
||||
python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config config/config.json git_example --stl c 2 10 2 2
|
||||
```
|
||||
|
||||
## Generating planar finger model
|
||||
|
||||
Using `p` mode makes the generated fingerprint model flat.
|
||||
Optional parameters are height of the papilar lines and base thickness.
|
||||
|
||||
* General command form for planar stl generation:
|
||||
|
||||
```
|
||||
python3 src/main.py input_file output_file dpi --config config_file preset --stl p height_line height_base
|
||||
```
|
||||
|
||||
* Working example of planar stl generation:
|
||||
|
||||
```
|
||||
python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config config/config.json git_example --stl p 2 10
|
||||
```
|
||||
|
||||
## Mapping to existing finger model
|
||||
|
||||
Using `m` mode modifies the preexisting finger model to contain fingerprint.
|
||||
First optional parameter is papilar line height `height_line`, second is the number of iterations `iter` to make the finger mesh denser. Higher number of itertions results in denser finger mesh and better result.
|
||||
The last three parameters are axis offsets for the finger, `finger_x`, `finger_y`, `finger_z`.
|
||||
These control the location of the finger. They need to be set only if the user wants to move core of the print closer to the center of the finger.
|
||||
|
||||
* General command form for mapped stl generation
|
||||
|
||||
```
|
||||
python3 src/main.py input_file output_file dpi --config config_file preset --stl m height_line iter finger_x finger_y finger_z
|
||||
```
|
||||
|
||||
* Working example of finger mapping
|
||||
|
||||
```
|
||||
python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4.png 600 --config conf/conf.json ridge --stl m 0.2 2 0 0 0
|
||||
```
|
||||
|
||||
# Usage
|
||||
|
||||
When in doubt, you can always check the help with:
|
||||
|
||||
python3 src/main.py --help
|
||||
|
||||
Which will print out the following message.
|
||||
|
||||
```
|
||||
usage: main.py [-h] [-m | --mirror | --no-mirror] input_file
|
||||
output_file dpi ([-c | --config config_file preset] |
|
||||
[filters ...]) [-s | --stl_file p height_line height_base |
|
||||
--stl_file c height_line height_base curv_rate_x curv_rate_y |
|
||||
--stl m height_line iter finger_x finger_y finger_z]
|
||||
[-d | --database database_filename]
|
||||
|
||||
Program for processing a 2D image into 3D fingerprint.
|
||||
|
||||
positional arguments:
|
||||
input_file input file path
|
||||
output_file output file path
|
||||
dpi dpi of used scanner
|
||||
filters list of filter names and their parameters in form
|
||||
[filter_name1 param1=value
|
||||
param2=value filter_name2 param1=value...]
|
||||
|
||||
options:
|
||||
-h, --help show this help message and exit
|
||||
-m, --mirror, --no-mirror
|
||||
switch to mirror input image
|
||||
-s [STL_FILE ...], --stl_file [STL_FILE ...]
|
||||
create stl model from processed image
|
||||
-c CONFIG CONFIG, --config CONFIG CONFIG
|
||||
pair: name of the config file with presets,
|
||||
name of the preset
|
||||
```
|
||||
|
||||
# Troubleshooting
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Error message</th>
|
||||
<th>Solution</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
main.py: error: the following arguments are required: input_file, output_file, dpi, filters
|
||||
</td>
|
||||
<td>
|
||||
You probably forgot to include some of the required arguments.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Input file res/Palec_P14.tif does not exist
|
||||
</td>
|
||||
<td>
|
||||
The file you want to process does not exist, check the filename again.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Config file not found
|
||||
</td>
|
||||
<td>
|
||||
The config file you want to load config from does not exist, check the filename again.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Preset not found in config file
|
||||
</td>
|
||||
<td>
|
||||
The preset is not present in selected config file, check the file again or select the correct config file.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Filter undefined_filter not found
|
||||
</td>
|
||||
<td>
|
||||
One of the filters from command line is not defined in the library, check its name.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Unrecognized generation mode
|
||||
</td>
|
||||
<td>
|
||||
The first parameter of stl generation should be p, c or m, check it again.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Line depth must be less than plate thickness
|
||||
</td>
|
||||
<td>
|
||||
When generating a cast, the depth must be less than the base plate thckness, otherwise it would have holes on the other side.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Depth of plate height must be positive
|
||||
</td>
|
||||
<td>
|
||||
Cannot generate negative base plate thickness, check order of arguments.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Base and line height must both be positive
|
||||
</td>
|
||||
<td>
|
||||
In curved generation any negative argument is an error, casts are only for planar mode.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Fingerprint image is outside of the finger model
|
||||
</td>
|
||||
<td>
|
||||
Outside of range of the finger, fingerprint cannot be mapped to nothing. Try to change finger_x, finger_y and finger_z parameters.
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
@ -0,0 +1,20 @@
|
||||
# Minimal makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line, and also
|
||||
# from the environment for the first two.
|
||||
SPHINXOPTS ?=
|
||||
SPHINXBUILD ?= sphinx-build
|
||||
SOURCEDIR = source
|
||||
BUILDDIR = build
|
||||
|
||||
# Put it first so that "make" without argument is like "make help".
|
||||
help:
|
||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
|
||||
.PHONY: help Makefile
|
||||
|
||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||
%: Makefile
|
||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
@ -0,0 +1,4 @@
|
||||
# Sphinx build info version 1
|
||||
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||
config: f7b5f86b2bb8d884ac0dd04d440fee32
|
||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,103 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Configuration and presets
|
||||
=========================
|
||||
|
||||
There is an option to input the filter series as a **preset** from JSON configuration file.
|
||||
Here the presets are stored and are ready to be used whenever needed. You can usehow many filters you need as long as you like the output.
|
||||
It is therefore highly recommended to check the output after every preset change.
|
||||
|
||||
Filter used in the example above is listed bellow, along with the general form of configuration file.
|
||||
|
||||
.. raw:: html
|
||||
|
||||
<style>
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
th, td {
|
||||
padding: 8px;
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
.code {
|
||||
font-family: 'Courier New', monospace;
|
||||
background-color: #f5f5f5;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.language-json {
|
||||
color: #333;
|
||||
}
|
||||
</style>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>General format</th>
|
||||
<th>Working example</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<pre><code class="language-json">
|
||||
{
|
||||
"preset": [
|
||||
{
|
||||
"name": "filter_name",
|
||||
"parameter": value,
|
||||
"parameter": value
|
||||
},
|
||||
{
|
||||
"name": "filter_name",
|
||||
"parameter": value
|
||||
}
|
||||
],
|
||||
"preset": [
|
||||
...
|
||||
]
|
||||
...
|
||||
}
|
||||
</code></pre>
|
||||
</td>
|
||||
<td>
|
||||
<pre><code class="language-json">
|
||||
{
|
||||
"git_example": [
|
||||
{
|
||||
"name": "denoise_tv_chambolle",
|
||||
"weight": 0.01,
|
||||
"iterations": 1
|
||||
},
|
||||
{
|
||||
"name": "median",
|
||||
"ksize": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
</code></pre>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
To avoid accidental loss of information caused by modifying presets that have been used to generate stl files,
|
||||
these presets are stored inside a JSON file **db.json**.
|
||||
|
||||
This file serves as a simple database for storing presets, stored presets are modified by adding generated hash of all the filters in that preset.There is also an option to save current command line setting as a preset using -d switch and it's new name:
|
@ -0,0 +1,7 @@
|
||||
config\_parser module
|
||||
=====================
|
||||
|
||||
.. automodule:: config_parser
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
@ -0,0 +1,80 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Available filters with parameters
|
||||
=================================
|
||||
|
||||
Overview of all implemented filters and their parameters with descriptions is listed below.
|
||||
|
||||
* **median blur**
|
||||
|
||||
* *ksize* (int) - Kernel size, determines how large of an area the filter processes.
|
||||
|
||||
* **gaussian blur**
|
||||
|
||||
* *sigma* (int) - Gaussian kernel standart deviation, determines the weight of further pixels on the currently processed pixel.
|
||||
|
||||
* **bilateral blur**
|
||||
|
||||
* *diameter* (int) - Diameter of pixel neighborhood used for filtering.
|
||||
* *sigmaColor* (int) - Determines the weight of pixels of different color.
|
||||
* *sigmaSpace* (int) - Determines the weight of further pixels.
|
||||
|
||||
* **bilateral_scikit**
|
||||
|
||||
* *sigmaColor* (float) - Determines the weight of pixels of different color.
|
||||
* *sigmaSpace* (float) - Determines the weight of further pixels.
|
||||
|
||||
* **nlmeans** (non-local means)
|
||||
|
||||
* *patch_size* (int) - Size of patches used for denoising.
|
||||
* *patch_distance* (int) - Distance in pixels where to search for patches.
|
||||
* *h* (float) - Cut-off distance, higher means more smoothed image.
|
||||
|
||||
* **total_variation**
|
||||
|
||||
* *weight* (float) - Denoising weight, determines how much the image will be denoised.
|
||||
|
||||
* **block_match**
|
||||
|
||||
* *sigma* (float)- Standart deviation
|
||||
|
||||
* **unsharp_mask_scikit**
|
||||
|
||||
* *radius* (int) - Radius of the gaussian filter.
|
||||
* *amount* (float) - Strength of the unsharp mask, determines how much of the mask will be used for filtering.
|
||||
|
||||
* **farid**
|
||||
|
||||
* **meijering**
|
||||
|
||||
* **sato**
|
||||
|
||||
* **hessian**
|
||||
|
||||
* *sigmas* (float) - Standart deviations
|
||||
|
||||
* **invert**
|
||||
|
||||
* **scale_values**
|
||||
|
||||
* **binarize**
|
||||
|
||||
* *threshold* (int) - Value to cut differentiate pixels.
|
||||
|
||||
* **binarize_otsu**
|
||||
|
||||
* **add_margin**
|
||||
|
||||
* *margin* (int) - Number of pixels to add to the sides of the image.
|
||||
* *color* (int) - Color value of newly added pixels.
|
||||
|
||||
* **erode**
|
||||
|
||||
* *kernel* (numpy matrix) - Shape of the kernel used to erode image.
|
||||
|
||||
* **dilate**
|
||||
|
||||
* *kernel* (numpy matrix)- Shape of the kernel used to dilate image.
|
@ -0,0 +1,37 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Filtering images
|
||||
================
|
||||
|
||||
Once all the requirements are installed, the application is ready to use.
|
||||
Fingerprint sample is located in res/examples, its name is Palec_P4.tif.
|
||||
|
||||
* You will need to enter the virtual enviroment every time you want to use the application.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source .venv/bin/activate
|
||||
|
||||
* The application requires **input** and **output filenames** including path from the root project directory, **dpi** and **filter list** as shown bellow.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
(.venv)$ python3 src/main.py input_file output_file dpi filters
|
||||
|
||||
There are two ways to enter the filters:
|
||||
|
||||
1. manually list all filter names and their parameters on the **command line**:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
(.venv)$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_cline.png 600 total_variation weight=0.15 median ksize=5
|
||||
|
||||
|
||||
2. load them from preset in a JSON **configuration file**, that can be used to tune and modify existing presets, or create new ones:
|
||||
|
||||
.. code-block::
|
||||
|
||||
(.venv)$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json git_example
|
@ -0,0 +1,7 @@
|
||||
filters module
|
||||
==============
|
||||
|
||||
.. automodule:: filters
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
@ -0,0 +1,70 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Generating fingerprint models
|
||||
=============================
|
||||
|
||||
Generating curved fingerprint model
|
||||
-----------------------------------
|
||||
|
||||
It is possible to generate stl model using the `--stl` switch. This requires more parameters, first of which is the type of generated fingerprint.
|
||||
|
||||
If the mode is set to `c`, the output model will be a curved finger model, with optional parameters following the filename controlling its shape.
|
||||
|
||||
First optional parameter is papilar line height `height_line`, second is thickness of the model `height_base`,
|
||||
third the rate of curvature along x axis `curv_rate_x` and the third is the rate of curvature along y axis `curv_rate_y`.
|
||||
|
||||
* General form for curved stl generation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 src/main.py input_file output_file dpi --config config_file preset --stl c height_line height_base curvature_x curvature_y
|
||||
|
||||
* Working example curved stl generation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config config/config.json git_example --stl c 2 10 2 2
|
||||
|
||||
Generating planar finger model
|
||||
-----------------------------------
|
||||
|
||||
Using `p` mode makes the generated fingerprint model flat.
|
||||
Optional parameters are height of the papilar lines and base thickness.
|
||||
|
||||
* General command form for planar stl generation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 src/main.py input_file output_file dpi --config config_file preset --stl p height_line height_base
|
||||
|
||||
* Working example of planar stl generation:
|
||||
|
||||
.. code-block::
|
||||
|
||||
$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config config/config.json git_example --stl p 2 10
|
||||
|
||||
Mapping fingerprint to existing finger model
|
||||
--------------------------------------------
|
||||
|
||||
|
||||
Using `m` mode modifies the preexisting finger model to contain fingerprint.
|
||||
First optional parameter is papilar line height `height_line`, second is the number of iterations `iter` to make the finger mesh denser. Higher number of itertions results in denser finger mesh and better result.
|
||||
The last three parameters are axis offsets for the finger, `finger_x`, `finger_y`, `finger_z`.
|
||||
These control the location of the finger. They need to be set only if the user wants to move core of the print closer to the center of the finger.
|
||||
|
||||
* General command form for mapped stl generation
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 src/main.py input_file output_file dpi --config config_file preset --stl m height_line iter finger_x finger_y finger_z
|
||||
|
||||
* Working example of finger mapping
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4.png 600 --config conf/conf.json ridge --stl m 0.2 2 0 0 0
|
||||
|
||||
|
@ -0,0 +1,32 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Generování 3D modelu otisku prstu
|
||||
=================================
|
||||
This application has been developed as a part of bachelor's thesis at Brno University of Technology - Faculty of Information Technology.
|
||||
The topic of this thesis was **Generating a 3D Fingerprint Model** from input fingerprint image.
|
||||
|
||||
This application consists of two main parts. The first part of the application uses custom filter library to apply image filters to enhance fingerprint images.
|
||||
This library consists of several filters imported from image processing modules.
|
||||
|
||||
The second part uses the processed image to make a 3D model of the fingerprint.
|
||||
The model can then be used to print an accurate representation of human fingerprint using a 3D printer.
|
||||
This model can either be planar, curved or mapped to a finger model.
|
||||
|
||||
.. note::
|
||||
Project still under active development.
|
||||
|
||||
Contents
|
||||
--------
|
||||
|
||||
.. toctree::
|
||||
installation
|
||||
filtering
|
||||
config
|
||||
filter_list
|
||||
generation
|
||||
usage
|
||||
troubleshooting
|
||||
modules
|
@ -0,0 +1,66 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
The application has only been tested on Ubuntu gnu/linux machines.
|
||||
It should however be possible to use it in on most linux distributions, WSLs and also virtual machines of most linux distributions.
|
||||
|
||||
To start off, you need these to succesfully use the application.
|
||||
|
||||
* **python** version 3.10 is a requirement might work on earlier python 3 versions:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo apt install python3.10
|
||||
|
||||
* **virtualenv** package for virtual enviroment creation, other packages are installed automatically later:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ pip install virtualenv
|
||||
|
||||
Getting started
|
||||
---------------
|
||||
|
||||
This will install the application and its components into the Documents directory.
|
||||
It will also install several required python packages, including venv, which is used to create a virtual enviroment.
|
||||
|
||||
1. Go to a suitable installation folder, for example **Documents**:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /home/username/Documents
|
||||
|
||||
2. Clone the repository to a suitable directory, for example:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone ssh://git@strade.fit.vutbr.cz:3022/xlanro00/BP_DP-xlanro00.git
|
||||
|
||||
3. Go inside cloned directory:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd BP_DP-xlanro00
|
||||
|
||||
4. Create and enter the virtual enviroment:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ virtualenv .venv && source .venv/bin/activate
|
||||
|
||||
5. Install required python modules from **requirements.txt**:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
(.venv)$ pip install -r requirements.txt
|
||||
|
||||
6. Now, you are all set to run the application.
|
||||
Examples of how to do this are listedin the section bellow.
|
@ -0,0 +1,7 @@
|
||||
log module
|
||||
==========
|
||||
|
||||
.. automodule:: log
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
@ -0,0 +1,118 @@
|
||||
main module
|
||||
===========
|
||||
|
||||
Main file of the project, contains filtering and stl generation functions
|
||||
|
||||
.. moduleauthor:: xlanro00
|
||||
|
||||
.. py:class:: main.fingerprint_app()
|
||||
|
||||
Main class for the application.
|
||||
|
||||
.. py:function:: main.__init__()
|
||||
|
||||
.. py:function:: main.parse_arguments()
|
||||
|
||||
Parse arguments from command line using argparse library.
|
||||
|
||||
.. py:function:: main.parse_stl()
|
||||
|
||||
Parse arguments for stl generation.
|
||||
|
||||
.. py:function:: main.run_filtering()
|
||||
|
||||
Read input file, store as numpy.array, uint8, grayscale.
|
||||
Call function to apply the filters and a function to save it to output file.
|
||||
|
||||
.. py:function:: main.get_empty_figure()
|
||||
|
||||
Return empty figure with one ax, which has dimensions of the input image.
|
||||
|
||||
.. py:function:: main.mirror_image()
|
||||
|
||||
Mirror image using opencv.
|
||||
Should be used to cancel implicit mirroring.
|
||||
|
||||
.. py:function:: main.apply_filters()
|
||||
|
||||
Apply filters to image one by one.
|
||||
In case none were given, pass and save original image to the output file.
|
||||
|
||||
.. py:function:: main.save_image()
|
||||
|
||||
Save processed image to the output file.
|
||||
|
||||
:param fig: figure used to render image.
|
||||
:param ax: Ax used to render image.
|
||||
|
||||
.. py:function:: main.run_stl()
|
||||
|
||||
Choose correct generation code based on mode.
|
||||
|
||||
.. py:function:: main.prepare_heightmap()
|
||||
|
||||
Scale image values to get values from 0 to 255.
|
||||
Check validity of dimension parameters.
|
||||
Then compute base and papilar lines height.
|
||||
Prepare meshgrid, array which later serves to store point coordinates.
|
||||
|
||||
.. py:function:: main.write_stl_header()
|
||||
|
||||
Write parameter string to stl header.
|
||||
This header is 80 bytes long, so the data needs to be shortened to fit.
|
||||
If the parameter string is too long, a warning is printed and the data is truncated.
|
||||
|
||||
.. py:function:: main.get_ID()
|
||||
|
||||
Get a unique ID for the model, which is used in filename and on the model backside.
|
||||
Also create parameter string for stl header, which is used to create ID using hash function MD5.
|
||||
|
||||
.. py:function:: main.append_faces()
|
||||
|
||||
Add faces to the list of faces.
|
||||
|
||||
:param faces: Array with faces.
|
||||
:param c: Indices of currently added faces.
|
||||
|
||||
.. py:function:: main.engrave_text()
|
||||
|
||||
Engrave text on the back of the model.
|
||||
Create an empty image, fill it with color and draw text on it.
|
||||
|
||||
:param bottom_vert_arr: Bottom vertex array.
|
||||
:param top_vert_arr: Top vertex array
|
||||
|
||||
.. py:function:: main.create_stl_mesh()
|
||||
|
||||
Create mesh from faces and vertices arrays.
|
||||
|
||||
:param faces: Vector of face indices
|
||||
:param vertices: Vector of vertices
|
||||
|
||||
.. py:function:: main.create_faces()
|
||||
|
||||
Create faces for the model.
|
||||
Iterate over all vertices, append to vector and create faces from indices.
|
||||
|
||||
:param bottom_vert_arr: Bottom vertex array.
|
||||
:param top_vert_arr: Top vertex array
|
||||
|
||||
.. py:function:: main.make_stl_planar()
|
||||
|
||||
Create vertices from meshgrid, add z coordinates from processed image heightmap.
|
||||
Create faces from vertex indices.
|
||||
|
||||
.. py:function:: main.make_stl_curved()
|
||||
|
||||
Compute curved surface offset.
|
||||
Create vertices from meshgrid, add z coordinates from processed image heightmap.
|
||||
Create faces from vertex indices.
|
||||
|
||||
.. py:function:: main.make_stl_map()
|
||||
|
||||
Map fingerprint to a given finger model.
|
||||
|
||||
.. py:function:: main.save_stl()
|
||||
|
||||
Save final mesh to stl file.
|
||||
|
@ -0,0 +1,11 @@
|
||||
src
|
||||
===
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 4
|
||||
|
||||
config_parser
|
||||
filters
|
||||
log
|
||||
main
|
||||
stl_parser
|
@ -0,0 +1,11 @@
|
||||
stl\_parser module
|
||||
==================
|
||||
|
||||
Utility for parsing STL file header
|
||||
|
||||
.. moduleauthor:: xlanro00
|
||||
|
||||
.. py:function:: stl_parser.stl_parser()
|
||||
|
||||
Parses stl file header.
|
||||
Prints command for running main.py with preformatted arguments.
|
@ -0,0 +1,126 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Troubleshooting
|
||||
===============
|
||||
|
||||
.. raw:: html
|
||||
|
||||
<style>
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
th, td {
|
||||
padding: 8px;
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
.code {
|
||||
font-family: 'Courier New', monospace;
|
||||
background-color: #f5f5f5;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.language-json {
|
||||
color: #333;
|
||||
}
|
||||
</style>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Error message</th>
|
||||
<th>Solution</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
main.py: error: the following arguments are required: input_file, output_file, dpi, filters
|
||||
</td>
|
||||
<td>
|
||||
You probably forgot to include some of the required arguments.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Input file res/Palec_P14.tif does not exist
|
||||
</td>
|
||||
<td>
|
||||
The file you want to process does not exist, check the filename again.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Config file not found
|
||||
</td>
|
||||
<td>
|
||||
The config file you want to load config from does not exist, check the filename again.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Preset not found in config file
|
||||
</td>
|
||||
<td>
|
||||
The preset is not present in selected config file, check the file again or select the correct config file.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Filter undefined_filter not found
|
||||
</td>
|
||||
<td>
|
||||
One of the filters from command line is not defined in the library, check its name.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Unrecognized generation mode
|
||||
</td>
|
||||
<td>
|
||||
The first parameter of stl generation should be p, c or m, check it again.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Line depth must be less than plate thickness
|
||||
</td>
|
||||
<td>
|
||||
When generating a cast, the depth must be less than the base plate thckness, otherwise it would have holes on the other side.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Depth of plate height must be positive
|
||||
</td>
|
||||
<td>
|
||||
Cannot generate negative base plate thickness, check order of arguments.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Base and line height must both be positive
|
||||
</td>
|
||||
<td>
|
||||
In curved generation any negative argument is an error, casts are only for planar mode.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Fingerprint image is outside of the finger model
|
||||
</td>
|
||||
<td>
|
||||
Outside of range of the finger, fingerprint cannot be mapped to nothing. Try to change finger_x, finger_y and finger_z parameters.
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
@ -0,0 +1,44 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
When in doubt, you can always check the help with:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 src/main.py --help
|
||||
|
||||
Which will print out the following message.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ usage: main.py [-h] [-m | --mirror | --no-mirror] input_file
|
||||
output_file dpi ([-c | --config config_file preset] |
|
||||
[filters ...]) [-s | --stl_file p height_line height_base |
|
||||
--stl_file c height_line height_base curv_rate_x curv_rate_y |
|
||||
--stl m height_line iter finger_x finger_y finger_z]
|
||||
[-d | --database database_filename]
|
||||
|
||||
Program for processing a 2D image into 3D fingerprint.
|
||||
|
||||
positional arguments:
|
||||
input_file input file path
|
||||
output_file output file path
|
||||
dpi dpi of used scanner
|
||||
filters list of filter names and their parameters in form
|
||||
[filter_name1 param1=value
|
||||
param2=value filter_name2 param1=value...]
|
||||
|
||||
options:
|
||||
-h, --help show this help message and exit
|
||||
-m, --mirror, --no-mirror
|
||||
switch to mirror input image
|
||||
-s [STL_FILE ...], --stl_file [STL_FILE ...]
|
||||
create stl model from processed image
|
||||
-c CONFIG CONFIG, --config CONFIG CONFIG
|
||||
pair: name of the config file with presets,
|
||||
name of the preset
|
@ -0,0 +1,903 @@
|
||||
/*
|
||||
* basic.css
|
||||
* ~~~~~~~~~
|
||||
*
|
||||
* Sphinx stylesheet -- basic theme.
|
||||
*
|
||||
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
/* -- main layout ----------------------------------------------------------- */
|
||||
|
||||
div.clearer {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
div.section::after {
|
||||
display: block;
|
||||
content: '';
|
||||
clear: left;
|
||||
}
|
||||
|
||||
/* -- relbar ---------------------------------------------------------------- */
|
||||
|
||||
div.related {
|
||||
width: 100%;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
div.related h3 {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.related ul {
|
||||
margin: 0;
|
||||
padding: 0 0 0 10px;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
div.related li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
div.related li.right {
|
||||
float: right;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
/* -- sidebar --------------------------------------------------------------- */
|
||||
|
||||
div.sphinxsidebarwrapper {
|
||||
padding: 10px 5px 0 10px;
|
||||
}
|
||||
|
||||
div.sphinxsidebar {
|
||||
float: left;
|
||||
width: 230px;
|
||||
margin-left: -100%;
|
||||
font-size: 90%;
|
||||
word-wrap: break-word;
|
||||
overflow-wrap : break-word;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul ul,
|
||||
div.sphinxsidebar ul.want-points {
|
||||
margin-left: 20px;
|
||||
list-style: square;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
div.sphinxsidebar form {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
div.sphinxsidebar input {
|
||||
border: 1px solid #98dbcc;
|
||||
font-family: sans-serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
div.sphinxsidebar #searchbox form.search {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
div.sphinxsidebar #searchbox input[type="text"] {
|
||||
float: left;
|
||||
width: 80%;
|
||||
padding: 0.25em;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
div.sphinxsidebar #searchbox input[type="submit"] {
|
||||
float: left;
|
||||
width: 20%;
|
||||
border-left: none;
|
||||
padding: 0.25em;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
/* -- search page ----------------------------------------------------------- */
|
||||
|
||||
ul.search {
|
||||
margin: 10px 0 0 20px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul.search li {
|
||||
padding: 5px 0 5px 20px;
|
||||
background-image: url(file.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 7px;
|
||||
}
|
||||
|
||||
ul.search li a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
ul.search li p.context {
|
||||
color: #888;
|
||||
margin: 2px 0 0 30px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
ul.keywordmatches li.goodmatch a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* -- index page ------------------------------------------------------------ */
|
||||
|
||||
table.contentstable {
|
||||
width: 90%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.contentstable p.biglink {
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
a.biglink {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
span.linkdescr {
|
||||
font-style: italic;
|
||||
padding-top: 5px;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
/* -- general index --------------------------------------------------------- */
|
||||
|
||||
table.indextable {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table.indextable td {
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
table.indextable ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
table.indextable > tbody > tr > td > ul {
|
||||
padding-left: 0em;
|
||||
}
|
||||
|
||||
table.indextable tr.pcap {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
table.indextable tr.cap {
|
||||
margin-top: 10px;
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
img.toggler {
|
||||
margin-right: 3px;
|
||||
margin-top: 3px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div.modindex-jumpbox {
|
||||
border-top: 1px solid #ddd;
|
||||
border-bottom: 1px solid #ddd;
|
||||
margin: 1em 0 1em 0;
|
||||
padding: 0.4em;
|
||||
}
|
||||
|
||||
div.genindex-jumpbox {
|
||||
border-top: 1px solid #ddd;
|
||||
border-bottom: 1px solid #ddd;
|
||||
margin: 1em 0 1em 0;
|
||||
padding: 0.4em;
|
||||
}
|
||||
|
||||
/* -- domain module index --------------------------------------------------- */
|
||||
|
||||
table.modindextable td {
|
||||
padding: 2px;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
/* -- general body styles --------------------------------------------------- */
|
||||
|
||||
div.body {
|
||||
min-width: 360px;
|
||||
max-width: 800px;
|
||||
}
|
||||
|
||||
div.body p, div.body dd, div.body li, div.body blockquote {
|
||||
-moz-hyphens: auto;
|
||||
-ms-hyphens: auto;
|
||||
-webkit-hyphens: auto;
|
||||
hyphens: auto;
|
||||
}
|
||||
|
||||
a.headerlink {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
h1:hover > a.headerlink,
|
||||
h2:hover > a.headerlink,
|
||||
h3:hover > a.headerlink,
|
||||
h4:hover > a.headerlink,
|
||||
h5:hover > a.headerlink,
|
||||
h6:hover > a.headerlink,
|
||||
dt:hover > a.headerlink,
|
||||
caption:hover > a.headerlink,
|
||||
p.caption:hover > a.headerlink,
|
||||
div.code-block-caption:hover > a.headerlink {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
div.body p.caption {
|
||||
text-align: inherit;
|
||||
}
|
||||
|
||||
div.body td {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.first {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
p.rubric {
|
||||
margin-top: 30px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
img.align-left, figure.align-left, .figure.align-left, object.align-left {
|
||||
clear: left;
|
||||
float: left;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
img.align-right, figure.align-right, .figure.align-right, object.align-right {
|
||||
clear: right;
|
||||
float: right;
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
||||
img.align-center, figure.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
img.align-default, figure.align-default, .figure.align-default {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.align-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.align-default {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* -- sidebars -------------------------------------------------------------- */
|
||||
|
||||
div.sidebar,
|
||||
aside.sidebar {
|
||||
margin: 0 0 0.5em 1em;
|
||||
border: 1px solid #ddb;
|
||||
padding: 7px;
|
||||
background-color: #ffe;
|
||||
width: 40%;
|
||||
float: right;
|
||||
clear: right;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
p.sidebar-title {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
nav.contents,
|
||||
aside.topic,
|
||||
div.admonition, div.topic, blockquote {
|
||||
clear: left;
|
||||
}
|
||||
|
||||
/* -- topics ---------------------------------------------------------------- */
|
||||
|
||||
nav.contents,
|
||||
aside.topic,
|
||||
div.topic {
|
||||
border: 1px solid #ccc;
|
||||
padding: 7px;
|
||||
margin: 10px 0 10px 0;
|
||||
}
|
||||
|
||||
p.topic-title {
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/* -- admonitions ----------------------------------------------------------- */
|
||||
|
||||
div.admonition {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
padding: 7px;
|
||||
}
|
||||
|
||||
div.admonition dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
p.admonition-title {
|
||||
margin: 0px 10px 5px 0px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.body p.centered {
|
||||
text-align: center;
|
||||
margin-top: 25px;
|
||||
}
|
||||
|
||||
/* -- content of sidebars/topics/admonitions -------------------------------- */
|
||||
|
||||
div.sidebar > :last-child,
|
||||
aside.sidebar > :last-child,
|
||||
nav.contents > :last-child,
|
||||
aside.topic > :last-child,
|
||||
div.topic > :last-child,
|
||||
div.admonition > :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
div.sidebar::after,
|
||||
aside.sidebar::after,
|
||||
nav.contents::after,
|
||||
aside.topic::after,
|
||||
div.topic::after,
|
||||
div.admonition::after,
|
||||
blockquote::after {
|
||||
display: block;
|
||||
content: '';
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* -- tables ---------------------------------------------------------------- */
|
||||
|
||||
table.docutils {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
border: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table.align-center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.align-default {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table caption span.caption-number {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
table caption span.caption-text {
|
||||
}
|
||||
|
||||
table.docutils td, table.docutils th {
|
||||
padding: 1px 8px 1px 5px;
|
||||
border-top: 0;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
border-bottom: 1px solid #aaa;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px;
|
||||
}
|
||||
|
||||
table.citation td {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
th > :first-child,
|
||||
td > :first-child {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
th > :last-child,
|
||||
td > :last-child {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
/* -- figures --------------------------------------------------------------- */
|
||||
|
||||
div.figure, figure {
|
||||
margin: 0.5em;
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
div.figure p.caption, figcaption {
|
||||
padding: 0.3em;
|
||||
}
|
||||
|
||||
div.figure p.caption span.caption-number,
|
||||
figcaption span.caption-number {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
div.figure p.caption span.caption-text,
|
||||
figcaption span.caption-text {
|
||||
}
|
||||
|
||||
/* -- field list styles ----------------------------------------------------- */
|
||||
|
||||
table.field-list td, table.field-list th {
|
||||
border: 0 !important;
|
||||
}
|
||||
|
||||
.field-list ul {
|
||||
margin: 0;
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
.field-list p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.field-name {
|
||||
-moz-hyphens: manual;
|
||||
-ms-hyphens: manual;
|
||||
-webkit-hyphens: manual;
|
||||
hyphens: manual;
|
||||
}
|
||||
|
||||
/* -- hlist styles ---------------------------------------------------------- */
|
||||
|
||||
table.hlist {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
table.hlist td {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
/* -- object description styles --------------------------------------------- */
|
||||
|
||||
.sig {
|
||||
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
|
||||
}
|
||||
|
||||
.sig-name, code.descname {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.sig-name {
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
code.descname {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.sig-prename, code.descclassname {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.optional {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
.sig-paren {
|
||||
font-size: larger;
|
||||
}
|
||||
|
||||
.sig-param.n {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* C++ specific styling */
|
||||
|
||||
.sig-inline.c-texpr,
|
||||
.sig-inline.cpp-texpr {
|
||||
font-family: unset;
|
||||
}
|
||||
|
||||
.sig.c .k, .sig.c .kt,
|
||||
.sig.cpp .k, .sig.cpp .kt {
|
||||
color: #0033B3;
|
||||
}
|
||||
|
||||
.sig.c .m,
|
||||
.sig.cpp .m {
|
||||
color: #1750EB;
|
||||
}
|
||||
|
||||
.sig.c .s, .sig.c .sc,
|
||||
.sig.cpp .s, .sig.cpp .sc {
|
||||
color: #067D17;
|
||||
}
|
||||
|
||||
|
||||
/* -- other body styles ----------------------------------------------------- */
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha;
|
||||
}
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha;
|
||||
}
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman;
|
||||
}
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman;
|
||||
}
|
||||
|
||||
:not(li) > ol > li:first-child > :first-child,
|
||||
:not(li) > ul > li:first-child > :first-child {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
:not(li) > ol > li:last-child > :last-child,
|
||||
:not(li) > ul > li:last-child > :last-child {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
ol.simple ol p,
|
||||
ol.simple ul p,
|
||||
ul.simple ol p,
|
||||
ul.simple ul p {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
ol.simple > li:not(:first-child) > p,
|
||||
ul.simple > li:not(:first-child) > p {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
ol.simple p,
|
||||
ul.simple p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
aside.footnote > span,
|
||||
div.citation > span {
|
||||
float: left;
|
||||
}
|
||||
aside.footnote > span:last-of-type,
|
||||
div.citation > span:last-of-type {
|
||||
padding-right: 0.5em;
|
||||
}
|
||||
aside.footnote > p {
|
||||
margin-left: 2em;
|
||||
}
|
||||
div.citation > p {
|
||||
margin-left: 4em;
|
||||
}
|
||||
aside.footnote > p:last-of-type,
|
||||
div.citation > p:last-of-type {
|
||||
margin-bottom: 0em;
|
||||
}
|
||||
aside.footnote > p:last-of-type:after,
|
||||
div.citation > p:last-of-type:after {
|
||||
content: "";
|
||||
clear: both;
|
||||
}
|
||||
|
||||
dl.field-list {
|
||||
display: grid;
|
||||
grid-template-columns: fit-content(30%) auto;
|
||||
}
|
||||
|
||||
dl.field-list > dt {
|
||||
font-weight: bold;
|
||||
word-break: break-word;
|
||||
padding-left: 0.5em;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
dl.field-list > dd {
|
||||
padding-left: 0.5em;
|
||||
margin-top: 0em;
|
||||
margin-left: 0em;
|
||||
margin-bottom: 0em;
|
||||
}
|
||||
|
||||
dl {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
dd > :first-child {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
dd ul, dd table {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 10px;
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
dl > dd:last-child,
|
||||
dl > dd:last-child > :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dt:target, span.highlighted {
|
||||
background-color: #fbe54e;
|
||||
}
|
||||
|
||||
rect.highlighted {
|
||||
fill: #fbe54e;
|
||||
}
|
||||
|
||||
dl.glossary dt {
|
||||
font-weight: bold;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
.versionmodified {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.system-message {
|
||||
background-color: #fda;
|
||||
padding: 5px;
|
||||
border: 3px solid red;
|
||||
}
|
||||
|
||||
.footnote:target {
|
||||
background-color: #ffa;
|
||||
}
|
||||
|
||||
.line-block {
|
||||
display: block;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.line-block .line-block {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
margin-left: 1.5em;
|
||||
}
|
||||
|
||||
.guilabel, .menuselection {
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
.accelerator {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.classifier {
|
||||
font-style: oblique;
|
||||
}
|
||||
|
||||
.classifier:before {
|
||||
font-style: normal;
|
||||
margin: 0 0.5em;
|
||||
content: ":";
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
abbr, acronym {
|
||||
border-bottom: dotted 1px;
|
||||
cursor: help;
|
||||
}
|
||||
|
||||
/* -- code displays --------------------------------------------------------- */
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
overflow-y: hidden; /* fixes display issues on Chrome browsers */
|
||||
}
|
||||
|
||||
pre, div[class*="highlight-"] {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
span.pre {
|
||||
-moz-hyphens: none;
|
||||
-ms-hyphens: none;
|
||||
-webkit-hyphens: none;
|
||||
hyphens: none;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
div[class*="highlight-"] {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
td.linenos pre {
|
||||
border: 0;
|
||||
background-color: transparent;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
table.highlighttable {
|
||||
display: block;
|
||||
}
|
||||
|
||||
table.highlighttable tbody {
|
||||
display: block;
|
||||
}
|
||||
|
||||
table.highlighttable tr {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
table.highlighttable td {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
table.highlighttable td.linenos {
|
||||
padding-right: 0.5em;
|
||||
}
|
||||
|
||||
table.highlighttable td.code {
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.highlight .hll {
|
||||
display: block;
|
||||
}
|
||||
|
||||
div.highlight pre,
|
||||
table.highlighttable pre {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
div.code-block-caption + div {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
div.code-block-caption {
|
||||
margin-top: 1em;
|
||||
padding: 2px 5px;
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
div.code-block-caption code {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
table.highlighttable td.linenos,
|
||||
span.linenos,
|
||||
div.highlight span.gp { /* gp: Generic.Prompt */
|
||||
user-select: none;
|
||||
-webkit-user-select: text; /* Safari fallback only */
|
||||
-webkit-user-select: none; /* Chrome/Safari */
|
||||
-moz-user-select: none; /* Firefox */
|
||||
-ms-user-select: none; /* IE10+ */
|
||||
}
|
||||
|
||||
div.code-block-caption span.caption-number {
|
||||
padding: 0.1em 0.3em;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
div.code-block-caption span.caption-text {
|
||||
}
|
||||
|
||||
div.literal-block-wrapper {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
code.xref, a code {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.viewcode-link {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.viewcode-back {
|
||||
float: right;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
div.viewcode-block:target {
|
||||
margin: -1px -10px;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
/* -- math display ---------------------------------------------------------- */
|
||||
|
||||
img.math {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
div.body div.math p {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
span.eqno {
|
||||
float: right;
|
||||
}
|
||||
|
||||
span.eqno a.headerlink {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
div.math:hover a.headerlink {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
/* -- printout stylesheet --------------------------------------------------- */
|
||||
|
||||
@media print {
|
||||
div.document,
|
||||
div.documentwrapper,
|
||||
div.bodywrapper {
|
||||
margin: 0 !important;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
div.sphinxsidebar,
|
||||
div.related,
|
||||
div.footer,
|
||||
#top-link {
|
||||
display: none;
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
/*
|
||||
This CSS file should be overridden by the theme authors. It's
|
||||
meant for debugging and developing the skeleton that this theme provides.
|
||||
*/
|
||||
body {
|
||||
font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif,
|
||||
"Apple Color Emoji", "Segoe UI Emoji";
|
||||
background: lavender;
|
||||
}
|
||||
.sb-announcement {
|
||||
background: rgb(131, 131, 131);
|
||||
}
|
||||
.sb-announcement__inner {
|
||||
background: black;
|
||||
color: white;
|
||||
}
|
||||
.sb-header {
|
||||
background: lightskyblue;
|
||||
}
|
||||
.sb-header__inner {
|
||||
background: royalblue;
|
||||
color: white;
|
||||
}
|
||||
.sb-header-secondary {
|
||||
background: lightcyan;
|
||||
}
|
||||
.sb-header-secondary__inner {
|
||||
background: cornflowerblue;
|
||||
color: white;
|
||||
}
|
||||
.sb-sidebar-primary {
|
||||
background: lightgreen;
|
||||
}
|
||||
.sb-main {
|
||||
background: blanchedalmond;
|
||||
}
|
||||
.sb-main__inner {
|
||||
background: antiquewhite;
|
||||
}
|
||||
.sb-header-article {
|
||||
background: lightsteelblue;
|
||||
}
|
||||
.sb-article-container {
|
||||
background: snow;
|
||||
}
|
||||
.sb-article-main {
|
||||
background: white;
|
||||
}
|
||||
.sb-footer-article {
|
||||
background: lightpink;
|
||||
}
|
||||
.sb-sidebar-secondary {
|
||||
background: lightgoldenrodyellow;
|
||||
}
|
||||
.sb-footer-content {
|
||||
background: plum;
|
||||
}
|
||||
.sb-footer-content__inner {
|
||||
background: palevioletred;
|
||||
}
|
||||
.sb-footer {
|
||||
background: pink;
|
||||
}
|
||||
.sb-footer__inner {
|
||||
background: salmon;
|
||||
}
|
||||
.sb-article {
|
||||
background: white;
|
||||
}
|
@ -0,0 +1,156 @@
|
||||
/*
|
||||
* doctools.js
|
||||
* ~~~~~~~~~~~
|
||||
*
|
||||
* Base JavaScript utilities for all Sphinx HTML documentation.
|
||||
*
|
||||
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
|
||||
"TEXTAREA",
|
||||
"INPUT",
|
||||
"SELECT",
|
||||
"BUTTON",
|
||||
]);
|
||||
|
||||
const _ready = (callback) => {
|
||||
if (document.readyState !== "loading") {
|
||||
callback();
|
||||
} else {
|
||||
document.addEventListener("DOMContentLoaded", callback);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Small JavaScript module for the documentation.
|
||||
*/
|
||||
const Documentation = {
|
||||
init: () => {
|
||||
Documentation.initDomainIndexTable();
|
||||
Documentation.initOnKeyListeners();
|
||||
},
|
||||
|
||||
/**
|
||||
* i18n support
|
||||
*/
|
||||
TRANSLATIONS: {},
|
||||
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
|
||||
LOCALE: "unknown",
|
||||
|
||||
// gettext and ngettext don't access this so that the functions
|
||||
// can safely bound to a different name (_ = Documentation.gettext)
|
||||
gettext: (string) => {
|
||||
const translated = Documentation.TRANSLATIONS[string];
|
||||
switch (typeof translated) {
|
||||
case "undefined":
|
||||
return string; // no translation
|
||||
case "string":
|
||||
return translated; // translation exists
|
||||
default:
|
||||
return translated[0]; // (singular, plural) translation tuple exists
|
||||
}
|
||||
},
|
||||
|
||||
ngettext: (singular, plural, n) => {
|
||||
const translated = Documentation.TRANSLATIONS[singular];
|
||||
if (typeof translated !== "undefined")
|
||||
return translated[Documentation.PLURAL_EXPR(n)];
|
||||
return n === 1 ? singular : plural;
|
||||
},
|
||||
|
||||
addTranslations: (catalog) => {
|
||||
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
|
||||
Documentation.PLURAL_EXPR = new Function(
|
||||
"n",
|
||||
`return (${catalog.plural_expr})`
|
||||
);
|
||||
Documentation.LOCALE = catalog.locale;
|
||||
},
|
||||
|
||||
/**
|
||||
* helper function to focus on search bar
|
||||
*/
|
||||
focusSearchBar: () => {
|
||||
document.querySelectorAll("input[name=q]")[0]?.focus();
|
||||
},
|
||||
|
||||
/**
|
||||
* Initialise the domain index toggle buttons
|
||||
*/
|
||||
initDomainIndexTable: () => {
|
||||
const toggler = (el) => {
|
||||
const idNumber = el.id.substr(7);
|
||||
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
|
||||
if (el.src.substr(-9) === "minus.png") {
|
||||
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
|
||||
toggledRows.forEach((el) => (el.style.display = "none"));
|
||||
} else {
|
||||
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
|
||||
toggledRows.forEach((el) => (el.style.display = ""));
|
||||
}
|
||||
};
|
||||
|
||||
const togglerElements = document.querySelectorAll("img.toggler");
|
||||
togglerElements.forEach((el) =>
|
||||
el.addEventListener("click", (event) => toggler(event.currentTarget))
|
||||
);
|
||||
togglerElements.forEach((el) => (el.style.display = ""));
|
||||
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
|
||||
},
|
||||
|
||||
initOnKeyListeners: () => {
|
||||
// only install a listener if it is really needed
|
||||
if (
|
||||
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
|
||||
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
|
||||
)
|
||||
return;
|
||||
|
||||
document.addEventListener("keydown", (event) => {
|
||||
// bail for input elements
|
||||
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
|
||||
// bail with special keys
|
||||
if (event.altKey || event.ctrlKey || event.metaKey) return;
|
||||
|
||||
if (!event.shiftKey) {
|
||||
switch (event.key) {
|
||||
case "ArrowLeft":
|
||||
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
|
||||
|
||||
const prevLink = document.querySelector('link[rel="prev"]');
|
||||
if (prevLink && prevLink.href) {
|
||||
window.location.href = prevLink.href;
|
||||
event.preventDefault();
|
||||
}
|
||||
break;
|
||||
case "ArrowRight":
|
||||
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
|
||||
|
||||
const nextLink = document.querySelector('link[rel="next"]');
|
||||
if (nextLink && nextLink.href) {
|
||||
window.location.href = nextLink.href;
|
||||
event.preventDefault();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// some keyboard layouts may need Shift to get /
|
||||
switch (event.key) {
|
||||
case "/":
|
||||
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
|
||||
Documentation.focusSearchBar();
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
// quick alias for translations
|
||||
const _ = Documentation.gettext;
|
||||
|
||||
_ready(Documentation.init);
|
@ -0,0 +1,14 @@
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
|
||||
VERSION: '1.0',
|
||||
LANGUAGE: 'en',
|
||||
COLLAPSE_INDEX: false,
|
||||
BUILDER: 'html',
|
||||
FILE_SUFFIX: '.html',
|
||||
LINK_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
SOURCELINK_SUFFIX: '.txt',
|
||||
NAVIGATION_WITH_KEYS: false,
|
||||
SHOW_SEARCH_SUMMARY: true,
|
||||
ENABLE_SEARCH_SHORTCUTS: true,
|
||||
};
|
After Width: | Height: | Size: 286 B |
@ -0,0 +1,199 @@
|
||||
/*
|
||||
* language_data.js
|
||||
* ~~~~~~~~~~~~~~~~
|
||||
*
|
||||
* This script contains the language-specific data used by searchtools.js,
|
||||
* namely the list of stopwords, stemmer, scorer and splitter.
|
||||
*
|
||||
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
|
||||
|
||||
|
||||
/* Non-minified version is copied as a separate JS file, is available */
|
||||
|
||||
/**
|
||||
* Porter Stemmer
|
||||
*/
|
||||
var Stemmer = function() {
|
||||
|
||||
var step2list = {
|
||||
ational: 'ate',
|
||||
tional: 'tion',
|
||||
enci: 'ence',
|
||||
anci: 'ance',
|
||||
izer: 'ize',
|
||||
bli: 'ble',
|
||||
alli: 'al',
|
||||
entli: 'ent',
|
||||
eli: 'e',
|
||||
ousli: 'ous',
|
||||
ization: 'ize',
|
||||
ation: 'ate',
|
||||
ator: 'ate',
|
||||
alism: 'al',
|
||||
iveness: 'ive',
|
||||
fulness: 'ful',
|
||||
ousness: 'ous',
|
||||
aliti: 'al',
|
||||
iviti: 'ive',
|
||||
biliti: 'ble',
|
||||
logi: 'log'
|
||||
};
|
||||
|
||||
var step3list = {
|
||||
icate: 'ic',
|
||||
ative: '',
|
||||
alize: 'al',
|
||||
iciti: 'ic',
|
||||
ical: 'ic',
|
||||
ful: '',
|
||||
ness: ''
|
||||
};
|
||||
|
||||
var c = "[^aeiou]"; // consonant
|
||||
var v = "[aeiouy]"; // vowel
|
||||
var C = c + "[^aeiouy]*"; // consonant sequence
|
||||
var V = v + "[aeiou]*"; // vowel sequence
|
||||
|
||||
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
|
||||
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
|
||||
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
|
||||
var s_v = "^(" + C + ")?" + v; // vowel in stem
|
||||
|
||||
this.stemWord = function (w) {
|
||||
var stem;
|
||||
var suffix;
|
||||
var firstch;
|
||||
var origword = w;
|
||||
|
||||
if (w.length < 3)
|
||||
return w;
|
||||
|
||||
var re;
|
||||
var re2;
|
||||
var re3;
|
||||
var re4;
|
||||
|
||||
firstch = w.substr(0,1);
|
||||
if (firstch == "y")
|
||||
w = firstch.toUpperCase() + w.substr(1);
|
||||
|
||||
// Step 1a
|
||||
re = /^(.+?)(ss|i)es$/;
|
||||
re2 = /^(.+?)([^s])s$/;
|
||||
|
||||
if (re.test(w))
|
||||
w = w.replace(re,"$1$2");
|
||||
else if (re2.test(w))
|
||||
w = w.replace(re2,"$1$2");
|
||||
|
||||
// Step 1b
|
||||
re = /^(.+?)eed$/;
|
||||
re2 = /^(.+?)(ed|ing)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
re = new RegExp(mgr0);
|
||||
if (re.test(fp[1])) {
|
||||
re = /.$/;
|
||||
w = w.replace(re,"");
|
||||
}
|
||||
}
|
||||
else if (re2.test(w)) {
|
||||
var fp = re2.exec(w);
|
||||
stem = fp[1];
|
||||
re2 = new RegExp(s_v);
|
||||
if (re2.test(stem)) {
|
||||
w = stem;
|
||||
re2 = /(at|bl|iz)$/;
|
||||
re3 = new RegExp("([^aeiouylsz])\\1$");
|
||||
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
||||
if (re2.test(w))
|
||||
w = w + "e";
|
||||
else if (re3.test(w)) {
|
||||
re = /.$/;
|
||||
w = w.replace(re,"");
|
||||
}
|
||||
else if (re4.test(w))
|
||||
w = w + "e";
|
||||
}
|
||||
}
|
||||
|
||||
// Step 1c
|
||||
re = /^(.+?)y$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
re = new RegExp(s_v);
|
||||
if (re.test(stem))
|
||||
w = stem + "i";
|
||||
}
|
||||
|
||||
// Step 2
|
||||
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
suffix = fp[2];
|
||||
re = new RegExp(mgr0);
|
||||
if (re.test(stem))
|
||||
w = stem + step2list[suffix];
|
||||
}
|
||||
|
||||
// Step 3
|
||||
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
suffix = fp[2];
|
||||
re = new RegExp(mgr0);
|
||||
if (re.test(stem))
|
||||
w = stem + step3list[suffix];
|
||||
}
|
||||
|
||||
// Step 4
|
||||
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
|
||||
re2 = /^(.+?)(s|t)(ion)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
re = new RegExp(mgr1);
|
||||
if (re.test(stem))
|
||||
w = stem;
|
||||
}
|
||||
else if (re2.test(w)) {
|
||||
var fp = re2.exec(w);
|
||||
stem = fp[1] + fp[2];
|
||||
re2 = new RegExp(mgr1);
|
||||
if (re2.test(stem))
|
||||
w = stem;
|
||||
}
|
||||
|
||||
// Step 5
|
||||
re = /^(.+?)e$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
re = new RegExp(mgr1);
|
||||
re2 = new RegExp(meq1);
|
||||
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
||||
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
|
||||
w = stem;
|
||||
}
|
||||
re = /ll$/;
|
||||
re2 = new RegExp(mgr1);
|
||||
if (re.test(w) && re2.test(w)) {
|
||||
re = /.$/;
|
||||
w = w.replace(re,"");
|
||||
}
|
||||
|
||||
// and turn initial Y back to y
|
||||
if (firstch == "y")
|
||||
w = firstch.toLowerCase() + w.substr(1);
|
||||
return w;
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 90 B |
After Width: | Height: | Size: 90 B |
@ -0,0 +1,255 @@
|
||||
.highlight pre { line-height: 125%; }
|
||||
.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||
.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||
.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||
.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight { background: #f8f8f8; }
|
||||
.highlight .c { color: #8f5902; font-style: italic } /* Comment */
|
||||
.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
|
||||
.highlight .g { color: #000000 } /* Generic */
|
||||
.highlight .k { color: #204a87; font-weight: bold } /* Keyword */
|
||||
.highlight .l { color: #000000 } /* Literal */
|
||||
.highlight .n { color: #000000 } /* Name */
|
||||
.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */
|
||||
.highlight .x { color: #000000 } /* Other */
|
||||
.highlight .p { color: #000000; font-weight: bold } /* Punctuation */
|
||||
.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */
|
||||
.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */
|
||||
.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */
|
||||
.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
|
||||
.highlight .gd { color: #a40000 } /* Generic.Deleted */
|
||||
.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #ef2929 } /* Generic.Error */
|
||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
||||
.highlight .go { color: #000000; font-style: italic } /* Generic.Output */
|
||||
.highlight .gp { color: #8f5902 } /* Generic.Prompt */
|
||||
.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
|
||||
.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .ld { color: #000000 } /* Literal.Date */
|
||||
.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */
|
||||
.highlight .s { color: #4e9a06 } /* Literal.String */
|
||||
.highlight .na { color: #c4a000 } /* Name.Attribute */
|
||||
.highlight .nb { color: #204a87 } /* Name.Builtin */
|
||||
.highlight .nc { color: #000000 } /* Name.Class */
|
||||
.highlight .no { color: #000000 } /* Name.Constant */
|
||||
.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */
|
||||
.highlight .ni { color: #ce5c00 } /* Name.Entity */
|
||||
.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
|
||||
.highlight .nf { color: #000000 } /* Name.Function */
|
||||
.highlight .nl { color: #f57900 } /* Name.Label */
|
||||
.highlight .nn { color: #000000 } /* Name.Namespace */
|
||||
.highlight .nx { color: #000000 } /* Name.Other */
|
||||
.highlight .py { color: #000000 } /* Name.Property */
|
||||
.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #000000 } /* Name.Variable */
|
||||
.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */
|
||||
.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */
|
||||
.highlight .w { color: #f8f8f8 } /* Text.Whitespace */
|
||||
.highlight .mb { color: #0000cf; font-weight: bold } /* Literal.Number.Bin */
|
||||
.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */
|
||||
.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */
|
||||
.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #4e9a06 } /* Literal.String.Char */
|
||||
.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */
|
||||
.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
|
||||
.highlight .se { color: #4e9a06 } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #4e9a06 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
|
||||
.highlight .fm { color: #000000 } /* Name.Function.Magic */
|
||||
.highlight .vc { color: #000000 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #000000 } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #000000 } /* Name.Variable.Instance */
|
||||
.highlight .vm { color: #000000 } /* Name.Variable.Magic */
|
||||
.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */
|
||||
@media not print {
|
||||
body[data-theme="dark"] .highlight pre { line-height: 125%; }
|
||||
body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||
body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||
body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||
body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||
body[data-theme="dark"] .highlight .hll { background-color: #404040 }
|
||||
body[data-theme="dark"] .highlight { background: #202020; color: #d0d0d0 }
|
||||
body[data-theme="dark"] .highlight .c { color: #ababab; font-style: italic } /* Comment */
|
||||
body[data-theme="dark"] .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||
body[data-theme="dark"] .highlight .esc { color: #d0d0d0 } /* Escape */
|
||||
body[data-theme="dark"] .highlight .g { color: #d0d0d0 } /* Generic */
|
||||
body[data-theme="dark"] .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */
|
||||
body[data-theme="dark"] .highlight .l { color: #d0d0d0 } /* Literal */
|
||||
body[data-theme="dark"] .highlight .n { color: #d0d0d0 } /* Name */
|
||||
body[data-theme="dark"] .highlight .o { color: #d0d0d0 } /* Operator */
|
||||
body[data-theme="dark"] .highlight .x { color: #d0d0d0 } /* Other */
|
||||
body[data-theme="dark"] .highlight .p { color: #d0d0d0 } /* Punctuation */
|
||||
body[data-theme="dark"] .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */
|
||||
body[data-theme="dark"] .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */
|
||||
body[data-theme="dark"] .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */
|
||||
body[data-theme="dark"] .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */
|
||||
body[data-theme="dark"] .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */
|
||||
body[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
|
||||
body[data-theme="dark"] .highlight .gd { color: #d22323 } /* Generic.Deleted */
|
||||
body[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
|
||||
body[data-theme="dark"] .highlight .gr { color: #d22323 } /* Generic.Error */
|
||||
body[data-theme="dark"] .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
|
||||
body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */
|
||||
body[data-theme="dark"] .highlight .go { color: #cccccc } /* Generic.Output */
|
||||
body[data-theme="dark"] .highlight .gp { color: #aaaaaa } /* Generic.Prompt */
|
||||
body[data-theme="dark"] .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
|
||||
body[data-theme="dark"] .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
|
||||
body[data-theme="dark"] .highlight .gt { color: #d22323 } /* Generic.Traceback */
|
||||
body[data-theme="dark"] .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */
|
||||
body[data-theme="dark"] .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */
|
||||
body[data-theme="dark"] .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */
|
||||
body[data-theme="dark"] .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */
|
||||
body[data-theme="dark"] .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */
|
||||
body[data-theme="dark"] .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */
|
||||
body[data-theme="dark"] .highlight .ld { color: #d0d0d0 } /* Literal.Date */
|
||||
body[data-theme="dark"] .highlight .m { color: #51b2fd } /* Literal.Number */
|
||||
body[data-theme="dark"] .highlight .s { color: #ed9d13 } /* Literal.String */
|
||||
body[data-theme="dark"] .highlight .na { color: #bbbbbb } /* Name.Attribute */
|
||||
body[data-theme="dark"] .highlight .nb { color: #2fbccd } /* Name.Builtin */
|
||||
body[data-theme="dark"] .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */
|
||||
body[data-theme="dark"] .highlight .no { color: #40ffff } /* Name.Constant */
|
||||
body[data-theme="dark"] .highlight .nd { color: #ffa500 } /* Name.Decorator */
|
||||
body[data-theme="dark"] .highlight .ni { color: #d0d0d0 } /* Name.Entity */
|
||||
body[data-theme="dark"] .highlight .ne { color: #bbbbbb } /* Name.Exception */
|
||||
body[data-theme="dark"] .highlight .nf { color: #71adff } /* Name.Function */
|
||||
body[data-theme="dark"] .highlight .nl { color: #d0d0d0 } /* Name.Label */
|
||||
body[data-theme="dark"] .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */
|
||||
body[data-theme="dark"] .highlight .nx { color: #d0d0d0 } /* Name.Other */
|
||||
body[data-theme="dark"] .highlight .py { color: #d0d0d0 } /* Name.Property */
|
||||
body[data-theme="dark"] .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */
|
||||
body[data-theme="dark"] .highlight .nv { color: #40ffff } /* Name.Variable */
|
||||
body[data-theme="dark"] .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */
|
||||
body[data-theme="dark"] .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */
|
||||
body[data-theme="dark"] .highlight .w { color: #666666 } /* Text.Whitespace */
|
||||
body[data-theme="dark"] .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */
|
||||
body[data-theme="dark"] .highlight .mf { color: #51b2fd } /* Literal.Number.Float */
|
||||
body[data-theme="dark"] .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */
|
||||
body[data-theme="dark"] .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */
|
||||
body[data-theme="dark"] .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */
|
||||
body[data-theme="dark"] .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */
|
||||
body[data-theme="dark"] .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */
|
||||
body[data-theme="dark"] .highlight .sc { color: #ed9d13 } /* Literal.String.Char */
|
||||
body[data-theme="dark"] .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */
|
||||
body[data-theme="dark"] .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */
|
||||
body[data-theme="dark"] .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */
|
||||
body[data-theme="dark"] .highlight .se { color: #ed9d13 } /* Literal.String.Escape */
|
||||
body[data-theme="dark"] .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */
|
||||
body[data-theme="dark"] .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */
|
||||
body[data-theme="dark"] .highlight .sx { color: #ffa500 } /* Literal.String.Other */
|
||||
body[data-theme="dark"] .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */
|
||||
body[data-theme="dark"] .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */
|
||||
body[data-theme="dark"] .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */
|
||||
body[data-theme="dark"] .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */
|
||||
body[data-theme="dark"] .highlight .fm { color: #71adff } /* Name.Function.Magic */
|
||||
body[data-theme="dark"] .highlight .vc { color: #40ffff } /* Name.Variable.Class */
|
||||
body[data-theme="dark"] .highlight .vg { color: #40ffff } /* Name.Variable.Global */
|
||||
body[data-theme="dark"] .highlight .vi { color: #40ffff } /* Name.Variable.Instance */
|
||||
body[data-theme="dark"] .highlight .vm { color: #40ffff } /* Name.Variable.Magic */
|
||||
body[data-theme="dark"] .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) .highlight pre { line-height: 125%; }
|
||||
body:not([data-theme="light"]) .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||
body:not([data-theme="light"]) .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||
body:not([data-theme="light"]) .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||
body:not([data-theme="light"]) .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||
body:not([data-theme="light"]) .highlight .hll { background-color: #404040 }
|
||||
body:not([data-theme="light"]) .highlight { background: #202020; color: #d0d0d0 }
|
||||
body:not([data-theme="light"]) .highlight .c { color: #ababab; font-style: italic } /* Comment */
|
||||
body:not([data-theme="light"]) .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||
body:not([data-theme="light"]) .highlight .esc { color: #d0d0d0 } /* Escape */
|
||||
body:not([data-theme="light"]) .highlight .g { color: #d0d0d0 } /* Generic */
|
||||
body:not([data-theme="light"]) .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */
|
||||
body:not([data-theme="light"]) .highlight .l { color: #d0d0d0 } /* Literal */
|
||||
body:not([data-theme="light"]) .highlight .n { color: #d0d0d0 } /* Name */
|
||||
body:not([data-theme="light"]) .highlight .o { color: #d0d0d0 } /* Operator */
|
||||
body:not([data-theme="light"]) .highlight .x { color: #d0d0d0 } /* Other */
|
||||
body:not([data-theme="light"]) .highlight .p { color: #d0d0d0 } /* Punctuation */
|
||||
body:not([data-theme="light"]) .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */
|
||||
body:not([data-theme="light"]) .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */
|
||||
body:not([data-theme="light"]) .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */
|
||||
body:not([data-theme="light"]) .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */
|
||||
body:not([data-theme="light"]) .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */
|
||||
body:not([data-theme="light"]) .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
|
||||
body:not([data-theme="light"]) .highlight .gd { color: #d22323 } /* Generic.Deleted */
|
||||
body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
|
||||
body:not([data-theme="light"]) .highlight .gr { color: #d22323 } /* Generic.Error */
|
||||
body:not([data-theme="light"]) .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
|
||||
body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */
|
||||
body:not([data-theme="light"]) .highlight .go { color: #cccccc } /* Generic.Output */
|
||||
body:not([data-theme="light"]) .highlight .gp { color: #aaaaaa } /* Generic.Prompt */
|
||||
body:not([data-theme="light"]) .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
|
||||
body:not([data-theme="light"]) .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
|
||||
body:not([data-theme="light"]) .highlight .gt { color: #d22323 } /* Generic.Traceback */
|
||||
body:not([data-theme="light"]) .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */
|
||||
body:not([data-theme="light"]) .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */
|
||||
body:not([data-theme="light"]) .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */
|
||||
body:not([data-theme="light"]) .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */
|
||||
body:not([data-theme="light"]) .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */
|
||||
body:not([data-theme="light"]) .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */
|
||||
body:not([data-theme="light"]) .highlight .ld { color: #d0d0d0 } /* Literal.Date */
|
||||
body:not([data-theme="light"]) .highlight .m { color: #51b2fd } /* Literal.Number */
|
||||
body:not([data-theme="light"]) .highlight .s { color: #ed9d13 } /* Literal.String */
|
||||
body:not([data-theme="light"]) .highlight .na { color: #bbbbbb } /* Name.Attribute */
|
||||
body:not([data-theme="light"]) .highlight .nb { color: #2fbccd } /* Name.Builtin */
|
||||
body:not([data-theme="light"]) .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */
|
||||
body:not([data-theme="light"]) .highlight .no { color: #40ffff } /* Name.Constant */
|
||||
body:not([data-theme="light"]) .highlight .nd { color: #ffa500 } /* Name.Decorator */
|
||||
body:not([data-theme="light"]) .highlight .ni { color: #d0d0d0 } /* Name.Entity */
|
||||
body:not([data-theme="light"]) .highlight .ne { color: #bbbbbb } /* Name.Exception */
|
||||
body:not([data-theme="light"]) .highlight .nf { color: #71adff } /* Name.Function */
|
||||
body:not([data-theme="light"]) .highlight .nl { color: #d0d0d0 } /* Name.Label */
|
||||
body:not([data-theme="light"]) .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */
|
||||
body:not([data-theme="light"]) .highlight .nx { color: #d0d0d0 } /* Name.Other */
|
||||
body:not([data-theme="light"]) .highlight .py { color: #d0d0d0 } /* Name.Property */
|
||||
body:not([data-theme="light"]) .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */
|
||||
body:not([data-theme="light"]) .highlight .nv { color: #40ffff } /* Name.Variable */
|
||||
body:not([data-theme="light"]) .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */
|
||||
body:not([data-theme="light"]) .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */
|
||||
body:not([data-theme="light"]) .highlight .w { color: #666666 } /* Text.Whitespace */
|
||||
body:not([data-theme="light"]) .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */
|
||||
body:not([data-theme="light"]) .highlight .mf { color: #51b2fd } /* Literal.Number.Float */
|
||||
body:not([data-theme="light"]) .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */
|
||||
body:not([data-theme="light"]) .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */
|
||||
body:not([data-theme="light"]) .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */
|
||||
body:not([data-theme="light"]) .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */
|
||||
body:not([data-theme="light"]) .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */
|
||||
body:not([data-theme="light"]) .highlight .sc { color: #ed9d13 } /* Literal.String.Char */
|
||||
body:not([data-theme="light"]) .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */
|
||||
body:not([data-theme="light"]) .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */
|
||||
body:not([data-theme="light"]) .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */
|
||||
body:not([data-theme="light"]) .highlight .se { color: #ed9d13 } /* Literal.String.Escape */
|
||||
body:not([data-theme="light"]) .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */
|
||||
body:not([data-theme="light"]) .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */
|
||||
body:not([data-theme="light"]) .highlight .sx { color: #ffa500 } /* Literal.String.Other */
|
||||
body:not([data-theme="light"]) .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */
|
||||
body:not([data-theme="light"]) .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */
|
||||
body:not([data-theme="light"]) .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */
|
||||
body:not([data-theme="light"]) .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */
|
||||
body:not([data-theme="light"]) .highlight .fm { color: #71adff } /* Name.Function.Magic */
|
||||
body:not([data-theme="light"]) .highlight .vc { color: #40ffff } /* Name.Variable.Class */
|
||||
body:not([data-theme="light"]) .highlight .vg { color: #40ffff } /* Name.Variable.Global */
|
||||
body:not([data-theme="light"]) .highlight .vi { color: #40ffff } /* Name.Variable.Instance */
|
||||
body:not([data-theme="light"]) .highlight .vm { color: #40ffff } /* Name.Variable.Magic */
|
||||
body:not([data-theme="light"]) .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,7 @@
|
||||
/*!
|
||||
* gumshoejs v5.1.2 (patched by @pradyunsg)
|
||||
* A simple, framework-agnostic scrollspy script.
|
||||
* (c) 2019 Chris Ferdinandi
|
||||
* MIT License
|
||||
* http://github.com/cferdinandi/gumshoe
|
||||
*/
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,566 @@
|
||||
/*
|
||||
* searchtools.js
|
||||
* ~~~~~~~~~~~~~~~~
|
||||
*
|
||||
* Sphinx JavaScript utilities for the full-text search.
|
||||
*
|
||||
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* Simple result scoring code.
|
||||
*/
|
||||
if (typeof Scorer === "undefined") {
|
||||
var Scorer = {
|
||||
// Implement the following function to further tweak the score for each result
|
||||
// The function takes a result array [docname, title, anchor, descr, score, filename]
|
||||
// and returns the new score.
|
||||
/*
|
||||
score: result => {
|
||||
const [docname, title, anchor, descr, score, filename] = result
|
||||
return score
|
||||
},
|
||||
*/
|
||||
|
||||
// query matches the full name of an object
|
||||
objNameMatch: 11,
|
||||
// or matches in the last dotted part of the object name
|
||||
objPartialMatch: 6,
|
||||
// Additive scores depending on the priority of the object
|
||||
objPrio: {
|
||||
0: 15, // used to be importantResults
|
||||
1: 5, // used to be objectResults
|
||||
2: -5, // used to be unimportantResults
|
||||
},
|
||||
// Used when the priority is not in the mapping.
|
||||
objPrioDefault: 0,
|
||||
|
||||
// query found in title
|
||||
title: 15,
|
||||
partialTitle: 7,
|
||||
// query found in terms
|
||||
term: 5,
|
||||
partialTerm: 2,
|
||||
};
|
||||
}
|
||||
|
||||
const _removeChildren = (element) => {
|
||||
while (element && element.lastChild) element.removeChild(element.lastChild);
|
||||
};
|
||||
|
||||
/**
|
||||
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
|
||||
*/
|
||||
const _escapeRegExp = (string) =>
|
||||
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
|
||||
|
||||
const _displayItem = (item, searchTerms) => {
|
||||
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
|
||||
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
|
||||
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
|
||||
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
|
||||
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
|
||||
|
||||
const [docName, title, anchor, descr, score, _filename] = item;
|
||||
|
||||
let listItem = document.createElement("li");
|
||||
let requestUrl;
|
||||
let linkUrl;
|
||||
if (docBuilder === "dirhtml") {
|
||||
// dirhtml builder
|
||||
let dirname = docName + "/";
|
||||
if (dirname.match(/\/index\/$/))
|
||||
dirname = dirname.substring(0, dirname.length - 6);
|
||||
else if (dirname === "index/") dirname = "";
|
||||
requestUrl = docUrlRoot + dirname;
|
||||
linkUrl = requestUrl;
|
||||
} else {
|
||||
// normal html builders
|
||||
requestUrl = docUrlRoot + docName + docFileSuffix;
|
||||
linkUrl = docName + docLinkSuffix;
|
||||
}
|
||||
let linkEl = listItem.appendChild(document.createElement("a"));
|
||||
linkEl.href = linkUrl + anchor;
|
||||
linkEl.dataset.score = score;
|
||||
linkEl.innerHTML = title;
|
||||
if (descr)
|
||||
listItem.appendChild(document.createElement("span")).innerHTML =
|
||||
" (" + descr + ")";
|
||||
else if (showSearchSummary)
|
||||
fetch(requestUrl)
|
||||
.then((responseData) => responseData.text())
|
||||
.then((data) => {
|
||||
if (data)
|
||||
listItem.appendChild(
|
||||
Search.makeSearchSummary(data, searchTerms)
|
||||
);
|
||||
});
|
||||
Search.output.appendChild(listItem);
|
||||
};
|
||||
const _finishSearch = (resultCount) => {
|
||||
Search.stopPulse();
|
||||
Search.title.innerText = _("Search Results");
|
||||
if (!resultCount)
|
||||
Search.status.innerText = Documentation.gettext(
|
||||
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
|
||||
);
|
||||
else
|
||||
Search.status.innerText = _(
|
||||
`Search finished, found ${resultCount} page(s) matching the search query.`
|
||||
);
|
||||
};
|
||||
const _displayNextItem = (
|
||||
results,
|
||||
resultCount,
|
||||
searchTerms
|
||||
) => {
|
||||
// results left, load the summary and display it
|
||||
// this is intended to be dynamic (don't sub resultsCount)
|
||||
if (results.length) {
|
||||
_displayItem(results.pop(), searchTerms);
|
||||
setTimeout(
|
||||
() => _displayNextItem(results, resultCount, searchTerms),
|
||||
5
|
||||
);
|
||||
}
|
||||
// search finished, update title and status message
|
||||
else _finishSearch(resultCount);
|
||||
};
|
||||
|
||||
/**
|
||||
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
|
||||
* custom function per language.
|
||||
*
|
||||
* The regular expression works by splitting the string on consecutive characters
|
||||
* that are not Unicode letters, numbers, underscores, or emoji characters.
|
||||
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
|
||||
*/
|
||||
if (typeof splitQuery === "undefined") {
|
||||
var splitQuery = (query) => query
|
||||
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
|
||||
.filter(term => term) // remove remaining empty strings
|
||||
}
|
||||
|
||||
/**
|
||||
* Search Module
|
||||
*/
|
||||
const Search = {
|
||||
_index: null,
|
||||
_queued_query: null,
|
||||
_pulse_status: -1,
|
||||
|
||||
htmlToText: (htmlString) => {
|
||||
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
|
||||
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
|
||||
const docContent = htmlElement.querySelector('[role="main"]');
|
||||
if (docContent !== undefined) return docContent.textContent;
|
||||
console.warn(
|
||||
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
|
||||
);
|
||||
return "";
|
||||
},
|
||||
|
||||
init: () => {
|
||||
const query = new URLSearchParams(window.location.search).get("q");
|
||||
document
|
||||
.querySelectorAll('input[name="q"]')
|
||||
.forEach((el) => (el.value = query));
|
||||
if (query) Search.performSearch(query);
|
||||
},
|
||||
|
||||
loadIndex: (url) =>
|
||||
(document.body.appendChild(document.createElement("script")).src = url),
|
||||
|
||||
setIndex: (index) => {
|
||||
Search._index = index;
|
||||
if (Search._queued_query !== null) {
|
||||
const query = Search._queued_query;
|
||||
Search._queued_query = null;
|
||||
Search.query(query);
|
||||
}
|
||||
},
|
||||
|
||||
hasIndex: () => Search._index !== null,
|
||||
|
||||
deferQuery: (query) => (Search._queued_query = query),
|
||||
|
||||
stopPulse: () => (Search._pulse_status = -1),
|
||||
|
||||
startPulse: () => {
|
||||
if (Search._pulse_status >= 0) return;
|
||||
|
||||
const pulse = () => {
|
||||
Search._pulse_status = (Search._pulse_status + 1) % 4;
|
||||
Search.dots.innerText = ".".repeat(Search._pulse_status);
|
||||
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
|
||||
};
|
||||
pulse();
|
||||
},
|
||||
|
||||
/**
|
||||
* perform a search for something (or wait until index is loaded)
|
||||
*/
|
||||
performSearch: (query) => {
|
||||
// create the required interface elements
|
||||
const searchText = document.createElement("h2");
|
||||
searchText.textContent = _("Searching");
|
||||
const searchSummary = document.createElement("p");
|
||||
searchSummary.classList.add("search-summary");
|
||||
searchSummary.innerText = "";
|
||||
const searchList = document.createElement("ul");
|
||||
searchList.classList.add("search");
|
||||
|
||||
const out = document.getElementById("search-results");
|
||||
Search.title = out.appendChild(searchText);
|
||||
Search.dots = Search.title.appendChild(document.createElement("span"));
|
||||
Search.status = out.appendChild(searchSummary);
|
||||
Search.output = out.appendChild(searchList);
|
||||
|
||||
const searchProgress = document.getElementById("search-progress");
|
||||
// Some themes don't use the search progress node
|
||||
if (searchProgress) {
|
||||
searchProgress.innerText = _("Preparing search...");
|
||||
}
|
||||
Search.startPulse();
|
||||
|
||||
// index already loaded, the browser was quick!
|
||||
if (Search.hasIndex()) Search.query(query);
|
||||
else Search.deferQuery(query);
|
||||
},
|
||||
|
||||
/**
|
||||
* execute search (requires search index to be loaded)
|
||||
*/
|
||||
query: (query) => {
|
||||
const filenames = Search._index.filenames;
|
||||
const docNames = Search._index.docnames;
|
||||
const titles = Search._index.titles;
|
||||
const allTitles = Search._index.alltitles;
|
||||
const indexEntries = Search._index.indexentries;
|
||||
|
||||
// stem the search terms and add them to the correct list
|
||||
const stemmer = new Stemmer();
|
||||
const searchTerms = new Set();
|
||||
const excludedTerms = new Set();
|
||||
const highlightTerms = new Set();
|
||||
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
|
||||
splitQuery(query.trim()).forEach((queryTerm) => {
|
||||
const queryTermLower = queryTerm.toLowerCase();
|
||||
|
||||
// maybe skip this "word"
|
||||
// stopwords array is from language_data.js
|
||||
if (
|
||||
stopwords.indexOf(queryTermLower) !== -1 ||
|
||||
queryTerm.match(/^\d+$/)
|
||||
)
|
||||
return;
|
||||
|
||||
// stem the word
|
||||
let word = stemmer.stemWord(queryTermLower);
|
||||
// select the correct list
|
||||
if (word[0] === "-") excludedTerms.add(word.substr(1));
|
||||
else {
|
||||
searchTerms.add(word);
|
||||
highlightTerms.add(queryTermLower);
|
||||
}
|
||||
});
|
||||
|
||||
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
|
||||
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
|
||||
}
|
||||
|
||||
// console.debug("SEARCH: searching for:");
|
||||
// console.info("required: ", [...searchTerms]);
|
||||
// console.info("excluded: ", [...excludedTerms]);
|
||||
|
||||
// array of [docname, title, anchor, descr, score, filename]
|
||||
let results = [];
|
||||
_removeChildren(document.getElementById("search-progress"));
|
||||
|
||||
const queryLower = query.toLowerCase();
|
||||
for (const [title, foundTitles] of Object.entries(allTitles)) {
|
||||
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
|
||||
for (const [file, id] of foundTitles) {
|
||||
let score = Math.round(100 * queryLower.length / title.length)
|
||||
results.push([
|
||||
docNames[file],
|
||||
titles[file] !== title ? `${titles[file]} > ${title}` : title,
|
||||
id !== null ? "#" + id : "",
|
||||
null,
|
||||
score,
|
||||
filenames[file],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// search for explicit entries in index directives
|
||||
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
|
||||
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
|
||||
for (const [file, id] of foundEntries) {
|
||||
let score = Math.round(100 * queryLower.length / entry.length)
|
||||
results.push([
|
||||
docNames[file],
|
||||
titles[file],
|
||||
id ? "#" + id : "",
|
||||
null,
|
||||
score,
|
||||
filenames[file],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// lookup as object
|
||||
objectTerms.forEach((term) =>
|
||||
results.push(...Search.performObjectSearch(term, objectTerms))
|
||||
);
|
||||
|
||||
// lookup as search terms in fulltext
|
||||
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
|
||||
|
||||
// let the scorer override scores with a custom scoring function
|
||||
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
|
||||
|
||||
// now sort the results by score (in opposite order of appearance, since the
|
||||
// display function below uses pop() to retrieve items) and then
|
||||
// alphabetically
|
||||
results.sort((a, b) => {
|
||||
const leftScore = a[4];
|
||||
const rightScore = b[4];
|
||||
if (leftScore === rightScore) {
|
||||
// same score: sort alphabetically
|
||||
const leftTitle = a[1].toLowerCase();
|
||||
const rightTitle = b[1].toLowerCase();
|
||||
if (leftTitle === rightTitle) return 0;
|
||||
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
|
||||
}
|
||||
return leftScore > rightScore ? 1 : -1;
|
||||
});
|
||||
|
||||
// remove duplicate search results
|
||||
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
|
||||
let seen = new Set();
|
||||
results = results.reverse().reduce((acc, result) => {
|
||||
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
|
||||
if (!seen.has(resultStr)) {
|
||||
acc.push(result);
|
||||
seen.add(resultStr);
|
||||
}
|
||||
return acc;
|
||||
}, []);
|
||||
|
||||
results = results.reverse();
|
||||
|
||||
// for debugging
|
||||
//Search.lastresults = results.slice(); // a copy
|
||||
// console.info("search results:", Search.lastresults);
|
||||
|
||||
// print the results
|
||||
_displayNextItem(results, results.length, searchTerms);
|
||||
},
|
||||
|
||||
/**
|
||||
* search for object names
|
||||
*/
|
||||
performObjectSearch: (object, objectTerms) => {
|
||||
const filenames = Search._index.filenames;
|
||||
const docNames = Search._index.docnames;
|
||||
const objects = Search._index.objects;
|
||||
const objNames = Search._index.objnames;
|
||||
const titles = Search._index.titles;
|
||||
|
||||
const results = [];
|
||||
|
||||
const objectSearchCallback = (prefix, match) => {
|
||||
const name = match[4]
|
||||
const fullname = (prefix ? prefix + "." : "") + name;
|
||||
const fullnameLower = fullname.toLowerCase();
|
||||
if (fullnameLower.indexOf(object) < 0) return;
|
||||
|
||||
let score = 0;
|
||||
const parts = fullnameLower.split(".");
|
||||
|
||||
// check for different match types: exact matches of full name or
|
||||
// "last name" (i.e. last dotted part)
|
||||
if (fullnameLower === object || parts.slice(-1)[0] === object)
|
||||
score += Scorer.objNameMatch;
|
||||
else if (parts.slice(-1)[0].indexOf(object) > -1)
|
||||
score += Scorer.objPartialMatch; // matches in last name
|
||||
|
||||
const objName = objNames[match[1]][2];
|
||||
const title = titles[match[0]];
|
||||
|
||||
// If more than one term searched for, we require other words to be
|
||||
// found in the name/title/description
|
||||
const otherTerms = new Set(objectTerms);
|
||||
otherTerms.delete(object);
|
||||
if (otherTerms.size > 0) {
|
||||
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
|
||||
if (
|
||||
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
|
||||
)
|
||||
return;
|
||||
}
|
||||
|
||||
let anchor = match[3];
|
||||
if (anchor === "") anchor = fullname;
|
||||
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
|
||||
|
||||
const descr = objName + _(", in ") + title;
|
||||
|
||||
// add custom score for some objects according to scorer
|
||||
if (Scorer.objPrio.hasOwnProperty(match[2]))
|
||||
score += Scorer.objPrio[match[2]];
|
||||
else score += Scorer.objPrioDefault;
|
||||
|
||||
results.push([
|
||||
docNames[match[0]],
|
||||
fullname,
|
||||
"#" + anchor,
|
||||
descr,
|
||||
score,
|
||||
filenames[match[0]],
|
||||
]);
|
||||
};
|
||||
Object.keys(objects).forEach((prefix) =>
|
||||
objects[prefix].forEach((array) =>
|
||||
objectSearchCallback(prefix, array)
|
||||
)
|
||||
);
|
||||
return results;
|
||||
},
|
||||
|
||||
/**
|
||||
* search for full-text terms in the index
|
||||
*/
|
||||
performTermsSearch: (searchTerms, excludedTerms) => {
|
||||
// prepare search
|
||||
const terms = Search._index.terms;
|
||||
const titleTerms = Search._index.titleterms;
|
||||
const filenames = Search._index.filenames;
|
||||
const docNames = Search._index.docnames;
|
||||
const titles = Search._index.titles;
|
||||
|
||||
const scoreMap = new Map();
|
||||
const fileMap = new Map();
|
||||
|
||||
// perform the search on the required terms
|
||||
searchTerms.forEach((word) => {
|
||||
const files = [];
|
||||
const arr = [
|
||||
{ files: terms[word], score: Scorer.term },
|
||||
{ files: titleTerms[word], score: Scorer.title },
|
||||
];
|
||||
// add support for partial matches
|
||||
if (word.length > 2) {
|
||||
const escapedWord = _escapeRegExp(word);
|
||||
Object.keys(terms).forEach((term) => {
|
||||
if (term.match(escapedWord) && !terms[word])
|
||||
arr.push({ files: terms[term], score: Scorer.partialTerm });
|
||||
});
|
||||
Object.keys(titleTerms).forEach((term) => {
|
||||
if (term.match(escapedWord) && !titleTerms[word])
|
||||
arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
|
||||
});
|
||||
}
|
||||
|
||||
// no match but word was a required one
|
||||
if (arr.every((record) => record.files === undefined)) return;
|
||||
|
||||
// found search word in contents
|
||||
arr.forEach((record) => {
|
||||
if (record.files === undefined) return;
|
||||
|
||||
let recordFiles = record.files;
|
||||
if (recordFiles.length === undefined) recordFiles = [recordFiles];
|
||||
files.push(...recordFiles);
|
||||
|
||||
// set score for the word in each file
|
||||
recordFiles.forEach((file) => {
|
||||
if (!scoreMap.has(file)) scoreMap.set(file, {});
|
||||
scoreMap.get(file)[word] = record.score;
|
||||
});
|
||||
});
|
||||
|
||||
// create the mapping
|
||||
files.forEach((file) => {
|
||||
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
|
||||
fileMap.get(file).push(word);
|
||||
else fileMap.set(file, [word]);
|
||||
});
|
||||
});
|
||||
|
||||
// now check if the files don't contain excluded terms
|
||||
const results = [];
|
||||
for (const [file, wordList] of fileMap) {
|
||||
// check if all requirements are matched
|
||||
|
||||
// as search terms with length < 3 are discarded
|
||||
const filteredTermCount = [...searchTerms].filter(
|
||||
(term) => term.length > 2
|
||||
).length;
|
||||
if (
|
||||
wordList.length !== searchTerms.size &&
|
||||
wordList.length !== filteredTermCount
|
||||
)
|
||||
continue;
|
||||
|
||||
// ensure that none of the excluded terms is in the search result
|
||||
if (
|
||||
[...excludedTerms].some(
|
||||
(term) =>
|
||||
terms[term] === file ||
|
||||
titleTerms[term] === file ||
|
||||
(terms[term] || []).includes(file) ||
|
||||
(titleTerms[term] || []).includes(file)
|
||||
)
|
||||
)
|
||||
break;
|
||||
|
||||
// select one (max) score for the file.
|
||||
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
|
||||
// add result to the result list
|
||||
results.push([
|
||||
docNames[file],
|
||||
titles[file],
|
||||
"",
|
||||
null,
|
||||
score,
|
||||
filenames[file],
|
||||
]);
|
||||
}
|
||||
return results;
|
||||
},
|
||||
|
||||
/**
|
||||
* helper function to return a node containing the
|
||||
* search summary for a given text. keywords is a list
|
||||
* of stemmed words.
|
||||
*/
|
||||
makeSearchSummary: (htmlText, keywords) => {
|
||||
const text = Search.htmlToText(htmlText);
|
||||
if (text === "") return null;
|
||||
|
||||
const textLower = text.toLowerCase();
|
||||
const actualStartPosition = [...keywords]
|
||||
.map((k) => textLower.indexOf(k.toLowerCase()))
|
||||
.filter((i) => i > -1)
|
||||
.slice(-1)[0];
|
||||
const startWithContext = Math.max(actualStartPosition - 120, 0);
|
||||
|
||||
const top = startWithContext === 0 ? "" : "...";
|
||||
const tail = startWithContext + 240 < text.length ? "..." : "";
|
||||
|
||||
let summary = document.createElement("p");
|
||||
summary.classList.add("context");
|
||||
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
|
||||
|
||||
return summary;
|
||||
},
|
||||
};
|
||||
|
||||
_ready(Search.init);
|
@ -0,0 +1,296 @@
|
||||
/* Some sane resets. */
|
||||
html {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
/* All the flexbox magic! */
|
||||
body,
|
||||
.sb-announcement,
|
||||
.sb-content,
|
||||
.sb-main,
|
||||
.sb-container,
|
||||
.sb-container__inner,
|
||||
.sb-article-container,
|
||||
.sb-footer-content,
|
||||
.sb-header,
|
||||
.sb-header-secondary,
|
||||
.sb-footer {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
/* These order things vertically */
|
||||
body,
|
||||
.sb-main,
|
||||
.sb-article-container {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
/* Put elements in the center */
|
||||
.sb-header,
|
||||
.sb-header-secondary,
|
||||
.sb-container,
|
||||
.sb-content,
|
||||
.sb-footer,
|
||||
.sb-footer-content {
|
||||
justify-content: center;
|
||||
}
|
||||
/* Put elements at the ends */
|
||||
.sb-article-container {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
/* These elements grow. */
|
||||
.sb-main,
|
||||
.sb-content,
|
||||
.sb-container,
|
||||
article {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
/* Because padding making this wider is not fun */
|
||||
article {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* The announcements element should never be wider than the page. */
|
||||
.sb-announcement {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.sb-sidebar-primary,
|
||||
.sb-sidebar-secondary {
|
||||
flex-shrink: 0;
|
||||
width: 17rem;
|
||||
}
|
||||
|
||||
.sb-announcement__inner {
|
||||
justify-content: center;
|
||||
|
||||
box-sizing: border-box;
|
||||
height: 3rem;
|
||||
|
||||
overflow-x: auto;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* Sidebars, with checkbox-based toggle */
|
||||
.sb-sidebar-primary,
|
||||
.sb-sidebar-secondary {
|
||||
position: fixed;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.sb-sidebar-primary {
|
||||
left: -17rem;
|
||||
transition: left 250ms ease-in-out;
|
||||
}
|
||||
.sb-sidebar-secondary {
|
||||
right: -17rem;
|
||||
transition: right 250ms ease-in-out;
|
||||
}
|
||||
|
||||
.sb-sidebar-toggle {
|
||||
display: none;
|
||||
}
|
||||
.sb-sidebar-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
|
||||
transition: width 0ms ease 250ms, height 0ms ease 250ms, opacity 250ms ease;
|
||||
|
||||
opacity: 0;
|
||||
background-color: rgba(0, 0, 0, 0.54);
|
||||
}
|
||||
|
||||
#sb-sidebar-toggle--primary:checked
|
||||
~ .sb-sidebar-overlay[for="sb-sidebar-toggle--primary"],
|
||||
#sb-sidebar-toggle--secondary:checked
|
||||
~ .sb-sidebar-overlay[for="sb-sidebar-toggle--secondary"] {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 1;
|
||||
transition: width 0ms ease, height 0ms ease, opacity 250ms ease;
|
||||
}
|
||||
|
||||
#sb-sidebar-toggle--primary:checked ~ .sb-container .sb-sidebar-primary {
|
||||
left: 0;
|
||||
}
|
||||
#sb-sidebar-toggle--secondary:checked ~ .sb-container .sb-sidebar-secondary {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
/* Full-width mode */
|
||||
.drop-secondary-sidebar-for-full-width-content
|
||||
.hide-when-secondary-sidebar-shown {
|
||||
display: none !important;
|
||||
}
|
||||
.drop-secondary-sidebar-for-full-width-content .sb-sidebar-secondary {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* Mobile views */
|
||||
.sb-page-width {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.sb-article-container,
|
||||
.sb-footer-content__inner,
|
||||
.drop-secondary-sidebar-for-full-width-content .sb-article,
|
||||
.drop-secondary-sidebar-for-full-width-content .match-content-width {
|
||||
width: 100vw;
|
||||
}
|
||||
|
||||
.sb-article,
|
||||
.match-content-width {
|
||||
padding: 0 1rem;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@media (min-width: 32rem) {
|
||||
.sb-article,
|
||||
.match-content-width {
|
||||
padding: 0 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Tablet views */
|
||||
@media (min-width: 42rem) {
|
||||
.sb-article-container {
|
||||
width: auto;
|
||||
}
|
||||
.sb-footer-content__inner,
|
||||
.drop-secondary-sidebar-for-full-width-content .sb-article,
|
||||
.drop-secondary-sidebar-for-full-width-content .match-content-width {
|
||||
width: 42rem;
|
||||
}
|
||||
.sb-article,
|
||||
.match-content-width {
|
||||
width: 42rem;
|
||||
}
|
||||
}
|
||||
@media (min-width: 46rem) {
|
||||
.sb-footer-content__inner,
|
||||
.drop-secondary-sidebar-for-full-width-content .sb-article,
|
||||
.drop-secondary-sidebar-for-full-width-content .match-content-width {
|
||||
width: 46rem;
|
||||
}
|
||||
.sb-article,
|
||||
.match-content-width {
|
||||
width: 46rem;
|
||||
}
|
||||
}
|
||||
@media (min-width: 50rem) {
|
||||
.sb-footer-content__inner,
|
||||
.drop-secondary-sidebar-for-full-width-content .sb-article,
|
||||
.drop-secondary-sidebar-for-full-width-content .match-content-width {
|
||||
width: 50rem;
|
||||
}
|
||||
.sb-article,
|
||||
.match-content-width {
|
||||
width: 50rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Tablet views */
|
||||
@media (min-width: 59rem) {
|
||||
.sb-sidebar-secondary {
|
||||
position: static;
|
||||
}
|
||||
.hide-when-secondary-sidebar-shown {
|
||||
display: none !important;
|
||||
}
|
||||
.sb-footer-content__inner,
|
||||
.drop-secondary-sidebar-for-full-width-content .sb-article,
|
||||
.drop-secondary-sidebar-for-full-width-content .match-content-width {
|
||||
width: 59rem;
|
||||
}
|
||||
.sb-article,
|
||||
.match-content-width {
|
||||
width: 42rem;
|
||||
}
|
||||
}
|
||||
@media (min-width: 63rem) {
|
||||
.sb-footer-content__inner,
|
||||
.drop-secondary-sidebar-for-full-width-content .sb-article,
|
||||
.drop-secondary-sidebar-for-full-width-content .match-content-width {
|
||||
width: 63rem;
|
||||
}
|
||||
.sb-article,
|
||||
.match-content-width {
|
||||
width: 46rem;
|
||||
}
|
||||
}
|
||||
@media (min-width: 67rem) {
|
||||
.sb-footer-content__inner,
|
||||
.drop-secondary-sidebar-for-full-width-content .sb-article,
|
||||
.drop-secondary-sidebar-for-full-width-content .match-content-width {
|
||||
width: 67rem;
|
||||
}
|
||||
.sb-article,
|
||||
.match-content-width {
|
||||
width: 50rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Desktop views */
|
||||
@media (min-width: 76rem) {
|
||||
.sb-sidebar-primary {
|
||||
position: static;
|
||||
}
|
||||
.hide-when-primary-sidebar-shown {
|
||||
display: none !important;
|
||||
}
|
||||
.sb-footer-content__inner,
|
||||
.drop-secondary-sidebar-for-full-width-content .sb-article,
|
||||
.drop-secondary-sidebar-for-full-width-content .match-content-width {
|
||||
width: 59rem;
|
||||
}
|
||||
.sb-article,
|
||||
.match-content-width {
|
||||
width: 42rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Full desktop views */
|
||||
@media (min-width: 80rem) {
|
||||
.sb-article,
|
||||
.match-content-width {
|
||||
width: 46rem;
|
||||
}
|
||||
.sb-footer-content__inner,
|
||||
.drop-secondary-sidebar-for-full-width-content .sb-article,
|
||||
.drop-secondary-sidebar-for-full-width-content .match-content-width {
|
||||
width: 63rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 84rem) {
|
||||
.sb-article,
|
||||
.match-content-width {
|
||||
width: 50rem;
|
||||
}
|
||||
.sb-footer-content__inner,
|
||||
.drop-secondary-sidebar-for-full-width-content .sb-article,
|
||||
.drop-secondary-sidebar-for-full-width-content .match-content-width {
|
||||
width: 67rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 88rem) {
|
||||
.sb-footer-content__inner,
|
||||
.drop-secondary-sidebar-for-full-width-content .sb-article,
|
||||
.drop-secondary-sidebar-for-full-width-content .match-content-width {
|
||||
width: 67rem;
|
||||
}
|
||||
.sb-page-width {
|
||||
width: 88rem;
|
||||
}
|
||||
}
|
@ -0,0 +1,144 @@
|
||||
/* Highlighting utilities for Sphinx HTML documentation. */
|
||||
"use strict";
|
||||
|
||||
const SPHINX_HIGHLIGHT_ENABLED = true
|
||||
|
||||
/**
|
||||
* highlight a given string on a node by wrapping it in
|
||||
* span elements with the given class name.
|
||||
*/
|
||||
const _highlight = (node, addItems, text, className) => {
|
||||
if (node.nodeType === Node.TEXT_NODE) {
|
||||
const val = node.nodeValue;
|
||||
const parent = node.parentNode;
|
||||
const pos = val.toLowerCase().indexOf(text);
|
||||
if (
|
||||
pos >= 0 &&
|
||||
!parent.classList.contains(className) &&
|
||||
!parent.classList.contains("nohighlight")
|
||||
) {
|
||||
let span;
|
||||
|
||||
const closestNode = parent.closest("body, svg, foreignObject");
|
||||
const isInSVG = closestNode && closestNode.matches("svg");
|
||||
if (isInSVG) {
|
||||
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
|
||||
} else {
|
||||
span = document.createElement("span");
|
||||
span.classList.add(className);
|
||||
}
|
||||
|
||||
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
|
||||
parent.insertBefore(
|
||||
span,
|
||||
parent.insertBefore(
|
||||
document.createTextNode(val.substr(pos + text.length)),
|
||||
node.nextSibling
|
||||
)
|
||||
);
|
||||
node.nodeValue = val.substr(0, pos);
|
||||
|
||||
if (isInSVG) {
|
||||
const rect = document.createElementNS(
|
||||
"http://www.w3.org/2000/svg",
|
||||
"rect"
|
||||
);
|
||||
const bbox = parent.getBBox();
|
||||
rect.x.baseVal.value = bbox.x;
|
||||
rect.y.baseVal.value = bbox.y;
|
||||
rect.width.baseVal.value = bbox.width;
|
||||
rect.height.baseVal.value = bbox.height;
|
||||
rect.setAttribute("class", className);
|
||||
addItems.push({ parent: parent, target: rect });
|
||||
}
|
||||
}
|
||||
} else if (node.matches && !node.matches("button, select, textarea")) {
|
||||
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
|
||||
}
|
||||
};
|
||||
const _highlightText = (thisNode, text, className) => {
|
||||
let addItems = [];
|
||||
_highlight(thisNode, addItems, text, className);
|
||||
addItems.forEach((obj) =>
|
||||
obj.parent.insertAdjacentElement("beforebegin", obj.target)
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Small JavaScript module for the documentation.
|
||||
*/
|
||||
const SphinxHighlight = {
|
||||
|
||||
/**
|
||||
* highlight the search words provided in localstorage in the text
|
||||
*/
|
||||
highlightSearchWords: () => {
|
||||
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
|
||||
|
||||
// get and clear terms from localstorage
|
||||
const url = new URL(window.location);
|
||||
const highlight =
|
||||
localStorage.getItem("sphinx_highlight_terms")
|
||||
|| url.searchParams.get("highlight")
|
||||
|| "";
|
||||
localStorage.removeItem("sphinx_highlight_terms")
|
||||
url.searchParams.delete("highlight");
|
||||
window.history.replaceState({}, "", url);
|
||||
|
||||
// get individual terms from highlight string
|
||||
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
|
||||
if (terms.length === 0) return; // nothing to do
|
||||
|
||||
// There should never be more than one element matching "div.body"
|
||||
const divBody = document.querySelectorAll("div.body");
|
||||
const body = divBody.length ? divBody[0] : document.querySelector("body");
|
||||
window.setTimeout(() => {
|
||||
terms.forEach((term) => _highlightText(body, term, "highlighted"));
|
||||
}, 10);
|
||||
|
||||
const searchBox = document.getElementById("searchbox");
|
||||
if (searchBox === null) return;
|
||||
searchBox.appendChild(
|
||||
document
|
||||
.createRange()
|
||||
.createContextualFragment(
|
||||
'<p class="highlight-link">' +
|
||||
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
|
||||
_("Hide Search Matches") +
|
||||
"</a></p>"
|
||||
)
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* helper function to hide the search marks again
|
||||
*/
|
||||
hideSearchWords: () => {
|
||||
document
|
||||
.querySelectorAll("#searchbox .highlight-link")
|
||||
.forEach((el) => el.remove());
|
||||
document
|
||||
.querySelectorAll("span.highlighted")
|
||||
.forEach((el) => el.classList.remove("highlighted"));
|
||||
localStorage.removeItem("sphinx_highlight_terms")
|
||||
},
|
||||
|
||||
initEscapeListener: () => {
|
||||
// only install a listener if it is really needed
|
||||
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
|
||||
|
||||
document.addEventListener("keydown", (event) => {
|
||||
// bail for input elements
|
||||
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
|
||||
// bail with special keys
|
||||
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
|
||||
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
|
||||
SphinxHighlight.hideSearchWords();
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
_ready(SphinxHighlight.highlightSearchWords);
|
||||
_ready(SphinxHighlight.initEscapeListener);
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,372 @@
|
||||
<!doctype html>
|
||||
<html class="no-js" lang="en">
|
||||
<head><meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Generating fingerprint models" href="generation.html" /><link rel="prev" title="Configuration and presets" href="config.html" />
|
||||
|
||||
<!-- Generated with Sphinx 6.2.1 and Furo 2023.03.27 -->
|
||||
<title>Available filters with parameters - Generování 3D modelu otisku prstu 1.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=fad236701ea90a88636c2a8c73b44ae642ed2a53" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f8f8f8;
|
||||
--color-code-foreground: black;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<circle cx="12" cy="12" r="9" />
|
||||
<path d="M13 12h5" />
|
||||
<path d="M13 15h4" />
|
||||
<path d="M13 18h1" />
|
||||
<path d="M13 9h4" />
|
||||
<path d="M13 6h1" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||
<label class="overlay sidebar-overlay" for="__navigation">
|
||||
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||
</label>
|
||||
<label class="overlay toc-overlay" for="__toc">
|
||||
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="index.html"><div class="brand">Generování 3D modelu otisku prstu 1.0 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||
|
||||
|
||||
<span class="sidebar-brand-text">Generování 3D modelu otisku prstu 1.0 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filtering.html">Filtering images</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration and presets</a></li>
|
||||
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Available filters with parameters</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="generation.html">Generating fingerprint models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="modules.html">src</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html">config_parser module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html">filters module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="log.html">log module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html">main module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="stl_parser.html">stl_parser module</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main">
|
||||
<section id="available-filters-with-parameters">
|
||||
<h1>Available filters with parameters<a class="headerlink" href="#available-filters-with-parameters" title="Permalink to this heading">#</a></h1>
|
||||
<p>Overview of all implemented filters and their parameters with descriptions is listed below.</p>
|
||||
<ul>
|
||||
<li><p><strong>median blur</strong></p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p><em>ksize</em> (int) - Kernel size, determines how large of an area the filter processes.</p></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</li>
|
||||
<li><p><strong>gaussian blur</strong></p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p><em>sigma</em> (int) - Gaussian kernel standart deviation, determines the weight of further pixels on the currently processed pixel.</p></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</li>
|
||||
<li><p><strong>bilateral blur</strong></p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p><em>diameter</em> (int) - Diameter of pixel neighborhood used for filtering.</p></li>
|
||||
<li><p><em>sigmaColor</em> (int) - Determines the weight of pixels of different color.</p></li>
|
||||
<li><p><em>sigmaSpace</em> (int) - Determines the weight of further pixels.</p></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</li>
|
||||
<li><p><strong>bilateral_scikit</strong></p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p><em>sigmaColor</em> (float) - Determines the weight of pixels of different color.</p></li>
|
||||
<li><p><em>sigmaSpace</em> (float) - Determines the weight of further pixels.</p></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</li>
|
||||
<li><p><strong>nlmeans</strong> (non-local means)</p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p><em>patch_size</em> (int) - Size of patches used for denoising.</p></li>
|
||||
<li><p><em>patch_distance</em> (int) - Distance in pixels where to search for patches.</p></li>
|
||||
<li><p><em>h</em> (float) - Cut-off distance, higher means more smoothed image.</p></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</li>
|
||||
<li><p><strong>total_variation</strong></p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p><em>weight</em> (float) - Denoising weight, determines how much the image will be denoised.</p></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</li>
|
||||
<li><p><strong>block_match</strong></p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p><em>sigma</em> (float)- Standart deviation</p></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</li>
|
||||
<li><p><strong>unsharp_mask_scikit</strong></p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p><em>radius</em> (int) - Radius of the gaussian filter.</p></li>
|
||||
<li><p><em>amount</em> (float) - Strength of the unsharp mask, determines how much of the mask will be used for filtering.</p></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</li>
|
||||
<li><p><strong>farid</strong></p></li>
|
||||
<li><p><strong>meijering</strong></p></li>
|
||||
<li><p><strong>sato</strong></p></li>
|
||||
<li><p><strong>hessian</strong></p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p><em>sigmas</em> (float) - Standart deviations</p></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</li>
|
||||
<li><p><strong>invert</strong></p></li>
|
||||
<li><p><strong>scale_values</strong></p></li>
|
||||
<li><p><strong>binarize</strong></p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p><em>threshold</em> (int) - Value to cut differentiate pixels.</p></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</li>
|
||||
<li><p><strong>binarize_otsu</strong></p></li>
|
||||
<li><p><strong>add_margin</strong></p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p><em>margin</em> (int) - Number of pixels to add to the sides of the image.</p></li>
|
||||
<li><p><em>color</em> (int) - Color value of newly added pixels.</p></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</li>
|
||||
<li><p><strong>erode</strong></p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p><em>kernel</em> (numpy matrix) - Shape of the kernel used to erode image.</p></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</li>
|
||||
<li><p><strong>dilate</strong></p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p><em>kernel</em> (numpy matrix)- Shape of the kernel used to dilate image.</p></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
<a class="next-page" href="generation.html">
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Next</span>
|
||||
</div>
|
||||
<div class="title">Generating fingerprint models</div>
|
||||
</div>
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
</a>
|
||||
<a class="prev-page" href="config.html">
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Previous</span>
|
||||
</div>
|
||||
|
||||
<div class="title">Configuration and presets</div>
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2023, xlanro00
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||
<script src="_static/doctools.js"></script>
|
||||
<script src="_static/sphinx_highlight.js"></script>
|
||||
<script src="_static/scripts/furo.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,292 @@
|
||||
<!doctype html>
|
||||
<html class="no-js" lang="en">
|
||||
<head><meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Configuration and presets" href="config.html" /><link rel="prev" title="Installation" href="installation.html" />
|
||||
|
||||
<!-- Generated with Sphinx 6.2.1 and Furo 2023.03.27 -->
|
||||
<title>Filtering images - Generování 3D modelu otisku prstu 1.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=fad236701ea90a88636c2a8c73b44ae642ed2a53" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f8f8f8;
|
||||
--color-code-foreground: black;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<circle cx="12" cy="12" r="9" />
|
||||
<path d="M13 12h5" />
|
||||
<path d="M13 15h4" />
|
||||
<path d="M13 18h1" />
|
||||
<path d="M13 9h4" />
|
||||
<path d="M13 6h1" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||
<label class="overlay sidebar-overlay" for="__navigation">
|
||||
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||
</label>
|
||||
<label class="overlay toc-overlay" for="__toc">
|
||||
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="index.html"><div class="brand">Generování 3D modelu otisku prstu 1.0 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||
|
||||
|
||||
<span class="sidebar-brand-text">Generování 3D modelu otisku prstu 1.0 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Filtering images</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration and presets</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filter_list.html">Available filters with parameters</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="generation.html">Generating fingerprint models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="modules.html">src</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html">config_parser module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html">filters module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="log.html">log module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html">main module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="stl_parser.html">stl_parser module</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main">
|
||||
<section id="filtering-images">
|
||||
<h1>Filtering images<a class="headerlink" href="#filtering-images" title="Permalink to this heading">#</a></h1>
|
||||
<p>Once all the requirements are installed, the application is ready to use.
|
||||
Fingerprint sample is located in res/examples, its name is Palec_P4.tif.</p>
|
||||
<ul class="simple">
|
||||
<li><p>You will need to enter the virtual enviroment every time you want to use the application.</p></li>
|
||||
</ul>
|
||||
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span><span class="nb">source</span><span class="w"> </span>.venv/bin/activate
|
||||
</pre></div>
|
||||
</div>
|
||||
<ul class="simple">
|
||||
<li><p>The application requires <strong>input</strong> and <strong>output filenames</strong> including path from the root project directory, <strong>dpi</strong> and <strong>filter list</strong> as shown bellow.</p></li>
|
||||
</ul>
|
||||
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp gp-VirtualEnv">(.venv)</span><span class="gp">$ </span>python3<span class="w"> </span>src/main.py<span class="w"> </span>input_file<span class="w"> </span>output_file<span class="w"> </span>dpi<span class="w"> </span>filters
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>There are two ways to enter the filters:</p>
|
||||
<ol class="arabic simple">
|
||||
<li><p>manually list all filter names and their parameters on the <strong>command line</strong>:</p></li>
|
||||
</ol>
|
||||
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp gp-VirtualEnv">(.venv)</span><span class="gp">$ </span>python3<span class="w"> </span>src/main.py<span class="w"> </span>res/examples/Palec_P4.tif<span class="w"> </span>res/examples/Palec_P4_from_cline.png<span class="w"> </span><span class="m">600</span><span class="w"> </span>total_variation<span class="w"> </span><span class="nv">weight</span><span class="o">=</span><span class="m">0</span>.15<span class="w"> </span>median<span class="w"> </span><span class="nv">ksize</span><span class="o">=</span><span class="m">5</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<ol class="arabic simple" start="2">
|
||||
<li><p>load them from preset in a JSON <strong>configuration file</strong>, that can be used to tune and modify existing presets, or create new ones:</p></li>
|
||||
</ol>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>(.venv)$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json git_example
|
||||
</pre></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
<a class="next-page" href="config.html">
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Next</span>
|
||||
</div>
|
||||
<div class="title">Configuration and presets</div>
|
||||
</div>
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
</a>
|
||||
<a class="prev-page" href="installation.html">
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Previous</span>
|
||||
</div>
|
||||
|
||||
<div class="title">Installation</div>
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2023, xlanro00
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||
<script src="_static/doctools.js"></script>
|
||||
<script src="_static/sphinx_highlight.js"></script>
|
||||
<script src="_static/scripts/furo.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,646 @@
|
||||
<!doctype html>
|
||||
<html class="no-js" lang="en">
|
||||
<head><meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="log module" href="log.html" /><link rel="prev" title="config_parser module" href="config_parser.html" />
|
||||
|
||||
<!-- Generated with Sphinx 6.2.1 and Furo 2023.03.27 -->
|
||||
<title>filters module - Generování 3D modelu otisku prstu 1.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=fad236701ea90a88636c2a8c73b44ae642ed2a53" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f8f8f8;
|
||||
--color-code-foreground: black;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<circle cx="12" cy="12" r="9" />
|
||||
<path d="M13 12h5" />
|
||||
<path d="M13 15h4" />
|
||||
<path d="M13 18h1" />
|
||||
<path d="M13 9h4" />
|
||||
<path d="M13 6h1" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||
<label class="overlay sidebar-overlay" for="__navigation">
|
||||
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||
</label>
|
||||
<label class="overlay toc-overlay" for="__toc">
|
||||
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="index.html"><div class="brand">Generování 3D modelu otisku prstu 1.0 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||
|
||||
|
||||
<span class="sidebar-brand-text">Generování 3D modelu otisku prstu 1.0 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filtering.html">Filtering images</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration and presets</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filter_list.html">Available filters with parameters</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="generation.html">Generating fingerprint models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||
<li class="toctree-l1 current has-children"><a class="reference internal" href="modules.html">src</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul class="current">
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html">config_parser module</a></li>
|
||||
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">filters module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="log.html">log module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html">main module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="stl_parser.html">stl_parser module</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main">
|
||||
<section id="module-filters">
|
||||
<span id="filters-module"></span><h1>filters module<a class="headerlink" href="#module-filters" title="Permalink to this heading">#</a></h1>
|
||||
<p>Filter library for the application</p>
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.add_margin">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">add_margin</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.add_margin" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Add margin to the image.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.add_margin.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.add_margin.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.add_margin.init">
|
||||
<span class="sig-name descname"><span class="pre">init</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.add_margin.init" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.bilateral">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">bilateral</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.bilateral" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Bilateral filter from opencv.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.bilateral.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.bilateral.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.bilateral_scikit">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">bilateral_scikit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.bilateral_scikit" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Skimage denoise_bilateral filter.
|
||||
Averages pixels based on their distance and color similarity.
|
||||
Preserves edges while removing unwanted noise.
|
||||
Much slower than opencv implementation.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.bilateral_scikit.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.bilateral_scikit.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.binarize">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">binarize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.binarize" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Binarization filter from opencv.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.binarize.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.binarize.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.binarize.init">
|
||||
<span class="sig-name descname"><span class="pre">init</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.binarize.init" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.binarize_otsu">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">binarize_otsu</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.binarize_otsu" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Otsu binarization filter from opencv.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.binarize_otsu.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.binarize_otsu.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.binarize_otsu.init">
|
||||
<span class="sig-name descname"><span class="pre">init</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.binarize_otsu.init" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.block_match">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">block_match</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.block_match" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Block matching filter from bm3d.</p>
|
||||
<p>This filter is very slow and should be used only on small images</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.block_match.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.block_match.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.dilate">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">dilate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.dilate" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Dilation morphological operation from OpenCV module.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.dilate.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.dilate.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.erode">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">erode</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.erode" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Erosion morphological operation from OpenCV module.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.erode.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.erode.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.farid">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">farid</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.farid" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Farid filter from filters.
|
||||
Finds edges of the image.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.farid.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.farid.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.gaussian">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">gaussian</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.gaussian" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Gaussian blur filter from scikit-image.
|
||||
Easier to use than opencv version.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.gaussian.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.gaussian.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.hessian">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">hessian</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.hessian" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Hessian filter from scikit-image filters.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.hessian.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.hessian.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.img_filter">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">img_filter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.img_filter" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
|
||||
<p>Parent class for all the filters.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.invert">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">invert</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.invert" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Invert the image using bitwise_not from opencv.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.invert.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.invert.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.median">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">median</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.median" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Median blur filter from scikit-image.
|
||||
Using this over opencv version as that one is limited to 5x5 kernel.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.median.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.median.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.meijering">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">meijering</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.meijering" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Meijering filter from scikit-image filters.
|
||||
Finds continuous ridges.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.meijering.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.meijering.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.nlmeans">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">nlmeans</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.nlmeans" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Non-local means filter from scikit-image.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.nlmeans.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.nlmeans.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.sato">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">sato</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.sato" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Meijering filter from scikit-image filters.
|
||||
Exctracts continuous ridges.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.sato.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.sato.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.scale_values">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">scale_values</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.scale_values" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Scale values of the image to use the entire range of data type.
|
||||
This should remove the line height issues.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.scale_values.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.scale_values.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.total_variation">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">total_variation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.total_variation" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Scikit image denoise_tv_chambolle filter from scikit-image.</p>
|
||||
<p>Performs total variation denoising technique based on original Chambolle paper.
|
||||
This filter removes fine detail, but preserves details such as edges.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.total_variation.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.total_variation.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.unsharp_mask_pil">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">unsharp_mask_pil</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.unsharp_mask_pil" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Unsharp mask filter from PIL.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.unsharp_mask_pil.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.unsharp_mask_pil.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="filters.unsharp_mask_scikit">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filters.</span></span><span class="sig-name descname"><span class="pre">unsharp_mask_scikit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">img</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.unsharp_mask_scikit" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#filters.img_filter" title="filters.img_filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">img_filter</span></code></a></p>
|
||||
<p>Unsharp mask filter from scikit.</p>
|
||||
<p>Apply blurring using gaussian filter, then subtract the blurred image from the original image.
|
||||
Radius parameter is the sigma parameter of the gaussian filter.
|
||||
Amount parameter regulates the strength of the unsharp mask.
|
||||
Better results than using this from opencv.</p>
|
||||
<dl class="py method">
|
||||
<dt class="sig sig-object py" id="filters.unsharp_mask_scikit.apply">
|
||||
<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#filters.unsharp_mask_scikit.apply" title="Permalink to this definition">#</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</section>
|
||||
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
<a class="next-page" href="log.html">
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Next</span>
|
||||
</div>
|
||||
<div class="title">log module</div>
|
||||
</div>
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
</a>
|
||||
<a class="prev-page" href="config_parser.html">
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Previous</span>
|
||||
</div>
|
||||
|
||||
<div class="title">config_parser module</div>
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2023, xlanro00
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer">
|
||||
|
||||
|
||||
<div class="toc-sticky toc-scroll">
|
||||
<div class="toc-title-container">
|
||||
<span class="toc-title">
|
||||
On this page
|
||||
</span>
|
||||
</div>
|
||||
<div class="toc-tree-container">
|
||||
<div class="toc-tree">
|
||||
<ul>
|
||||
<li><a class="reference internal" href="#">filters module</a><ul>
|
||||
<li><a class="reference internal" href="#filters.add_margin"><code class="docutils literal notranslate"><span class="pre">add_margin</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.add_margin.apply"><code class="docutils literal notranslate"><span class="pre">add_margin.apply()</span></code></a></li>
|
||||
<li><a class="reference internal" href="#filters.add_margin.init"><code class="docutils literal notranslate"><span class="pre">add_margin.init()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.bilateral"><code class="docutils literal notranslate"><span class="pre">bilateral</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.bilateral.apply"><code class="docutils literal notranslate"><span class="pre">bilateral.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.bilateral_scikit"><code class="docutils literal notranslate"><span class="pre">bilateral_scikit</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.bilateral_scikit.apply"><code class="docutils literal notranslate"><span class="pre">bilateral_scikit.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.binarize"><code class="docutils literal notranslate"><span class="pre">binarize</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.binarize.apply"><code class="docutils literal notranslate"><span class="pre">binarize.apply()</span></code></a></li>
|
||||
<li><a class="reference internal" href="#filters.binarize.init"><code class="docutils literal notranslate"><span class="pre">binarize.init()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.binarize_otsu"><code class="docutils literal notranslate"><span class="pre">binarize_otsu</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.binarize_otsu.apply"><code class="docutils literal notranslate"><span class="pre">binarize_otsu.apply()</span></code></a></li>
|
||||
<li><a class="reference internal" href="#filters.binarize_otsu.init"><code class="docutils literal notranslate"><span class="pre">binarize_otsu.init()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.block_match"><code class="docutils literal notranslate"><span class="pre">block_match</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.block_match.apply"><code class="docutils literal notranslate"><span class="pre">block_match.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.dilate"><code class="docutils literal notranslate"><span class="pre">dilate</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.dilate.apply"><code class="docutils literal notranslate"><span class="pre">dilate.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.erode"><code class="docutils literal notranslate"><span class="pre">erode</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.erode.apply"><code class="docutils literal notranslate"><span class="pre">erode.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.farid"><code class="docutils literal notranslate"><span class="pre">farid</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.farid.apply"><code class="docutils literal notranslate"><span class="pre">farid.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.gaussian"><code class="docutils literal notranslate"><span class="pre">gaussian</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.gaussian.apply"><code class="docutils literal notranslate"><span class="pre">gaussian.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.hessian"><code class="docutils literal notranslate"><span class="pre">hessian</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.hessian.apply"><code class="docutils literal notranslate"><span class="pre">hessian.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.img_filter"><code class="docutils literal notranslate"><span class="pre">img_filter</span></code></a></li>
|
||||
<li><a class="reference internal" href="#filters.invert"><code class="docutils literal notranslate"><span class="pre">invert</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.invert.apply"><code class="docutils literal notranslate"><span class="pre">invert.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.median"><code class="docutils literal notranslate"><span class="pre">median</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.median.apply"><code class="docutils literal notranslate"><span class="pre">median.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.meijering"><code class="docutils literal notranslate"><span class="pre">meijering</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.meijering.apply"><code class="docutils literal notranslate"><span class="pre">meijering.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.nlmeans"><code class="docutils literal notranslate"><span class="pre">nlmeans</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.nlmeans.apply"><code class="docutils literal notranslate"><span class="pre">nlmeans.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.sato"><code class="docutils literal notranslate"><span class="pre">sato</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.sato.apply"><code class="docutils literal notranslate"><span class="pre">sato.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.scale_values"><code class="docutils literal notranslate"><span class="pre">scale_values</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.scale_values.apply"><code class="docutils literal notranslate"><span class="pre">scale_values.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.total_variation"><code class="docutils literal notranslate"><span class="pre">total_variation</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.total_variation.apply"><code class="docutils literal notranslate"><span class="pre">total_variation.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.unsharp_mask_pil"><code class="docutils literal notranslate"><span class="pre">unsharp_mask_pil</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.unsharp_mask_pil.apply"><code class="docutils literal notranslate"><span class="pre">unsharp_mask_pil.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#filters.unsharp_mask_scikit"><code class="docutils literal notranslate"><span class="pre">unsharp_mask_scikit</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#filters.unsharp_mask_scikit.apply"><code class="docutils literal notranslate"><span class="pre">unsharp_mask_scikit.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||
<script src="_static/doctools.js"></script>
|
||||
<script src="_static/sphinx_highlight.js"></script>
|
||||
<script src="_static/scripts/furo.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,720 @@
|
||||
<!doctype html>
|
||||
<html class="no-js" lang="en">
|
||||
<head><meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="#" /><link rel="search" title="Search" href="search.html" />
|
||||
|
||||
<!-- Generated with Sphinx 6.2.1 and Furo 2023.03.27 --><title>Index - Generování 3D modelu otisku prstu 1.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=fad236701ea90a88636c2a8c73b44ae642ed2a53" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f8f8f8;
|
||||
--color-code-foreground: black;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<circle cx="12" cy="12" r="9" />
|
||||
<path d="M13 12h5" />
|
||||
<path d="M13 15h4" />
|
||||
<path d="M13 18h1" />
|
||||
<path d="M13 9h4" />
|
||||
<path d="M13 6h1" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||
<label class="overlay sidebar-overlay" for="__navigation">
|
||||
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||
</label>
|
||||
<label class="overlay toc-overlay" for="__toc">
|
||||
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="index.html"><div class="brand">Generování 3D modelu otisku prstu 1.0 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||
|
||||
|
||||
<span class="sidebar-brand-text">Generování 3D modelu otisku prstu 1.0 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filtering.html">Filtering images</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration and presets</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filter_list.html">Available filters with parameters</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="generation.html">Generating fingerprint models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="modules.html">src</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html">config_parser module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html">filters module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="log.html">log module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html">main module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="stl_parser.html">stl_parser module</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main">
|
||||
|
||||
<section class="genindex-section">
|
||||
<h1 id="index">Index</h1>
|
||||
<div class="genindex-jumpbox"><a href="#A"><strong>A</strong></a> | <a href="#B"><strong>B</strong></a> | <a href="#C"><strong>C</strong></a> | <a href="#D"><strong>D</strong></a> | <a href="#E"><strong>E</strong></a> | <a href="#F"><strong>F</strong></a> | <a href="#G"><strong>G</strong></a> | <a href="#H"><strong>H</strong></a> | <a href="#I"><strong>I</strong></a> | <a href="#L"><strong>L</strong></a> | <a href="#M"><strong>M</strong></a> | <a href="#N"><strong>N</strong></a> | <a href="#P"><strong>P</strong></a> | <a href="#S"><strong>S</strong></a> | <a href="#T"><strong>T</strong></a> | <a href="#U"><strong>U</strong></a></div>
|
||||
</section>
|
||||
<section id="A" class="genindex-section">
|
||||
<h2>A</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="filters.html#filters.add_margin">add_margin (class in filters)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.add_margin.apply">apply() (filters.add_margin method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="filters.html#filters.bilateral.apply">(filters.bilateral method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.bilateral_scikit.apply">(filters.bilateral_scikit method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.binarize.apply">(filters.binarize method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.binarize_otsu.apply">(filters.binarize_otsu method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.block_match.apply">(filters.block_match method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.dilate.apply">(filters.dilate method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.erode.apply">(filters.erode method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.farid.apply">(filters.farid method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.gaussian.apply">(filters.gaussian method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.hessian.apply">(filters.hessian method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.invert.apply">(filters.invert method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.median.apply">(filters.median method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.meijering.apply">(filters.meijering method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.nlmeans.apply">(filters.nlmeans method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.sato.apply">(filters.sato method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.scale_values.apply">(filters.scale_values method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.total_variation.apply">(filters.total_variation method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.unsharp_mask_pil.apply">(filters.unsharp_mask_pil method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.unsharp_mask_scikit.apply">(filters.unsharp_mask_scikit method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="B" class="genindex-section">
|
||||
<h2>B</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="filters.html#filters.bilateral">bilateral (class in filters)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.bilateral_scikit">bilateral_scikit (class in filters)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.binarize">binarize (class in filters)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.binarize_otsu">binarize_otsu (class in filters)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.block_match">block_match (class in filters)</a>
|
||||
</li>
|
||||
<li>
|
||||
built-in function
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.__init__">main.__init__()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.append_faces">main.append_faces()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.apply_filters">main.apply_filters()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.create_faces">main.create_faces()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.create_stl_mesh">main.create_stl_mesh()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.engrave_text">main.engrave_text()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.get_empty_figure">main.get_empty_figure()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.get_ID">main.get_ID()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.make_stl_curved">main.make_stl_curved()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.make_stl_map">main.make_stl_map()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.make_stl_planar">main.make_stl_planar()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.mirror_image">main.mirror_image()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.parse_arguments">main.parse_arguments()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.parse_stl">main.parse_stl()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.prepare_heightmap">main.prepare_heightmap()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.run_filtering">main.run_filtering()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.run_stl">main.run_stl()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.save_image">main.save_image()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.save_stl">main.save_stl()</a>
|
||||
</li>
|
||||
<li><a href="main.html#main.write_stl_header">main.write_stl_header()</a>
|
||||
</li>
|
||||
<li><a href="stl_parser.html#stl_parser.stl_parser">stl_parser.stl_parser()</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="C" class="genindex-section">
|
||||
<h2>C</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li>
|
||||
config_parser
|
||||
|
||||
<ul>
|
||||
<li><a href="config_parser.html#module-config_parser">module</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="D" class="genindex-section">
|
||||
<h2>D</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="filters.html#filters.dilate">dilate (class in filters)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="E" class="genindex-section">
|
||||
<h2>E</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="filters.html#filters.erode">erode (class in filters)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="log.html#log.error_exit">error_exit() (in module log)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="F" class="genindex-section">
|
||||
<h2>F</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="filters.html#filters.farid">farid (class in filters)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li>
|
||||
filters
|
||||
|
||||
<ul>
|
||||
<li><a href="filters.html#module-filters">module</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="G" class="genindex-section">
|
||||
<h2>G</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="filters.html#filters.gaussian">gaussian (class in filters)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="H" class="genindex-section">
|
||||
<h2>H</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="filters.html#filters.hessian">hessian (class in filters)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="I" class="genindex-section">
|
||||
<h2>I</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="filters.html#filters.img_filter">img_filter (class in filters)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.add_margin.init">init() (filters.add_margin method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="filters.html#filters.binarize.init">(filters.binarize method)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.binarize_otsu.init">(filters.binarize_otsu method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="filters.html#filters.invert">invert (class in filters)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="L" class="genindex-section">
|
||||
<h2>L</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li>
|
||||
log
|
||||
|
||||
<ul>
|
||||
<li><a href="log.html#module-log">module</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="M" class="genindex-section">
|
||||
<h2>M</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li>
|
||||
main.__init__()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.__init__">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.append_faces()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.append_faces">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.apply_filters()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.apply_filters">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.create_faces()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.create_faces">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.create_stl_mesh()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.create_stl_mesh">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.engrave_text()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.engrave_text">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="main.html#main.fingerprint_app">main.fingerprint_app (built-in class)</a>
|
||||
</li>
|
||||
<li>
|
||||
main.get_empty_figure()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.get_empty_figure">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.get_ID()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.get_ID">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.make_stl_curved()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.make_stl_curved">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.make_stl_map()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.make_stl_map">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.make_stl_planar()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.make_stl_planar">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li>
|
||||
main.mirror_image()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.mirror_image">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.parse_arguments()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.parse_arguments">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.parse_stl()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.parse_stl">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.prepare_heightmap()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.prepare_heightmap">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.run_filtering()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.run_filtering">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.run_stl()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.run_stl">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.save_image()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.save_image">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.save_stl()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.save_stl">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>
|
||||
main.write_stl_header()
|
||||
|
||||
<ul>
|
||||
<li><a href="main.html#main.write_stl_header">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="filters.html#filters.median">median (class in filters)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.meijering">meijering (class in filters)</a>
|
||||
</li>
|
||||
<li>
|
||||
module
|
||||
|
||||
<ul>
|
||||
<li><a href="config_parser.html#module-config_parser">config_parser</a>
|
||||
</li>
|
||||
<li><a href="filters.html#module-filters">filters</a>
|
||||
</li>
|
||||
<li><a href="log.html#module-log">log</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="N" class="genindex-section">
|
||||
<h2>N</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="filters.html#filters.nlmeans">nlmeans (class in filters)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="P" class="genindex-section">
|
||||
<h2>P</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="config_parser.html#config_parser.parse_conf">parse_conf() (in module config_parser)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="config_parser.html#config_parser.parse_params">parse_params() (in module config_parser)</a>
|
||||
</li>
|
||||
<li><a href="log.html#log.print_message">print_message() (in module log)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="S" class="genindex-section">
|
||||
<h2>S</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="filters.html#filters.sato">sato (class in filters)</a>
|
||||
</li>
|
||||
<li><a href="config_parser.html#config_parser.save_preset">save_preset() (in module config_parser)</a>
|
||||
</li>
|
||||
<li><a href="filters.html#filters.scale_values">scale_values (class in filters)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li>
|
||||
stl_parser.stl_parser()
|
||||
|
||||
<ul>
|
||||
<li><a href="stl_parser.html#stl_parser.stl_parser">built-in function</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="config_parser.html#config_parser.store_to_db">store_to_db() (in module config_parser)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="T" class="genindex-section">
|
||||
<h2>T</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="filters.html#filters.total_variation">total_variation (class in filters)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
<section id="U" class="genindex-section">
|
||||
<h2>U</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="filters.html#filters.unsharp_mask_pil">unsharp_mask_pil (class in filters)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="filters.html#filters.unsharp_mask_scikit">unsharp_mask_scikit (class in filters)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
</section>
|
||||
|
||||
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2023, xlanro00
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||
<script src="_static/doctools.js"></script>
|
||||
<script src="_static/sphinx_highlight.js"></script>
|
||||
<script src="_static/scripts/furo.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,345 @@
|
||||
<!doctype html>
|
||||
<html class="no-js" lang="en">
|
||||
<head><meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Filtering images" href="filtering.html" /><link rel="prev" title="Generování 3D modelu otisku prstu" href="index.html" />
|
||||
|
||||
<!-- Generated with Sphinx 6.2.1 and Furo 2023.03.27 -->
|
||||
<title>Installation - Generování 3D modelu otisku prstu 1.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=fad236701ea90a88636c2a8c73b44ae642ed2a53" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f8f8f8;
|
||||
--color-code-foreground: black;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<circle cx="12" cy="12" r="9" />
|
||||
<path d="M13 12h5" />
|
||||
<path d="M13 15h4" />
|
||||
<path d="M13 18h1" />
|
||||
<path d="M13 9h4" />
|
||||
<path d="M13 6h1" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||
<label class="overlay sidebar-overlay" for="__navigation">
|
||||
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||
</label>
|
||||
<label class="overlay toc-overlay" for="__toc">
|
||||
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="index.html"><div class="brand">Generování 3D modelu otisku prstu 1.0 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||
|
||||
|
||||
<span class="sidebar-brand-text">Generování 3D modelu otisku prstu 1.0 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filtering.html">Filtering images</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration and presets</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filter_list.html">Available filters with parameters</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="generation.html">Generating fingerprint models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="modules.html">src</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html">config_parser module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html">filters module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="log.html">log module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html">main module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="stl_parser.html">stl_parser module</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main">
|
||||
<section id="installation">
|
||||
<h1>Installation<a class="headerlink" href="#installation" title="Permalink to this heading">#</a></h1>
|
||||
<section id="requirements">
|
||||
<h2>Requirements<a class="headerlink" href="#requirements" title="Permalink to this heading">#</a></h2>
|
||||
<p>The application has only been tested on Ubuntu gnu/linux machines.
|
||||
It should however be possible to use it in on most linux distributions, WSLs and also virtual machines of most linux distributions.</p>
|
||||
<p>To start off, you need these to succesfully use the application.</p>
|
||||
<ul class="simple">
|
||||
<li><p><strong>python</strong> version 3.10 is a requirement might work on earlier python 3 versions:</p></li>
|
||||
</ul>
|
||||
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>python3.10
|
||||
</pre></div>
|
||||
</div>
|
||||
<ul class="simple">
|
||||
<li><p><strong>virtualenv</strong> package for virtual enviroment creation, other packages are installed automatically later:</p></li>
|
||||
</ul>
|
||||
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>pip<span class="w"> </span>install<span class="w"> </span>virtualenv
|
||||
</pre></div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="getting-started">
|
||||
<h2>Getting started<a class="headerlink" href="#getting-started" title="Permalink to this heading">#</a></h2>
|
||||
<p>This will install the application and its components into the Documents directory.
|
||||
It will also install several required python packages, including venv, which is used to create a virtual enviroment.</p>
|
||||
<ol class="arabic simple">
|
||||
<li><p>Go to a suitable installation folder, for example <strong>Documents</strong>:</p></li>
|
||||
</ol>
|
||||
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>/home/username/Documents
|
||||
</pre></div>
|
||||
</div>
|
||||
<ol class="arabic simple" start="2">
|
||||
<li><p>Clone the repository to a suitable directory, for example:</p></li>
|
||||
</ol>
|
||||
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>git<span class="w"> </span>clone<span class="w"> </span>ssh://git@strade.fit.vutbr.cz:3022/xlanro00/BP_DP-xlanro00.git
|
||||
</pre></div>
|
||||
</div>
|
||||
<ol class="arabic simple" start="3">
|
||||
<li><p>Go inside cloned directory:</p></li>
|
||||
</ol>
|
||||
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>BP_DP-xlanro00
|
||||
</pre></div>
|
||||
</div>
|
||||
<ol class="arabic simple" start="4">
|
||||
<li><p>Create and enter the virtual enviroment:</p></li>
|
||||
</ol>
|
||||
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>virtualenv<span class="w"> </span>.venv<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="nb">source</span><span class="w"> </span>.venv/bin/activate
|
||||
</pre></div>
|
||||
</div>
|
||||
<ol class="arabic simple" start="5">
|
||||
<li><p>Install required python modules from <strong>requirements.txt</strong>:</p></li>
|
||||
</ol>
|
||||
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp gp-VirtualEnv">(.venv)</span><span class="gp">$ </span>pip<span class="w"> </span>install<span class="w"> </span>-r<span class="w"> </span>requirements.txt
|
||||
</pre></div>
|
||||
</div>
|
||||
<ol class="arabic simple" start="6">
|
||||
<li><dl class="simple">
|
||||
<dt>Now, you are all set to run the application.</dt><dd><p>Examples of how to do this are listedin the section bellow.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ol>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
<a class="next-page" href="filtering.html">
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Next</span>
|
||||
</div>
|
||||
<div class="title">Filtering images</div>
|
||||
</div>
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
</a>
|
||||
<a class="prev-page" href="index.html">
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Previous</span>
|
||||
</div>
|
||||
|
||||
<div class="title">Home</div>
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2023, xlanro00
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer">
|
||||
|
||||
|
||||
<div class="toc-sticky toc-scroll">
|
||||
<div class="toc-title-container">
|
||||
<span class="toc-title">
|
||||
On this page
|
||||
</span>
|
||||
</div>
|
||||
<div class="toc-tree-container">
|
||||
<div class="toc-tree">
|
||||
<ul>
|
||||
<li><a class="reference internal" href="#">Installation</a><ul>
|
||||
<li><a class="reference internal" href="#requirements">Requirements</a></li>
|
||||
<li><a class="reference internal" href="#getting-started">Getting started</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||
<script src="_static/doctools.js"></script>
|
||||
<script src="_static/sphinx_highlight.js"></script>
|
||||
<script src="_static/scripts/furo.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,300 @@
|
||||
<!doctype html>
|
||||
<html class="no-js" lang="en">
|
||||
<head><meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="main module" href="main.html" /><link rel="prev" title="filters module" href="filters.html" />
|
||||
|
||||
<!-- Generated with Sphinx 6.2.1 and Furo 2023.03.27 -->
|
||||
<title>log module - Generování 3D modelu otisku prstu 1.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=fad236701ea90a88636c2a8c73b44ae642ed2a53" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f8f8f8;
|
||||
--color-code-foreground: black;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<circle cx="12" cy="12" r="9" />
|
||||
<path d="M13 12h5" />
|
||||
<path d="M13 15h4" />
|
||||
<path d="M13 18h1" />
|
||||
<path d="M13 9h4" />
|
||||
<path d="M13 6h1" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||
<label class="overlay sidebar-overlay" for="__navigation">
|
||||
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||
</label>
|
||||
<label class="overlay toc-overlay" for="__toc">
|
||||
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="index.html"><div class="brand">Generování 3D modelu otisku prstu 1.0 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||
|
||||
|
||||
<span class="sidebar-brand-text">Generování 3D modelu otisku prstu 1.0 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filtering.html">Filtering images</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration and presets</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filter_list.html">Available filters with parameters</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="generation.html">Generating fingerprint models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||
<li class="toctree-l1 current has-children"><a class="reference internal" href="modules.html">src</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul class="current">
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html">config_parser module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html">filters module</a></li>
|
||||
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">log module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html">main module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="stl_parser.html">stl_parser module</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main">
|
||||
<section id="module-log">
|
||||
<span id="log-module"></span><h1>log module<a class="headerlink" href="#module-log" title="Permalink to this heading">#</a></h1>
|
||||
<p>Module with logging functions</p>
|
||||
<dl class="py function">
|
||||
<dt class="sig sig-object py" id="log.error_exit">
|
||||
<span class="sig-prename descclassname"><span class="pre">log.</span></span><span class="sig-name descname"><span class="pre">error_exit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">error_message</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#log.error_exit" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Print given error message to stderr and exit the application.
|
||||
:param message: error message to be printed to stderr</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py function">
|
||||
<dt class="sig sig-object py" id="log.print_message">
|
||||
<span class="sig-prename descclassname"><span class="pre">log.</span></span><span class="sig-name descname"><span class="pre">print_message</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#log.print_message" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Print given message to stderr.
|
||||
:param message: message to be printed to stderr</p>
|
||||
</dd></dl>
|
||||
|
||||
</section>
|
||||
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
<a class="next-page" href="main.html">
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Next</span>
|
||||
</div>
|
||||
<div class="title">main module</div>
|
||||
</div>
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
</a>
|
||||
<a class="prev-page" href="filters.html">
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Previous</span>
|
||||
</div>
|
||||
|
||||
<div class="title">filters module</div>
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2023, xlanro00
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer">
|
||||
|
||||
|
||||
<div class="toc-sticky toc-scroll">
|
||||
<div class="toc-title-container">
|
||||
<span class="toc-title">
|
||||
On this page
|
||||
</span>
|
||||
</div>
|
||||
<div class="toc-tree-container">
|
||||
<div class="toc-tree">
|
||||
<ul>
|
||||
<li><a class="reference internal" href="#">log module</a><ul>
|
||||
<li><a class="reference internal" href="#log.error_exit"><code class="docutils literal notranslate"><span class="pre">error_exit()</span></code></a></li>
|
||||
<li><a class="reference internal" href="#log.print_message"><code class="docutils literal notranslate"><span class="pre">print_message()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||
<script src="_static/doctools.js"></script>
|
||||
<script src="_static/sphinx_highlight.js"></script>
|
||||
<script src="_static/scripts/furo.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,396 @@
|
||||
<!doctype html>
|
||||
<html class="no-js" lang="en">
|
||||
<head><meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="config_parser module" href="config_parser.html" /><link rel="prev" title="Troubleshooting" href="troubleshooting.html" />
|
||||
|
||||
<!-- Generated with Sphinx 6.2.1 and Furo 2023.03.27 -->
|
||||
<title>src - Generování 3D modelu otisku prstu 1.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=fad236701ea90a88636c2a8c73b44ae642ed2a53" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f8f8f8;
|
||||
--color-code-foreground: black;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<circle cx="12" cy="12" r="9" />
|
||||
<path d="M13 12h5" />
|
||||
<path d="M13 15h4" />
|
||||
<path d="M13 18h1" />
|
||||
<path d="M13 9h4" />
|
||||
<path d="M13 6h1" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||
<label class="overlay sidebar-overlay" for="__navigation">
|
||||
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||
</label>
|
||||
<label class="overlay toc-overlay" for="__toc">
|
||||
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="index.html"><div class="brand">Generování 3D modelu otisku prstu 1.0 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||
|
||||
|
||||
<span class="sidebar-brand-text">Generování 3D modelu otisku prstu 1.0 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filtering.html">Filtering images</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration and presets</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filter_list.html">Available filters with parameters</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="generation.html">Generating fingerprint models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||
<li class="toctree-l1 current has-children current-page"><a class="current reference internal" href="#">src</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html">config_parser module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html">filters module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="log.html">log module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html">main module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="stl_parser.html">stl_parser module</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main">
|
||||
<section id="src">
|
||||
<h1>src<a class="headerlink" href="#src" title="Permalink to this heading">#</a></h1>
|
||||
<div class="toctree-wrapper compound">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="config_parser.html">config_parser module</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html#config_parser.parse_conf"><code class="docutils literal notranslate"><span class="pre">parse_conf()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html#config_parser.parse_params"><code class="docutils literal notranslate"><span class="pre">parse_params()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html#config_parser.save_preset"><code class="docutils literal notranslate"><span class="pre">save_preset()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html#config_parser.store_to_db"><code class="docutils literal notranslate"><span class="pre">store_to_db()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filters.html">filters module</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.add_margin"><code class="docutils literal notranslate"><span class="pre">add_margin</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.add_margin.apply"><code class="docutils literal notranslate"><span class="pre">add_margin.apply()</span></code></a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.add_margin.init"><code class="docutils literal notranslate"><span class="pre">add_margin.init()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.bilateral"><code class="docutils literal notranslate"><span class="pre">bilateral</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.bilateral.apply"><code class="docutils literal notranslate"><span class="pre">bilateral.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.bilateral_scikit"><code class="docutils literal notranslate"><span class="pre">bilateral_scikit</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.bilateral_scikit.apply"><code class="docutils literal notranslate"><span class="pre">bilateral_scikit.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.binarize"><code class="docutils literal notranslate"><span class="pre">binarize</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.binarize.apply"><code class="docutils literal notranslate"><span class="pre">binarize.apply()</span></code></a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.binarize.init"><code class="docutils literal notranslate"><span class="pre">binarize.init()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.binarize_otsu"><code class="docutils literal notranslate"><span class="pre">binarize_otsu</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.binarize_otsu.apply"><code class="docutils literal notranslate"><span class="pre">binarize_otsu.apply()</span></code></a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.binarize_otsu.init"><code class="docutils literal notranslate"><span class="pre">binarize_otsu.init()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.block_match"><code class="docutils literal notranslate"><span class="pre">block_match</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.block_match.apply"><code class="docutils literal notranslate"><span class="pre">block_match.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.dilate"><code class="docutils literal notranslate"><span class="pre">dilate</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.dilate.apply"><code class="docutils literal notranslate"><span class="pre">dilate.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.erode"><code class="docutils literal notranslate"><span class="pre">erode</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.erode.apply"><code class="docutils literal notranslate"><span class="pre">erode.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.farid"><code class="docutils literal notranslate"><span class="pre">farid</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.farid.apply"><code class="docutils literal notranslate"><span class="pre">farid.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.gaussian"><code class="docutils literal notranslate"><span class="pre">gaussian</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.gaussian.apply"><code class="docutils literal notranslate"><span class="pre">gaussian.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.hessian"><code class="docutils literal notranslate"><span class="pre">hessian</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.hessian.apply"><code class="docutils literal notranslate"><span class="pre">hessian.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.img_filter"><code class="docutils literal notranslate"><span class="pre">img_filter</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.invert"><code class="docutils literal notranslate"><span class="pre">invert</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.invert.apply"><code class="docutils literal notranslate"><span class="pre">invert.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.median"><code class="docutils literal notranslate"><span class="pre">median</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.median.apply"><code class="docutils literal notranslate"><span class="pre">median.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.meijering"><code class="docutils literal notranslate"><span class="pre">meijering</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.meijering.apply"><code class="docutils literal notranslate"><span class="pre">meijering.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.nlmeans"><code class="docutils literal notranslate"><span class="pre">nlmeans</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.nlmeans.apply"><code class="docutils literal notranslate"><span class="pre">nlmeans.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.sato"><code class="docutils literal notranslate"><span class="pre">sato</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.sato.apply"><code class="docutils literal notranslate"><span class="pre">sato.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.scale_values"><code class="docutils literal notranslate"><span class="pre">scale_values</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.scale_values.apply"><code class="docutils literal notranslate"><span class="pre">scale_values.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.total_variation"><code class="docutils literal notranslate"><span class="pre">total_variation</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.total_variation.apply"><code class="docutils literal notranslate"><span class="pre">total_variation.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.unsharp_mask_pil"><code class="docutils literal notranslate"><span class="pre">unsharp_mask_pil</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.unsharp_mask_pil.apply"><code class="docutils literal notranslate"><span class="pre">unsharp_mask_pil.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html#filters.unsharp_mask_scikit"><code class="docutils literal notranslate"><span class="pre">unsharp_mask_scikit</span></code></a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="filters.html#filters.unsharp_mask_scikit.apply"><code class="docutils literal notranslate"><span class="pre">unsharp_mask_scikit.apply()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="log.html">log module</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="log.html#log.error_exit"><code class="docutils literal notranslate"><span class="pre">error_exit()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="log.html#log.print_message"><code class="docutils literal notranslate"><span class="pre">print_message()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="main.html">main module</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.fingerprint_app"><code class="docutils literal notranslate"><span class="pre">main.fingerprint_app</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.__init__"><code class="docutils literal notranslate"><span class="pre">main.__init__()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.parse_arguments"><code class="docutils literal notranslate"><span class="pre">main.parse_arguments()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.parse_stl"><code class="docutils literal notranslate"><span class="pre">main.parse_stl()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.run_filtering"><code class="docutils literal notranslate"><span class="pre">main.run_filtering()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.get_empty_figure"><code class="docutils literal notranslate"><span class="pre">main.get_empty_figure()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.mirror_image"><code class="docutils literal notranslate"><span class="pre">main.mirror_image()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.apply_filters"><code class="docutils literal notranslate"><span class="pre">main.apply_filters()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.save_image"><code class="docutils literal notranslate"><span class="pre">main.save_image()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.run_stl"><code class="docutils literal notranslate"><span class="pre">main.run_stl()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.prepare_heightmap"><code class="docutils literal notranslate"><span class="pre">main.prepare_heightmap()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.write_stl_header"><code class="docutils literal notranslate"><span class="pre">main.write_stl_header()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.get_ID"><code class="docutils literal notranslate"><span class="pre">main.get_ID()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.append_faces"><code class="docutils literal notranslate"><span class="pre">main.append_faces()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.engrave_text"><code class="docutils literal notranslate"><span class="pre">main.engrave_text()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.create_stl_mesh"><code class="docutils literal notranslate"><span class="pre">main.create_stl_mesh()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.create_faces"><code class="docutils literal notranslate"><span class="pre">main.create_faces()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.make_stl_planar"><code class="docutils literal notranslate"><span class="pre">main.make_stl_planar()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.make_stl_curved"><code class="docutils literal notranslate"><span class="pre">main.make_stl_curved()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.make_stl_map"><code class="docutils literal notranslate"><span class="pre">main.make_stl_map()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html#main.save_stl"><code class="docutils literal notranslate"><span class="pre">main.save_stl()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="stl_parser.html">stl_parser module</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="stl_parser.html#stl_parser.stl_parser"><code class="docutils literal notranslate"><span class="pre">stl_parser.stl_parser()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
<a class="next-page" href="config_parser.html">
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Next</span>
|
||||
</div>
|
||||
<div class="title">config_parser module</div>
|
||||
</div>
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
</a>
|
||||
<a class="prev-page" href="troubleshooting.html">
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Previous</span>
|
||||
</div>
|
||||
|
||||
<div class="title">Troubleshooting</div>
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2023, xlanro00
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||
<script src="_static/doctools.js"></script>
|
||||
<script src="_static/sphinx_highlight.js"></script>
|
||||
<script src="_static/scripts/furo.js"></script>
|
||||
</body>
|
||||
</html>
|
Binary file not shown.
@ -0,0 +1,285 @@
|
||||
<!doctype html>
|
||||
<html class="no-js" lang="en">
|
||||
<head><meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" />
|
||||
|
||||
<!-- Generated with Sphinx 6.2.1 and Furo 2023.03.27 --><title>Python Module Index - Generování 3D modelu otisku prstu 1.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=fad236701ea90a88636c2a8c73b44ae642ed2a53" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f8f8f8;
|
||||
--color-code-foreground: black;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<circle cx="12" cy="12" r="9" />
|
||||
<path d="M13 12h5" />
|
||||
<path d="M13 15h4" />
|
||||
<path d="M13 18h1" />
|
||||
<path d="M13 9h4" />
|
||||
<path d="M13 6h1" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||
<label class="overlay sidebar-overlay" for="__navigation">
|
||||
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||
</label>
|
||||
<label class="overlay toc-overlay" for="__toc">
|
||||
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="index.html"><div class="brand">Generování 3D modelu otisku prstu 1.0 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||
|
||||
|
||||
<span class="sidebar-brand-text">Generování 3D modelu otisku prstu 1.0 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filtering.html">Filtering images</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration and presets</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filter_list.html">Available filters with parameters</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="generation.html">Generating fingerprint models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="modules.html">src</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html">config_parser module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html">filters module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="log.html">log module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html">main module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="stl_parser.html">stl_parser module</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main">
|
||||
|
||||
<section class="domainindex-section">
|
||||
<h1>Python Module Index</h1>
|
||||
<div class="domainindex-jumpbox"><a href="#cap-c"><strong>c</strong></a> | <a href="#cap-f"><strong>f</strong></a> | <a href="#cap-l"><strong>l</strong></a></div>
|
||||
</section>
|
||||
<table class="domainindex-table">
|
||||
<tr class="pcap">
|
||||
<td></td><td> </td><td></td>
|
||||
</tr>
|
||||
<tr class="cap" id="cap-c">
|
||||
<td></td><td><strong>c</strong></td><td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="config_parser.html#module-config_parser"><code class="xref">config_parser</code></a></td><td>
|
||||
<em></em></td>
|
||||
</tr>
|
||||
<tr class="pcap">
|
||||
<td></td><td> </td><td></td>
|
||||
</tr>
|
||||
<tr class="cap" id="cap-f">
|
||||
<td></td><td><strong>f</strong></td><td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="filters.html#module-filters"><code class="xref">filters</code></a></td><td>
|
||||
<em></em></td>
|
||||
</tr>
|
||||
<tr class="pcap">
|
||||
<td></td><td> </td><td></td>
|
||||
</tr>
|
||||
<tr class="cap" id="cap-l">
|
||||
<td></td><td><strong>l</strong></td><td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="log.html#module-log"><code class="xref">log</code></a></td><td>
|
||||
<em></em></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2023, xlanro00
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||
<script src="_static/doctools.js"></script>
|
||||
<script src="_static/sphinx_highlight.js"></script>
|
||||
<script src="_static/scripts/furo.js"></script>
|
||||
|
||||
<script>DOCUMENTATION_OPTIONS.COLLAPSE_INDEX = true</script></body>
|
||||
</html>
|
@ -0,0 +1,254 @@
|
||||
<!doctype html>
|
||||
<html class="no-js" lang="en">
|
||||
<head><meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="#" />
|
||||
|
||||
<!-- Generated with Sphinx 6.2.1 and Furo 2023.03.27 --><title>Search - Generování 3D modelu otisku prstu 1.0 documentation</title><link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=fad236701ea90a88636c2a8c73b44ae642ed2a53" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f8f8f8;
|
||||
--color-code-foreground: black;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<circle cx="12" cy="12" r="9" />
|
||||
<path d="M13 12h5" />
|
||||
<path d="M13 15h4" />
|
||||
<path d="M13 18h1" />
|
||||
<path d="M13 9h4" />
|
||||
<path d="M13 6h1" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||
<label class="overlay sidebar-overlay" for="__navigation">
|
||||
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||
</label>
|
||||
<label class="overlay toc-overlay" for="__toc">
|
||||
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="index.html"><div class="brand">Generování 3D modelu otisku prstu 1.0 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||
|
||||
|
||||
<span class="sidebar-brand-text">Generování 3D modelu otisku prstu 1.0 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="#" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filtering.html">Filtering images</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration and presets</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filter_list.html">Available filters with parameters</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="generation.html">Generating fingerprint models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="modules.html">src</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html">config_parser module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html">filters module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="log.html">log module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html">main module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="stl_parser.html">stl_parser module</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main">
|
||||
|
||||
<noscript>
|
||||
<div class="admonition error">
|
||||
<p class="admonition-title">Error</p>
|
||||
<p>
|
||||
Please activate JavaScript to enable the search functionality.
|
||||
</p>
|
||||
</div>
|
||||
</noscript>
|
||||
|
||||
<div id="search-results"></div>
|
||||
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2023, xlanro00
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||
<script src="_static/doctools.js"></script>
|
||||
<script src="_static/sphinx_highlight.js"></script>
|
||||
<script src="_static/scripts/furo.js"></script>
|
||||
|
||||
<script src="_static/searchtools.js"></script>
|
||||
<script src="_static/language_data.js"></script>
|
||||
<script src="searchindex.js"></script></body>
|
||||
</html>
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,284 @@
|
||||
<!doctype html>
|
||||
<html class="no-js" lang="en">
|
||||
<head><meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="prev" title="main module" href="main.html" />
|
||||
|
||||
<!-- Generated with Sphinx 6.2.1 and Furo 2023.03.27 -->
|
||||
<title>stl_parser module - Generování 3D modelu otisku prstu 1.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=fad236701ea90a88636c2a8c73b44ae642ed2a53" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f8f8f8;
|
||||
--color-code-foreground: black;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<circle cx="12" cy="12" r="9" />
|
||||
<path d="M13 12h5" />
|
||||
<path d="M13 15h4" />
|
||||
<path d="M13 18h1" />
|
||||
<path d="M13 9h4" />
|
||||
<path d="M13 6h1" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||
<label class="overlay sidebar-overlay" for="__navigation">
|
||||
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||
</label>
|
||||
<label class="overlay toc-overlay" for="__toc">
|
||||
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="index.html"><div class="brand">Generování 3D modelu otisku prstu 1.0 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||
|
||||
|
||||
<span class="sidebar-brand-text">Generování 3D modelu otisku prstu 1.0 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filtering.html">Filtering images</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration and presets</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filter_list.html">Available filters with parameters</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="generation.html">Generating fingerprint models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||
<li class="toctree-l1 current has-children"><a class="reference internal" href="modules.html">src</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul class="current">
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html">config_parser module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html">filters module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="log.html">log module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html">main module</a></li>
|
||||
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">stl_parser module</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main">
|
||||
<section id="stl-parser-module">
|
||||
<h1>stl_parser module<a class="headerlink" href="#stl-parser-module" title="Permalink to this heading">#</a></h1>
|
||||
<p>Utility for parsing STL file header</p>
|
||||
<dl class="py function">
|
||||
<dt class="sig sig-object py" id="stl_parser.stl_parser">
|
||||
<span class="sig-prename descclassname"><span class="pre">stl_parser.</span></span><span class="sig-name descname"><span class="pre">stl_parser</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#stl_parser.stl_parser" title="Permalink to this definition">#</a></dt>
|
||||
<dd><p>Parses stl file header.
|
||||
Prints command for running main.py with preformatted arguments.</p>
|
||||
</dd></dl>
|
||||
|
||||
</section>
|
||||
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
<a class="prev-page" href="main.html">
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Previous</span>
|
||||
</div>
|
||||
|
||||
<div class="title">main module</div>
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2023, xlanro00
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer">
|
||||
|
||||
|
||||
<div class="toc-sticky toc-scroll">
|
||||
<div class="toc-title-container">
|
||||
<span class="toc-title">
|
||||
On this page
|
||||
</span>
|
||||
</div>
|
||||
<div class="toc-tree-container">
|
||||
<div class="toc-tree">
|
||||
<ul>
|
||||
<li><a class="reference internal" href="#">stl_parser module</a><ul>
|
||||
<li><a class="reference internal" href="#stl_parser.stl_parser"><code class="docutils literal notranslate"><span class="pre">stl_parser.stl_parser()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||
<script src="_static/doctools.js"></script>
|
||||
<script src="_static/sphinx_highlight.js"></script>
|
||||
<script src="_static/scripts/furo.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,380 @@
|
||||
<!doctype html>
|
||||
<html class="no-js" lang="en">
|
||||
<head><meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="src" href="modules.html" /><link rel="prev" title="Usage" href="usage.html" />
|
||||
|
||||
<!-- Generated with Sphinx 6.2.1 and Furo 2023.03.27 -->
|
||||
<title>Troubleshooting - Generování 3D modelu otisku prstu 1.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=fad236701ea90a88636c2a8c73b44ae642ed2a53" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f8f8f8;
|
||||
--color-code-foreground: black;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<circle cx="12" cy="12" r="9" />
|
||||
<path d="M13 12h5" />
|
||||
<path d="M13 15h4" />
|
||||
<path d="M13 18h1" />
|
||||
<path d="M13 9h4" />
|
||||
<path d="M13 6h1" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||
<label class="overlay sidebar-overlay" for="__navigation">
|
||||
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||
</label>
|
||||
<label class="overlay toc-overlay" for="__toc">
|
||||
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="index.html"><div class="brand">Generování 3D modelu otisku prstu 1.0 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||
|
||||
|
||||
<span class="sidebar-brand-text">Generování 3D modelu otisku prstu 1.0 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filtering.html">Filtering images</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration and presets</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filter_list.html">Available filters with parameters</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="generation.html">Generating fingerprint models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
|
||||
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Troubleshooting</a></li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="modules.html">src</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html">config_parser module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html">filters module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="log.html">log module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html">main module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="stl_parser.html">stl_parser module</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main">
|
||||
<section id="troubleshooting">
|
||||
<h1>Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permalink to this heading">#</a></h1>
|
||||
<style>
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
th, td {
|
||||
padding: 8px;
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
.code {
|
||||
font-family: 'Courier New', monospace;
|
||||
background-color: #f5f5f5;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.language-json {
|
||||
color: #333;
|
||||
}
|
||||
</style>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Error message</th>
|
||||
<th>Solution</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
main.py: error: the following arguments are required: input_file, output_file, dpi, filters
|
||||
</td>
|
||||
<td>
|
||||
You probably forgot to include some of the required arguments.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Input file res/Palec_P14.tif does not exist
|
||||
</td>
|
||||
<td>
|
||||
The file you want to process does not exist, check the filename again.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Config file not found
|
||||
</td>
|
||||
<td>
|
||||
The config file you want to load config from does not exist, check the filename again.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Preset not found in config file
|
||||
</td>
|
||||
<td>
|
||||
The preset is not present in selected config file, check the file again or select the correct config file.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Filter undefined_filter not found
|
||||
</td>
|
||||
<td>
|
||||
One of the filters from command line is not defined in the library, check its name.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Unrecognized generation mode
|
||||
</td>
|
||||
<td>
|
||||
The first parameter of stl generation should be p, c or m, check it again.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Line depth must be less than plate thickness
|
||||
</td>
|
||||
<td>
|
||||
When generating a cast, the depth must be less than the base plate thckness, otherwise it would have holes on the other side.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Depth of plate height must be positive
|
||||
</td>
|
||||
<td>
|
||||
Cannot generate negative base plate thickness, check order of arguments.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Base and line height must both be positive
|
||||
</td>
|
||||
<td>
|
||||
In curved generation any negative argument is an error, casts are only for planar mode.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Fingerprint image is outside of the finger model
|
||||
</td>
|
||||
<td>
|
||||
Outside of range of the finger, fingerprint cannot be mapped to nothing. Try to change finger_x, finger_y and finger_z parameters.
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></section>
|
||||
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
<a class="next-page" href="modules.html">
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Next</span>
|
||||
</div>
|
||||
<div class="title">src</div>
|
||||
</div>
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
</a>
|
||||
<a class="prev-page" href="usage.html">
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Previous</span>
|
||||
</div>
|
||||
|
||||
<div class="title">Usage</div>
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2023, xlanro00
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||
<script src="_static/doctools.js"></script>
|
||||
<script src="_static/sphinx_highlight.js"></script>
|
||||
<script src="_static/scripts/furo.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,298 @@
|
||||
<!doctype html>
|
||||
<html class="no-js" lang="en">
|
||||
<head><meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Troubleshooting" href="troubleshooting.html" /><link rel="prev" title="Generating fingerprint models" href="generation.html" />
|
||||
|
||||
<!-- Generated with Sphinx 6.2.1 and Furo 2023.03.27 -->
|
||||
<title>Usage - Generování 3D modelu otisku prstu 1.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=fad236701ea90a88636c2a8c73b44ae642ed2a53" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f8f8f8;
|
||||
--color-code-foreground: black;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<circle cx="12" cy="12" r="9" />
|
||||
<path d="M13 12h5" />
|
||||
<path d="M13 15h4" />
|
||||
<path d="M13 18h1" />
|
||||
<path d="M13 9h4" />
|
||||
<path d="M13 6h1" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||
<label class="overlay sidebar-overlay" for="__navigation">
|
||||
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||
</label>
|
||||
<label class="overlay toc-overlay" for="__toc">
|
||||
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="index.html"><div class="brand">Generování 3D modelu otisku prstu 1.0 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||
|
||||
|
||||
<span class="sidebar-brand-text">Generování 3D modelu otisku prstu 1.0 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filtering.html">Filtering images</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration and presets</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="filter_list.html">Available filters with parameters</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="generation.html">Generating fingerprint models</a></li>
|
||||
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Usage</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="modules.html">src</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle child pages in navigation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="config_parser.html">config_parser module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="filters.html">filters module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="log.html">log module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="main.html">main module</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="stl_parser.html">stl_parser module</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle">
|
||||
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main">
|
||||
<section id="usage">
|
||||
<h1>Usage<a class="headerlink" href="#usage" title="Permalink to this heading">#</a></h1>
|
||||
<p>When in doubt, you can always check the help with:</p>
|
||||
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>python3<span class="w"> </span>src/main.py<span class="w"> </span>--help
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Which will print out the following message.</p>
|
||||
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>usage:<span class="w"> </span>main.py<span class="w"> </span><span class="o">[</span>-h<span class="o">]</span><span class="w"> </span><span class="o">[</span>-m<span class="w"> </span><span class="p">|</span><span class="w"> </span>--mirror<span class="w"> </span><span class="p">|</span><span class="w"> </span>--no-mirror<span class="o">]</span><span class="w"> </span>input_file
|
||||
<span class="go">output_file dpi ([-c | --config config_file preset] |</span>
|
||||
<span class="go">[filters ...]) [-s | --stl_file p height_line height_base |</span>
|
||||
<span class="go">--stl_file c height_line height_base curv_rate_x curv_rate_y |</span>
|
||||
<span class="go">--stl m height_line iter finger_x finger_y finger_z]</span>
|
||||
<span class="go">[-d | --database database_filename]</span>
|
||||
|
||||
<span class="go">Program for processing a 2D image into 3D fingerprint.</span>
|
||||
|
||||
<span class="go">positional arguments:</span>
|
||||
<span class="go">input_file input file path</span>
|
||||
<span class="go">output_file output file path</span>
|
||||
<span class="go">dpi dpi of used scanner</span>
|
||||
<span class="go">filters list of filter names and their parameters in form</span>
|
||||
<span class="go"> [filter_name1 param1=value</span>
|
||||
<span class="go"> param2=value filter_name2 param1=value...]</span>
|
||||
|
||||
<span class="go">options:</span>
|
||||
<span class="go">-h, --help show this help message and exit</span>
|
||||
<span class="go">-m, --mirror, --no-mirror</span>
|
||||
<span class="go"> switch to mirror input image</span>
|
||||
<span class="go">-s [STL_FILE ...], --stl_file [STL_FILE ...]</span>
|
||||
<span class="go"> create stl model from processed image</span>
|
||||
<span class="go">-c CONFIG CONFIG, --config CONFIG CONFIG</span>
|
||||
<span class="go"> pair: name of the config file with presets,</span>
|
||||
<span class="go"> name of the preset</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
<a class="next-page" href="troubleshooting.html">
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Next</span>
|
||||
</div>
|
||||
<div class="title">Troubleshooting</div>
|
||||
</div>
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
</a>
|
||||
<a class="prev-page" href="generation.html">
|
||||
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||
<div class="page-info">
|
||||
<div class="context">
|
||||
<span>Previous</span>
|
||||
</div>
|
||||
|
||||
<div class="title">Generating fingerprint models</div>
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2023, xlanro00
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||
<script src="_static/doctools.js"></script>
|
||||
<script src="_static/sphinx_highlight.js"></script>
|
||||
<script src="_static/scripts/furo.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,35 @@
|
||||
@ECHO OFF
|
||||
|
||||
pushd %~dp0
|
||||
|
||||
REM Command file for Sphinx documentation
|
||||
|
||||
if "%SPHINXBUILD%" == "" (
|
||||
set SPHINXBUILD=sphinx-build
|
||||
)
|
||||
set SOURCEDIR=source
|
||||
set BUILDDIR=build
|
||||
|
||||
%SPHINXBUILD% >NUL 2>NUL
|
||||
if errorlevel 9009 (
|
||||
echo.
|
||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||
echo.may add the Sphinx directory to PATH.
|
||||
echo.
|
||||
echo.If you don't have Sphinx installed, grab it from
|
||||
echo.https://www.sphinx-doc.org/
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
if "%1" == "" goto help
|
||||
|
||||
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
||||
goto end
|
||||
|
||||
:help
|
||||
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
||||
|
||||
:end
|
||||
popd
|
@ -0,0 +1,31 @@
|
||||
# Configuration file for the Sphinx documentation builder.
|
||||
#
|
||||
# For the full list of built-in configuration values, see the documentation:
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
||||
|
||||
# -- Project information -----------------------------------------------------
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
|
||||
|
||||
project = 'Generování 3D modelu otisku prstu'
|
||||
copyright = '2023, xlanro00'
|
||||
author = 'xlanro00'
|
||||
release = '1.0'
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.path.abspath("../../src"))
|
||||
|
||||
# -- General configuration ---------------------------------------------------
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
||||
|
||||
extensions = ['sphinx.ext.autodoc',
|
||||
'sphinx.ext.duration',
|
||||
'sphinx.ext.autosummary',
|
||||
'sphinx.ext.napoleon',]
|
||||
templates_path = ['_templates']
|
||||
exclude_patterns = []
|
||||
|
||||
# -- Options for HTML output -------------------------------------------------
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
|
||||
|
||||
html_theme = 'furo'
|
||||
html_static_path = ['_static']
|
@ -0,0 +1,103 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Configuration and presets
|
||||
=========================
|
||||
|
||||
There is an option to input the filter series as a **preset** from JSON configuration file.
|
||||
Here the presets are stored and are ready to be used whenever needed. You can usehow many filters you need as long as you like the output.
|
||||
It is therefore highly recommended to check the output after every preset change.
|
||||
|
||||
Filter used in the example above is listed bellow, along with the general form of configuration file.
|
||||
|
||||
.. raw:: html
|
||||
|
||||
<style>
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
th, td {
|
||||
padding: 8px;
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
.code {
|
||||
font-family: 'Courier New', monospace;
|
||||
background-color: #f5f5f5;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.language-json {
|
||||
color: #333;
|
||||
}
|
||||
</style>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>General format</th>
|
||||
<th>Working example</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<pre><code class="language-json">
|
||||
{
|
||||
"preset": [
|
||||
{
|
||||
"name": "filter_name",
|
||||
"parameter": value,
|
||||
"parameter": value
|
||||
},
|
||||
{
|
||||
"name": "filter_name",
|
||||
"parameter": value
|
||||
}
|
||||
],
|
||||
"preset": [
|
||||
...
|
||||
]
|
||||
...
|
||||
}
|
||||
</code></pre>
|
||||
</td>
|
||||
<td>
|
||||
<pre><code class="language-json">
|
||||
{
|
||||
"git_example": [
|
||||
{
|
||||
"name": "denoise_tv_chambolle",
|
||||
"weight": 0.01,
|
||||
"iterations": 1
|
||||
},
|
||||
{
|
||||
"name": "median",
|
||||
"ksize": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
</code></pre>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
To avoid accidental loss of information caused by modifying presets that have been used to generate stl files,
|
||||
these presets are stored inside a JSON file **db.json**.
|
||||
|
||||
This file serves as a simple database for storing presets, stored presets are modified by adding generated hash of all the filters in that preset.There is also an option to save current command line setting as a preset using -d switch and it's new name:
|
@ -0,0 +1,7 @@
|
||||
config\_parser module
|
||||
=====================
|
||||
|
||||
.. automodule:: config_parser
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
@ -0,0 +1,80 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Available filters with parameters
|
||||
=================================
|
||||
|
||||
Overview of all implemented filters and their parameters with descriptions is listed below.
|
||||
|
||||
* **median blur**
|
||||
|
||||
* *ksize* (int) - Kernel size, determines how large of an area the filter processes.
|
||||
|
||||
* **gaussian blur**
|
||||
|
||||
* *sigma* (int) - Gaussian kernel standart deviation, determines the weight of further pixels on the currently processed pixel.
|
||||
|
||||
* **bilateral blur**
|
||||
|
||||
* *diameter* (int) - Diameter of pixel neighborhood used for filtering.
|
||||
* *sigmaColor* (int) - Determines the weight of pixels of different color.
|
||||
* *sigmaSpace* (int) - Determines the weight of further pixels.
|
||||
|
||||
* **bilateral_scikit**
|
||||
|
||||
* *sigmaColor* (float) - Determines the weight of pixels of different color.
|
||||
* *sigmaSpace* (float) - Determines the weight of further pixels.
|
||||
|
||||
* **nlmeans** (non-local means)
|
||||
|
||||
* *patch_size* (int) - Size of patches used for denoising.
|
||||
* *patch_distance* (int) - Distance in pixels where to search for patches.
|
||||
* *h* (float) - Cut-off distance, higher means more smoothed image.
|
||||
|
||||
* **total_variation**
|
||||
|
||||
* *weight* (float) - Denoising weight, determines how much the image will be denoised.
|
||||
|
||||
* **block_match**
|
||||
|
||||
* *sigma* (float)- Standart deviation
|
||||
|
||||
* **unsharp_mask_scikit**
|
||||
|
||||
* *radius* (int) - Radius of the gaussian filter.
|
||||
* *amount* (float) - Strength of the unsharp mask, determines how much of the mask will be used for filtering.
|
||||
|
||||
* **farid**
|
||||
|
||||
* **meijering**
|
||||
|
||||
* **sato**
|
||||
|
||||
* **hessian**
|
||||
|
||||
* *sigmas* (float) - Standart deviations
|
||||
|
||||
* **invert**
|
||||
|
||||
* **scale_values**
|
||||
|
||||
* **binarize**
|
||||
|
||||
* *threshold* (int) - Value to cut differentiate pixels.
|
||||
|
||||
* **binarize_otsu**
|
||||
|
||||
* **add_margin**
|
||||
|
||||
* *margin* (int) - Number of pixels to add to the sides of the image.
|
||||
* *color* (int) - Color value of newly added pixels.
|
||||
|
||||
* **erode**
|
||||
|
||||
* *kernel* (numpy matrix) - Shape of the kernel used to erode image.
|
||||
|
||||
* **dilate**
|
||||
|
||||
* *kernel* (numpy matrix)- Shape of the kernel used to dilate image.
|
@ -0,0 +1,37 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Filtering images
|
||||
================
|
||||
|
||||
Once all the requirements are installed, the application is ready to use.
|
||||
Fingerprint sample is located in res/examples, its name is Palec_P4.tif.
|
||||
|
||||
* You will need to enter the virtual enviroment every time you want to use the application.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source .venv/bin/activate
|
||||
|
||||
* The application requires **input** and **output filenames** including path from the root project directory, **dpi** and **filter list** as shown bellow.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
(.venv)$ python3 src/main.py input_file output_file dpi filters
|
||||
|
||||
There are two ways to enter the filters:
|
||||
|
||||
1. manually list all filter names and their parameters on the **command line**:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
(.venv)$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_cline.png 600 total_variation weight=0.15 median ksize=5
|
||||
|
||||
|
||||
2. load them from preset in a JSON **configuration file**, that can be used to tune and modify existing presets, or create new ones:
|
||||
|
||||
.. code-block::
|
||||
|
||||
(.venv)$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json git_example
|
@ -0,0 +1,7 @@
|
||||
filters module
|
||||
==============
|
||||
|
||||
.. automodule:: filters
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
@ -0,0 +1,70 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Generating fingerprint models
|
||||
=============================
|
||||
|
||||
Generating curved fingerprint model
|
||||
-----------------------------------
|
||||
|
||||
It is possible to generate stl model using the `--stl` switch. This requires more parameters, first of which is the type of generated fingerprint.
|
||||
|
||||
If the mode is set to `c`, the output model will be a curved finger model, with optional parameters following the filename controlling its shape.
|
||||
|
||||
First optional parameter is papilar line height `height_line`, second is thickness of the model `height_base`,
|
||||
third the rate of curvature along x axis `curv_rate_x` and the third is the rate of curvature along y axis `curv_rate_y`.
|
||||
|
||||
* General form for curved stl generation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 src/main.py input_file output_file dpi --config config_file preset --stl c height_line height_base curvature_x curvature_y
|
||||
|
||||
* Working example curved stl generation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config config/config.json git_example --stl c 2 10 2 2
|
||||
|
||||
Generating planar finger model
|
||||
-----------------------------------
|
||||
|
||||
Using `p` mode makes the generated fingerprint model flat.
|
||||
Optional parameters are height of the papilar lines and base thickness.
|
||||
|
||||
* General command form for planar stl generation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 src/main.py input_file output_file dpi --config config_file preset --stl p height_line height_base
|
||||
|
||||
* Working example of planar stl generation:
|
||||
|
||||
.. code-block::
|
||||
|
||||
$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config config/config.json git_example --stl p 2 10
|
||||
|
||||
Mapping fingerprint to existing finger model
|
||||
--------------------------------------------
|
||||
|
||||
|
||||
Using `m` mode modifies the preexisting finger model to contain fingerprint.
|
||||
First optional parameter is papilar line height `height_line`, second is the number of iterations `iter` to make the finger mesh denser. Higher number of itertions results in denser finger mesh and better result.
|
||||
The next three parameters are axis offsets for the finger, `finger_x`, `finger_y`, `finger_z`.
|
||||
These control the location of the finger. They need to be set only if the user wants to move core of the print closer to the center of the finger model. The last parameter `finger_model` allows the user to choose custom finger model.
|
||||
|
||||
* General command form for mapped stl generation
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 src/main.py input_file output_file dpi --config config_file preset --stl m height_line iter finger_x finger_y finger_z finger_model
|
||||
|
||||
* Working example of finger mapping
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4.png 600 --config conf/conf.json ridge --stl m 0.2 2 0 0 0 res/finger_backup/finger-mod.stl
|
||||
|
||||
|
@ -0,0 +1,32 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Generování 3D modelu otisku prstu
|
||||
=================================
|
||||
This application has been developed as a part of bachelor's thesis at Brno University of Technology - Faculty of Information Technology.
|
||||
The topic of this thesis was **Generating a 3D Fingerprint Model** from input fingerprint image.
|
||||
|
||||
This application consists of two main parts. The first part of the application uses custom filter library to apply image filters to enhance fingerprint images.
|
||||
This library consists of several filters imported from image processing modules.
|
||||
|
||||
The second part uses the processed image to make a 3D model of the fingerprint.
|
||||
The model can then be used to print an accurate representation of human fingerprint using a 3D printer.
|
||||
This model can either be planar, curved or mapped to a finger model.
|
||||
|
||||
.. note::
|
||||
Project still under active development.
|
||||
|
||||
Contents
|
||||
--------
|
||||
|
||||
.. toctree::
|
||||
installation
|
||||
filtering
|
||||
config
|
||||
filter_list
|
||||
generation
|
||||
usage
|
||||
troubleshooting
|
||||
modules
|
@ -0,0 +1,66 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
The application has only been tested on Ubuntu gnu/linux machines.
|
||||
It should however be possible to use it in on most linux distributions, WSLs and also virtual machines of most linux distributions.
|
||||
|
||||
To start off, you need these to succesfully use the application.
|
||||
|
||||
* **python** version 3.10 is a requirement might work on earlier python 3 versions:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo apt install python3.10
|
||||
|
||||
* **virtualenv** package for virtual enviroment creation, other packages are installed automatically later:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ pip install virtualenv
|
||||
|
||||
Getting started
|
||||
---------------
|
||||
|
||||
This will install the application and its components into the Documents directory.
|
||||
It will also install several required python packages, including venv, which is used to create a virtual enviroment.
|
||||
|
||||
1. Go to a suitable installation folder, for example **Documents**:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /home/username/Documents
|
||||
|
||||
2. Clone the repository to a suitable directory, for example:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone ssh://git@strade.fit.vutbr.cz:3022/xlanro00/BP_DP-xlanro00.git
|
||||
|
||||
3. Go inside cloned directory:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd BP_DP-xlanro00
|
||||
|
||||
4. Create and enter the virtual enviroment:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ virtualenv .venv && source .venv/bin/activate
|
||||
|
||||
5. Install required python modules from **requirements.txt**:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
(.venv)$ pip install -r requirements.txt
|
||||
|
||||
6. Now, you are all set to run the application.
|
||||
Examples of how to do this are listedin the section bellow.
|
@ -0,0 +1,7 @@
|
||||
log module
|
||||
==========
|
||||
|
||||
.. automodule:: log
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
@ -0,0 +1,118 @@
|
||||
main module
|
||||
===========
|
||||
|
||||
Main file of the project, contains filtering and stl generation functions
|
||||
|
||||
.. moduleauthor:: xlanro00
|
||||
|
||||
.. py:class:: main.fingerprint_app()
|
||||
|
||||
Main class for the application.
|
||||
|
||||
.. py:function:: main.__init__()
|
||||
|
||||
.. py:function:: main.parse_arguments()
|
||||
|
||||
Parse arguments from command line using argparse library.
|
||||
|
||||
.. py:function:: main.parse_stl()
|
||||
|
||||
Parse arguments for stl generation.
|
||||
|
||||
.. py:function:: main.run_filtering()
|
||||
|
||||
Read input file, store as numpy.array, uint8, grayscale.
|
||||
Call function to apply the filters and a function to save it to output file.
|
||||
|
||||
.. py:function:: main.get_empty_figure()
|
||||
|
||||
Return empty figure with one ax, which has dimensions of the input image.
|
||||
|
||||
.. py:function:: main.mirror_image()
|
||||
|
||||
Mirror image using opencv.
|
||||
Should be used to cancel implicit mirroring.
|
||||
|
||||
.. py:function:: main.apply_filters()
|
||||
|
||||
Apply filters to image one by one.
|
||||
In case none were given, pass and save original image to the output file.
|
||||
|
||||
.. py:function:: main.save_image()
|
||||
|
||||
Save processed image to the output file.
|
||||
|
||||
:param fig: figure used to render image.
|
||||
:param ax: Ax used to render image.
|
||||
|
||||
.. py:function:: main.run_stl()
|
||||
|
||||
Choose correct generation code based on mode.
|
||||
|
||||
.. py:function:: main.prepare_heightmap()
|
||||
|
||||
Scale image values to get values from 0 to 255.
|
||||
Check validity of dimension parameters.
|
||||
Then compute base and papilar lines height.
|
||||
Prepare meshgrid, array which later serves to store point coordinates.
|
||||
|
||||
.. py:function:: main.write_stl_header()
|
||||
|
||||
Write parameter string to stl header.
|
||||
This header is 80 bytes long, so the data needs to be shortened to fit.
|
||||
If the parameter string is too long, a warning is printed and the data is truncated.
|
||||
|
||||
.. py:function:: main.get_ID()
|
||||
|
||||
Get a unique ID for the model, which is used in filename and on the model backside.
|
||||
Also create parameter string for stl header, which is used to create ID using hash function MD5.
|
||||
|
||||
.. py:function:: main.append_faces()
|
||||
|
||||
Add faces to the list of faces.
|
||||
|
||||
:param faces: Array with faces.
|
||||
:param c: Indices of currently added faces.
|
||||
|
||||
.. py:function:: main.engrave_text()
|
||||
|
||||
Engrave text on the back of the model.
|
||||
Create an empty image, fill it with color and draw text on it.
|
||||
|
||||
:param bottom_vert_arr: Bottom vertex array.
|
||||
:param top_vert_arr: Top vertex array
|
||||
|
||||
.. py:function:: main.create_stl_mesh()
|
||||
|
||||
Create mesh from faces and vertices arrays.
|
||||
|
||||
:param faces: Vector of face indices
|
||||
:param vertices: Vector of vertices
|
||||
|
||||
.. py:function:: main.create_faces()
|
||||
|
||||
Create faces for the model.
|
||||
Iterate over all vertices, append to vector and create faces from indices.
|
||||
|
||||
:param bottom_vert_arr: Bottom vertex array.
|
||||
:param top_vert_arr: Top vertex array
|
||||
|
||||
.. py:function:: main.make_stl_planar()
|
||||
|
||||
Create vertices from meshgrid, add z coordinates from processed image heightmap.
|
||||
Create faces from vertex indices.
|
||||
|
||||
.. py:function:: main.make_stl_curved()
|
||||
|
||||
Compute curved surface offset.
|
||||
Create vertices from meshgrid, add z coordinates from processed image heightmap.
|
||||
Create faces from vertex indices.
|
||||
|
||||
.. py:function:: main.make_stl_map()
|
||||
|
||||
Map fingerprint to a given finger model.
|
||||
|
||||
.. py:function:: main.save_stl()
|
||||
|
||||
Save final mesh to stl file.
|
||||
|
@ -0,0 +1,11 @@
|
||||
src
|
||||
===
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 4
|
||||
|
||||
config_parser
|
||||
filters
|
||||
log
|
||||
main
|
||||
stl_parser
|
@ -0,0 +1,11 @@
|
||||
stl\_parser module
|
||||
==================
|
||||
|
||||
Utility for parsing STL file header
|
||||
|
||||
.. moduleauthor:: xlanro00
|
||||
|
||||
.. py:function:: stl_parser.stl_parser()
|
||||
|
||||
Parses stl file header.
|
||||
Prints command for running main.py with preformatted arguments.
|
@ -0,0 +1,126 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Troubleshooting
|
||||
===============
|
||||
|
||||
.. raw:: html
|
||||
|
||||
<style>
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
th, td {
|
||||
padding: 8px;
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
.code {
|
||||
font-family: 'Courier New', monospace;
|
||||
background-color: #f5f5f5;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.language-json {
|
||||
color: #333;
|
||||
}
|
||||
</style>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Error message</th>
|
||||
<th>Solution</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
main.py: error: the following arguments are required: input_file, output_file, dpi, filters
|
||||
</td>
|
||||
<td>
|
||||
You probably forgot to include some of the required arguments.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Input file res/Palec_P14.tif does not exist
|
||||
</td>
|
||||
<td>
|
||||
The file you want to process does not exist, check the filename again.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Config file not found
|
||||
</td>
|
||||
<td>
|
||||
The config file you want to load config from does not exist, check the filename again.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Preset not found in config file
|
||||
</td>
|
||||
<td>
|
||||
The preset is not present in selected config file, check the file again or select the correct config file.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Filter undefined_filter not found
|
||||
</td>
|
||||
<td>
|
||||
One of the filters from command line is not defined in the library, check its name.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Unrecognized generation mode
|
||||
</td>
|
||||
<td>
|
||||
The first parameter of stl generation should be p, c or m, check it again.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Line depth must be less than plate thickness
|
||||
</td>
|
||||
<td>
|
||||
When generating a cast, the depth must be less than the base plate thckness, otherwise it would have holes on the other side.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Depth of plate height must be positive
|
||||
</td>
|
||||
<td>
|
||||
Cannot generate negative base plate thickness, check order of arguments.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Base and line height must both be positive
|
||||
</td>
|
||||
<td>
|
||||
In curved generation any negative argument is an error, casts are only for planar mode.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ERROR: Fingerprint image is outside of the finger model
|
||||
</td>
|
||||
<td>
|
||||
Outside of range of the finger, fingerprint cannot be mapped to nothing. Try to change finger_x, finger_y and finger_z parameters.
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
@ -0,0 +1,44 @@
|
||||
.. Generování 3D modelu otisku prstu documentation master file, created by
|
||||
sphinx-quickstart on Fri May 5 21:01:20 2023.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
When in doubt, you can always check the help with:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 src/main.py --help
|
||||
|
||||
Which will print out the following message.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ usage: main.py [-h] [-m | --mirror | --no-mirror] input_file
|
||||
output_file dpi ([-c | --config config_file preset] |
|
||||
[filters ...]) [-s | --stl_file p height_line height_base |
|
||||
--stl_file c height_line height_base curv_rate_x curv_rate_y |
|
||||
--stl m height_line iter finger_x finger_y finger_z finger_model]
|
||||
[-d | --database database_filename]
|
||||
|
||||
Program for processing a 2D image into 3D fingerprint.
|
||||
|
||||
positional arguments:
|
||||
input_file input file path
|
||||
output_file output file path
|
||||
dpi dpi of used scanner
|
||||
filters list of filter names and their parameters in form
|
||||
[filter_name1 param1=value
|
||||
param2=value filter_name2 param1=value...]
|
||||
|
||||
options:
|
||||
-h, --help show this help message and exit
|
||||
-m, --mirror, --no-mirror
|
||||
switch to mirror input image
|
||||
-s [STL_FILE ...], --stl_file [STL_FILE ...]
|
||||
create stl model from processed image
|
||||
-c CONFIG CONFIG, --config CONFIG CONFIG
|
||||
pair: name of the config file with presets,
|
||||
name of the preset
|
Loading…
Reference in new issue