pyntcloud is a Python library for working with 3D point clouds.

Overview

Making point clouds fun again

LGTM Code quality Github Actions C.I. Documentation Status Launch Binder

pyntcloud logo

pyntcloud is a Python 3 library for working with 3D point clouds leveraging the power of the Python scientific stack.

Installation

conda install pyntcloud -c conda-forge

Or:

pip install pyntcloud

Quick Overview

You can access most of pyntcloud's functionality from its core class: PyntCloud.

With PyntCloud you can perform complex 3D processing operations with minimum lines of code. For example you can:

  • Load a PLY point cloud from disk.
  • Add 3 new scalar fields by converting RGB to HSV.
  • Build a grid of voxels from the point cloud.
  • Build a new point cloud keeping only the nearest point to each occupied voxel center.
  • Save the new point cloud in numpy's NPZ format.

With the following concise code:

from pyntcloud import PyntCloud

cloud = PyntCloud.from_file("some_file.ply")

cloud.add_scalar_field("hsv")

voxelgrid_id = cloud.add_structure("voxelgrid", n_x=32, n_y=32, n_z=32)

new_cloud = cloud.get_sample("voxelgrid_nearest", voxelgrid_id=voxelgrid_id, as_PyntCloud=True)

new_cloud.to_file("out_file.npz")

Integration with other libraries

pyntcloud offers seamless integration with other 3D processing libraries.

You can create / convert PyntCloud instances from / to many 3D processing libraries using the from_instance / to_instance methods:

import open3d as o3d
from pyntcloud import PyntCloud

# FROM Open3D
original_triangle_mesh = o3d.io.read_triangle_mesh("diamond.ply")
cloud = PyntCloud.from_instance("open3d", original_triangle_mesh)

# TO Open3D
cloud = PyntCloud.from_file("diamond.ply")
converted_triangle_mesh = cloud.to_instance("open3d", mesh=True)  # mesh=True by default
import pyvista as pv
from pyntcloud import PyntCloud

# FROM PyVista
original_point_cloud = pv.read("diamond.ply")
cloud = PyntCloud.from_instance("pyvista", original_point_cloud)

# TO PyVista
cloud = PyntCloud.from_file("diamond.ply")
converted_triangle_mesh = cloud.to_instance("pyvista", mesh=True)
Comments
  • Package Missing in osx-64 Channels

    Package Missing in osx-64 Channels

    Hi,

    I am using Anaconda on an OSX-64 machine. While I was trying to create the pyntcloud environment with the enviroment.yml, it prompted the following error:

    NoPackagesFoundError: Package missing in current osx-64 channels: 
      - gst-plugins-base 1.8.0 0
    

    Do you know how to solve this?

    Thanks!

    opened by timzhang642 13
  • New scalar field: Normals

    New scalar field: Normals

    opened by daavoo 11
  • the method plot() shows a black iframe

    the method plot() shows a black iframe

    I seem to have a problem with the .plot() method below is a screeshot of what I get running the Basic_Numpy_Plotting example

    cattura

    I tried Chrome and Firefox hoping it was browser-related but still no luck, any ideas?

    Bug 
    opened by cicobalico 10
  • Bounding Box Filter

    Bounding Box Filter

    I've noticed that the bounding box filter does not work for the z axis. I've got it work on x and y but for some reason it will not apply to the z direction. Any thoughts on why this is happening or what im doing wrong?

    opened by threerivers3d-jc 9
  • Seeing plots in Jupyter using QuickStart file

    Seeing plots in Jupyter using QuickStart file

    Hola! Great job with this library! I'm just getting started using it and it's definitely going to be really useful for my work.

    I went through most of the issues and I see that there's been similar issues to what I'm getting with the .plot() function. I've tried those solutions but just haven't been able to figure it out yet.

    I'm running your QuickStart file, and when I get to the first scene.plot() all I see is a black screen with the word 'screenshot' in an orange box in the top left and the logo in the middle of the screen. I'm using a Mac and Chrome. I have no clue where I should be looking and any help would be appreciated! Thanks!

    opened by nandoLidar 8
  • Loading obj file doesn't work for objects which do not only consist of triangles

    Loading obj file doesn't work for objects which do not only consist of triangles

    When I attempt to load a obj file, which has e.g. rectangles as facet pyntcloud crashes with an AssertionError within pandas:

    ---------------------------------------------------------------------------
    AssertionError                            Traceback (most recent call last)
    <ipython-input-36-170af64711ff> in <module>()
    ----> 1 obj.read_obj("/Users/johannes/test.obj")
    
    ~/anaconda3/envs/suction/lib/python3.6/site-packages/pyntcloud/io/obj.py in read_obj(filename)
         50     f = [re.split(r'\D+', x) for x in f]
         51 
    ---> 52     mesh = pd.DataFrame(f, dtype='i4', columns=mesh_columns)
         53     # start index at 0
         54     mesh -= 1
    
    ~/anaconda3/envs/suction/lib/python3.6/site-packages/pandas/core/frame.py in __init__(self, data, index, columns, dtype, copy)
        367                     if is_named_tuple(data[0]) and columns is None:
        368                         columns = data[0]._fields
    --> 369                     arrays, columns = _to_arrays(data, columns, dtype=dtype)
        370                     columns = _ensure_index(columns)
        371 
    
    ~/anaconda3/envs/suction/lib/python3.6/site-packages/pandas/core/frame.py in _to_arrays(data,     columns, coerce_float, dtype)
       6282     if isinstance(data[0], (list, tuple)):
       6283         return _list_to_arrays(data, columns, coerce_float=coerce_float,
    -> 6284                                dtype=dtype)
       6285     elif isinstance(data[0], collections.Mapping):
       6286         return _list_of_dict_to_arrays(data, columns,
    
    ~/anaconda3/envs/suction/lib/python3.6/site-packages/pandas/core/frame.py in _list_to_arrays(data, columns, coerce_float, dtype)
       6361         content = list(lib.to_object_array(data).T)
       6362     return _convert_object_array(content, columns, dtype=dtype,
    -> 6363                                  coerce_float=coerce_float)
       6364 
       6365 
    
    ~/anaconda3/envs/suction/lib/python3.6/site-packages/pandas/core/frame.py in _convert_object_array(content, columns, coerce_float, dtype)
       6418             # caller's responsibility to check for this...
       6419             raise AssertionError('%d columns passed, passed data had %s '
    -> 6420                                  'columns' % (len(columns), len(content)))
       6421 
       6422     # provide soft conversion of object dtypes
    
    AssertionError: 9 columns passed, passed data had 12 columns
    
    Bug Debate 
    opened by hildensia 8
  • Stripped Down Version for RPi Use [Request]

    Stripped Down Version for RPi Use [Request]

    Hi, This looks like it'd be the best solution to my problem but for the fact it requires Numba, which, if it is possible to install on the RPi, is very difficult. Any chance of creating a stripped down version? I've been on the hunt for a good while for a way to tessellate a point cloud.

    Feature Request 
    opened by AcrimoniousMirth 8
  • Refresh plot

    Refresh plot

    Hi,

    Is it possible to refresh the point cloud plot? i.e. displaying a video of point clouds whilst still being able to interact in the browser and changing views? Alternatively is it possible to take PNGs rather than HTMLs ?

    Thanks!

    Feature Request 
    opened by fferroni 8
  • Issue with plot() in Jupyter Lab

    Issue with plot() in Jupyter Lab

    I know this must be frustrating or I might have done something very stupid but I am not seeing any error message and when I run the plot() function I see

    Renderer(camera=PerspectiveCamera(aspect=1.6, fov=90.0, position=(135.3456573486328, 9146.374328613281, 41812.…

    HBox(children=(Label(value='Background color:'), ColorPicker(value='black'), Label(value='Point size:'), Float…

    instead of the actual render. I tried staring a simple server too. I am working on Chrome for Ubuntu 16.04 and python 3.5.

    Bug 
    opened by ShivendraAgrawal 7
  • 2D Snapshot

    2D Snapshot

    Is there a way to get a single, fixed, 2D snapshot of the point-cloud? I'm having some trouble embedding the IFrame created by plot in Google's Collaboratory - localhost refused to connect. A static snapshot would help, even if it is not interactive.

    opened by dorodnic 7
  • could you help out converting it to .obj, please?

    could you help out converting it to .obj, please?

    https://storage.googleapis.com/nvidia-dev/113620.ply At my end I either get the points lost or the color lost with conversion `[GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information.

    from pyntcloud import PyntCloud diamond = PyntCloud.from_file("cloud.ply") convex_hull_id = diamond.add_structure("convex_hull") convex_hull = diamond.structures[convex_hull_id] diamond.to_file("diamond_hull.obj", also_save=["mesh"])`

    Feature Request Question 
    opened by AndreV84 6
  • kdtree radius search not working

    kdtree radius search not working

    Describe the bug When running radius search on my point cloud, I get an error:

    File "D:\repos\scripts\venv\lib\site-packages\pyntcloud\core_class.py", line 590, in get_neighbors return r_neighbors(kdtree, r) File "D:\repos\scripts\venv\lib\site-packages\pyntcloud\neighbors\r_neighbors.py", line 21, in r_neighbors return np.array(kdtree.query_ball_tree(kdtree, r)) ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (5342,) + inhomogeneous part.`

    k-neighbor search works as expected.

    To Reproduce My code to reproduce the bug:

    cloud = PyntCloud.from_file(pc_path) kdtree_id = cloud.add_structure("kdtree") r_neighbors = cloud.get_neighbors( r=5, kdtree=kdtree_id)

    Desktop (please complete the following information):

    • OS: Win 10
    • pyntcloud: 0.3.1
    • python 3.9
    opened by tholzmann 1
  • Add CodeQL workflow for GitHub code scanning

    Add CodeQL workflow for GitHub code scanning

    Hi daavoo/pyntcloud!

    This is a one-off automatically generated pull request from LGTM.com :robot:. You might have heard that we’ve integrated LGTM’s underlying CodeQL analysis engine natively into GitHub. The result is GitHub code scanning!

    With LGTM fully integrated into code scanning, we are focused on improving CodeQL within the native GitHub code scanning experience. In order to take advantage of current and future improvements to our analysis capabilities, we suggest you enable code scanning on your repository. Please take a look at our blog post for more information.

    This pull request enables code scanning by adding an auto-generated codeql.yml workflow file for GitHub Actions to your repository — take a look! We tested it before opening this pull request, so all should be working :heavy_check_mark:. In fact, you might already have seen some alerts appear on this pull request!

    Where needed and if possible, we’ve adjusted the configuration to the needs of your particular repository. But of course, you should feel free to tweak it further! Check this page for detailed documentation.

    Questions? Check out the FAQ below!

    FAQ

    Click here to expand the FAQ section

    How often will the code scanning analysis run?

    By default, code scanning will trigger a scan with the CodeQL engine on the following events:

    • On every pull request — to flag up potential security problems for you to investigate before merging a PR.
    • On every push to your default branch and other protected branches — this keeps the analysis results on your repository’s Security tab up to date.
    • Once a week at a fixed time — to make sure you benefit from the latest updated security analysis even when no code was committed or PRs were opened.

    What will this cost?

    Nothing! The CodeQL engine will run inside GitHub Actions, making use of your unlimited free compute minutes for public repositories.

    What types of problems does CodeQL find?

    The CodeQL engine that powers GitHub code scanning is the exact same engine that powers LGTM.com. The exact set of rules has been tweaked slightly, but you should see almost exactly the same types of alerts as you were used to on LGTM.com: we’ve enabled the security-and-quality query suite for you.

    How do I upgrade my CodeQL engine?

    No need! New versions of the CodeQL analysis are constantly deployed on GitHub.com; your repository will automatically benefit from the most recently released version.

    The analysis doesn’t seem to be working

    If you get an error in GitHub Actions that indicates that CodeQL wasn’t able to analyze your code, please follow the instructions here to debug the analysis.

    How do I disable LGTM.com?

    If you have LGTM’s automatic pull request analysis enabled, then you can follow these steps to disable the LGTM pull request analysis. You don’t actually need to remove your repository from LGTM.com; it will automatically be removed in the next few months as part of the deprecation of LGTM.com (more info here).

    Which source code hosting platforms does code scanning support?

    GitHub code scanning is deeply integrated within GitHub itself. If you’d like to scan source code that is hosted elsewhere, we suggest that you create a mirror of that code on GitHub.

    How do I know this PR is legitimate?

    This PR is filed by the official LGTM.com GitHub App, in line with the deprecation timeline that was announced on the official GitHub Blog. The proposed GitHub Action workflow uses the official open source GitHub CodeQL Action. If you have any other questions or concerns, please join the discussion here in the official GitHub community!

    I have another question / how do I get in touch?

    Please join the discussion here to ask further questions and send us suggestions!

    opened by lgtm-com[bot] 0
  • conda-script.py: error: unrecognized arguments: nltk - Jupiter Notebook

    conda-script.py: error: unrecognized arguments: nltk - Jupiter Notebook

    Hello everyone. I am trying to download nltk into my notebook but get an error message everytime.

    Here is what I input conda install -c conda-forge nltk

    Here is the error message I see everytime. Note: you may need to restart the kernel to use updated packages. usage: conda-script.py [-h] [-V] command ... conda-script.py: error: unrecognized arguments: nltk

    I have tried reseting the Kernal, closing the program and trying on a blank notebook but nothing seems to work. Let me know what I can do to fix this!!! Thanks

    opened by mac-1117 0
  • The logic of `io.las.read_las_with_laspy()` may not meet the las data specification.

    The logic of `io.las.read_las_with_laspy()` may not meet the las data specification.

    Hello. Thanks for the nice library! I think I may have found a bug, could you please check?

    Describe the bug The logic of io.las.read_las_with_laspy() may not meet the las data specification. https://github.com/daavoo/pyntcloud/blob/c9dcf59eacbec33de0279899a43fe73c5c094b09/pyntcloud/io/las.py#L46

    To Reproduce Steps to reproduce the behavior:

    • Download point cloud data (.las) of Kakegawa Castle.
      • https://www.geospatial.jp/ckan/dataset/kakegawacastle/resource/61d02b61-3a44-4a5b-b263-814c6aa23551
      • Please note that the data is 2GB in zip file and 5GB after unzipping.
      • The file name is in Japanese, so please be careful of the character encoding.
      • Kakegawa Castle is https://en.wikipedia.org/wiki/Kakegawa_Castle
    • Feel free to rename the file as you wish. Here, the file name is KakegawaCastle.las.
    • Execute the following code to get the xyz coordinates.
      • You will find 190 million points.
    from pyntcloud import PyntCloud
    cloud = PyntCloud.from_file(". /KakegawaCastle.las")
    cloud.points
    # x y z intensity bit_fields raw_classification scan_angle_rank user_data point_source_id red green blue
    # 0 37.910053 71.114777 28.936932 513 0 1 0 0 29 138 122 127
    # 1 37.690052 75.975777 28.918930 2309 0 1 0 0 29 15 5 14
    # 2 38.465054 71.277779 33.523930 64149 0 1 0 0 29 44 15 35
    # 3 32.406052 78.586777 30.808931 19758 0 1 0 0 29 99 54 59
    # 4 30.372051 86.346779 30.809931 257 0 1 0 0 29 107 56 55
    # ...	...	...	...	...	...	...	...	...	...	...	...	...
    # 192366074 151.807999 172.604996 17.660999 50886 0 1 0 0 29 198 198 190
    # 192366075 152.425003 173.162994 16.458000 25186 0 1 0 0 29 101 96 96
    # 192366076 152.126007 172.781998 16.620001 30840 0 1 0 0 29 121 120 116
    # 192366077 152.085007 172.682999 17.497000 40863 0 1 0 0 29 166 157 146
    # 192366078 151.832993 173.360001 16.886000 31868 0 1 0 0 29 132 121 115
    # 192366079 rows × 12 columns
    
    • At this time, the first point in column x is 37.910053
    • If you run the following command, the data should look like this.
      • pdal info: https://pdal.io/apps/info.html
    % pdal info /KakegawaCastle.las -p 0
    {
      "file_size": 5001518281,
      "filename": "KakegawaCastle.las",
      "now": "2022-06-14T09:39:43+0900",
      "pdal_version": "2.4.0 (git-version: Release)",
      "points":
      {
        "point":
        {
          "Blue": 32640,
          "Classification": 1,
          "EdgeOfFlightLine": 0,
          "Green": 31365,
          "Intensity": 513,
          "NumberOfReturns": 0,
          "PointId": 0,
          "PointSourceId": 29,
          "Red": 35445,
          "ReturnNumber": 0,
          "ScanAngleRank": 0,
          "ScanDirectionFlag": 0,
          "UserData": 0,
          "X": -44490.84295,
          "Y": -135781.1752,
          "Z": 54.58493098
        }
      }
      "reader": "readers.las"
    }
    
    • The value of x is -44490.84295, which is different from the value output by pyntcloud!
    • The above value can be calculated from the data output when using the following laspy.
    import laspy
    las = laspy.read(". /KakegawaCastle.las")
    header = las.header
    
    # first x point value: 531578298
    x_point = las.X[0]
    
    # x scale: 7.131602618438667e-08 -> 0.0000007
    x_scale = header.x_scale
    
    # x offset: -44528.753
    x_offset = header.x_offset
    
    # x_coordinate output from above variables: -44490.842948180776
    real_coordinate_x = (x_point * x_scale) + x_offset
    
    • The value calculated from laspy based on EPSG:6676 is indeed at Kakegawa Castle!
      • https://www.google.co.jp/maps/place/34%C2%B046'30.3%22N+138%C2%B000'50.1%22E/@34.775077,138.0117243,17z/data=!3m1!4b1!4m5!3m4!1s0x0:0x2ce21e9ef0b19341!8m2!3d34.775077!4d138.013913?hl=ja
    • But in read_las_with_laspy(), the logic is as follows, and the offset values are not added https://github.com/daavoo/pyntcloud/blob/c9dcf59eacbec33de0279899a43fe73c5c094b09/pyntcloud/io/las.py#L55

    Expected behavior Offset values are taken into account for the xyz coordinates of the DataFrame.

    Screenshots Does not exist.

    Desktop (please complete the following information):

    • OS: macOS Monterey v12.4
    • Browser: Does not used.
    • Version
    Conda -V
    conda 4.12.0
    ❯ conda list | grep pyntcloud
    pyntcloud 0.3.0 pyhd8ed1ab_0 conda-forge
    

    Additional context If the above context looks OK, shall I create a PullRequest?

    Bug 
    opened by nokonoko1203 3
Releases(v0.3.1)
  • v0.3.1(Jul 31, 2022)

    What's Changed

    • Use KDTree instead of cKDTree by @daavoo in https://github.com/daavoo/pyntcloud/pull/339
    • Make value take offsets by @nokonoko1203 in https://github.com/daavoo/pyntcloud/pull/335

    New Contributors

    • @nokonoko1203 made their first contribution in https://github.com/daavoo/pyntcloud/pull/335

    Full Changelog: https://github.com/daavoo/pyntcloud/compare/v0.3.0...v0.3.1

    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(May 27, 2022)

    What's Changed

    • Upgrade the api to laspy 2.0 by @SBCV in https://github.com/daavoo/pyntcloud/pull/330

    Full Changelog: https://github.com/daavoo/pyntcloud/compare/v0.2.0...v0.3.0

    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Apr 15, 2022)

    What's Changed

    • fix python 10 ci by @fcakyon in https://github.com/daavoo/pyntcloud/pull/322
    • filters: kdtree: Remove prints by @daavoo in https://github.com/daavoo/pyntcloud/pull/325
    • PyVista: point_arrays -> point_data by @banesullivan in https://github.com/daavoo/pyntcloud/pull/327

    New Contributors

    • @fcakyon made their first contribution in https://github.com/daavoo/pyntcloud/pull/322

    Full Changelog: https://github.com/daavoo/pyntcloud/compare/v0.1.6...v0.2.0

    Source code(tar.gz)
    Source code(zip)
  • v0.1.6(Jan 12, 2022)

    What's Changed

    • use raw string literal to address DeprecationWarning by @robin-wayve in https://github.com/daavoo/pyntcloud/pull/316
    • Add bool dtype support for PLY files by @Nicholas-Mitchell in https://github.com/daavoo/pyntcloud/pull/321

    New Contributors

    • @robin-wayve made their first contribution in https://github.com/daavoo/pyntcloud/pull/316

    Full Changelog: https://github.com/daavoo/pyntcloud/compare/v0.1.5...v0.1.6

    Source code(tar.gz)
    Source code(zip)
  • v0.1.5(Aug 14, 2021)

  • v0.1.4(Feb 17, 2021)

  • v0.1.3(Oct 13, 2020)

    Features

    • Add pythreejs voxelgrid plotting and voxel colors #280
    • Add support for laz files (#288)
    • Added support for pylas (#291)

    Bugfixes

    • Fix pyvista integration

    Other

    Minor updates to docs and code maintenance

    Source code(tar.gz)
    Source code(zip)
  • v0.1.1(Oct 7, 2019)

  • 0.1.0(Oct 4, 2019)

    Features

    • PyntCloud new methods: from_instance and to_instance for integration with other 3D processing libraries.

    PyVista and Open3D are currently supported.

    • Add GitHub actions workflow
    • Include License file in Manifest.in

    Bugfixes

    • Fix tests that were not being run in C.I.
    • Fix test_geometry failing tests
    Source code(tar.gz)
    Source code(zip)
  • v0.0.2(Sep 29, 2019)

  • v0.0.1(Jul 14, 2019)

Owner
David de la Iglesia Castro
Passionate about learning.
David de la Iglesia Castro
Links to awesome OCR projects

Awesome OCR This list contains links to great software tools and libraries and literature related to Optical Character Recognition (OCR). Contribution

Konstantin Baierer 2.2k Jan 02, 2023
An Implementation of the seglink alogrithm in paper Detecting Oriented Text in Natural Images by Linking Segments

Tips: A more recent scene text detection algorithm: PixelLink, has been implemented here: https://github.com/ZJULearning/pixel_link Contents: Introduc

dengdan 484 Dec 07, 2022
Thresholding-and-masking-using-OpenCV - Image Thresholding is used for image segmentation

Image Thresholding is used for image segmentation. From a grayscale image, thresholding can be used to create binary images. In thresholding we pick a threshold T.

Grace Ugochi Nneji 3 Feb 15, 2022
CNN+Attention+Seq2Seq

Attention_OCR CNN+Attention+Seq2Seq The model and its tensor transformation are shown in the figure below It is necessary ch_ train and ch_ test the p

Tsukinousag1 2 Jul 14, 2022
Document blur detection based on Laplacian operator and text detection.

Document Blur Detection For general blurred image, using the variance of Laplacian operator is a good solution. But as for the blur detection of docum

JoeyLr 5 Oct 20, 2022
MeshToGeotiff - A fast Python algorithm to convert a 3D mesh into a GeoTIFF

MeshToGeotiff - A fast Python algorithm to convert a 3D mesh into a GeoTIFF Python class for converting (very fast) 3D Meshes/Surfaces to Raster DEMs

8 Sep 10, 2022
Read-only mirror of https://gitlab.gnome.org/GNOME/ocrfeeder

================================= OCRFeeder - A Complete OCR Suite ================================= OCRFeeder is a complete Optical Character Recogn

GNOME Github Mirror 81 Dec 23, 2022
Lightning Fast Language Prediction 🚀

whatthelang Lightning Fast Language Prediction 🚀 Dependencies The dependencies can be installed using the requirements.txt file: $ pip install -r req

Indix 152 Oct 16, 2022
An advanced 2D image manipulation with features such as edge detection and image segmentation built using OpenCV

OpenCV-ToothPaint3-Advanced-Digital-Image-Editor This application named ‘Tooth Paint’ version TP_2020.3 (64-bit) or version 3 was developed within a w

JunHong 1 Nov 05, 2021
Comparison-of-OCR (KerasOCR, PyTesseract,EasyOCR)

Optical Character Recognition OCR (Optical Character Recognition) is a technology that enables the conversion of document types such as scanned paper

21 Dec 25, 2022
This is a GUI for scrapping PDFs with the help of optical character recognition making easier than ever to scrape PDFs.

pdf-scraper-with-ocr With this tool I am aiming to facilitate the work of those who need to scrape PDFs either by hand or using tools that doesn't imp

Jacobo José Guijarro Villalba 75 Oct 21, 2022
This repo contains a script that allows us to find range of colors in images using openCV, and then convert them into geo vectors.

Vectorizing color range This repo contains a script that allows us to find range of colors in images using openCV, and then convert them into geo vect

Development Seed 9 Jul 27, 2022
Program created with opencv that allows you to automatically count your repetitions on several fitness exercises.

Virtual partner of gym Description Program created with opencv that allows you to automatically count your repetitions on several fitness exercises li

1 Jan 04, 2022
Deskew is a command line tool for deskewing scanned text documents. It uses Hough transform to detect "text lines" in the image. As an output, you get an image rotated so that the lines are horizontal.

Deskew by Marek Mauder https://galfar.vevb.net/deskew https://github.com/galfar/deskew v1.30 2019-06-07 Overview Deskew is a command line tool for des

Marek Mauder 127 Dec 03, 2022
This is used to convert a string to an Image with Handwritten Characters.

Text-to-Handwriting-using-python This is used to convert a string to an Image with Handwritten Characters. text_to_handwriting(string: str, save_to: s

Akashdeep Mahata 3 Aug 15, 2022
Fine tuning keras-ocr python package with custom synthetic dataset from scratch

OCR-Pipeline-with-Keras The keras-ocr package generally consists of two parts: a Detector and a Recognizer: Detector is responsible for creating bound

Eugene 1 Jan 05, 2022
Make OpenCV camera loops less of a chore by skipping the boilerplate and getting right to the interesting stuff

camloop Forget the boilerplate from OpenCV camera loops and get to coding the interesting stuff Table of Contents Usage Install Quickstart More advanc

Gabriel Lefundes 9 Nov 12, 2021
Table Extraction Tool

Tree Structure - Table Extraction Fonduer has been successfully extended to perform information extraction from richly formatted data such as tables.

HazyResearch 88 Jun 02, 2022
PyNeuro is designed to connect NeuroSky's MindWave EEG device to Python and provide Callback functionality to provide data to your application in real time.

PyNeuro PyNeuro is designed to connect NeuroSky's MindWave EEG device to Python and provide Callback functionality to provide data to your application

Zach Wang 45 Dec 30, 2022
Write-ups for the SwissHackingChallenge2021 CTF.

SwissHackingChallenge 2021 : Write-ups This repository contains a collection of my write-ups for challenges solved during the SwissHackingChallenge (S

Julien Béguin 3 Jun 07, 2021