Git Product home page Git Product logo

chrono-photo's Introduction

My projects and featured contributions:

Modelling Developer tools
Arche — Go entity component system
Finam — Python model coupling framework
rs-ecs — Rust entity component system
git-graph — Clear Git graphs. See for yourself!
git-igitt — Interactive TUI version of git-graph
yarner — Literate Programming in Markdown
Command line apps Games
track — Personal (work) time tracking
dirstat — Analyze and visualize disk usage
xwrd — Anagrams and word matching tool
chrono-photo — Chrono-photography tool
Tiny World — Tiny, slow-paced world building game
Cataclysm-DDA — Post-apocalyptic survival game
Planetary Defense — Colonize and defend a planet
Graviton — Puzzle with unique gravity mechanics

chrono-photo's People

Contributors

mlange-42 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

chrono-photo's Issues

[Feature] Allow direct processing of video files

In addition to processing image series, allow direct processing of video files.

Problem: Didn't find any pure rust library for decoding videos. There are bindings for GStreamer, but that would probably make the deployment process more difficult.

Possible crates (bindings)

  • gstreamer
  • ffmpeg
  • libVLC

Possible crates (pure rust)

  • ?

Using test data, second image of the array "is not valid"

Trying to run it on Mac:

On OSx, from debug dir, and after generating test data, it fails to get second image of the folder:
./chrono-photo --debug --pattern test_data/generated/image-000*.jpg --output out.jpg

error: Found argument 'test_data/generated/image-00001.jpg' which wasn't expected, or isn't valid in this context

There's no problem with paths, as when I pass a single image as pattern argument, it builds OK the out.jpg file (generating same image as input, of course...):
./chrono-photo --debug --pattern test_data/generated/image-00000.jpg --output out.jpg

Maybe some problem with patterns and OSX?
Compilation worked without problems.

Unable to create output directory, if output has no directory

On OSX (not tested in Windows), crashes if output contains no dir path.
Some versions before it has no problem with it:


./chrono-photo --pattern "test_data/generated/image-000*.jpg" --output test.jpg

Temp directory: "/var/folders/bd/4nwq6clx0px9w6t5kgj70gl00000gn/T/chrono-photo"
Time-slicing 25 images
Total: 27742 kb in 192 files
Processing 192 time slices
Saving output... 
thread 'main' panicked at 'Unable to create output directory "": Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/main.rs:542:9

Instead, putting --output ./test.jpg works, but it's not very common. Also works OK puttin a dirname, because create it.
Problem is somewhere before create outputdir, should check if parent is empty or something like that.

[Feature] Support for 16 bit color band images

Particularly tiff...

Seems complicated to realize via generics (e.g. num_traits::PrimInt), as only u8 and u16 should be supported.

Requires help from someone with more Rust experience.

[Bug] Error reading time slices: "corrupt gzip stream does not have a matching checksum"

I got that error at one of the executions while processing a 540 image set.
Don't know if it's really a bug, or some problem with filesystem or temp directory...

0.4.2
Processing 540 time slices
████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 185/540
thread 'main' panicked at 'called Result::unwrap()on anErr value: Custom { kind: InvalidInput, error: "corrupt gzip stream does not have a matching checksum" }', src/streams.rs:188:28

[Feature] Multi-threading support

Multi-threading can be applied for time-slicing as well as actual processing.

  • Time-slicing

For time-slicing, it is only possible to process image rows in parallel, while processing images in parallel is not (easily) possible, since rows are successively appended to temporary files.

The speed gain may be limited, particularly for low resolution images. Further, parallel writing to streams may be a bottle neck?

  • Video frames

Calculating frames of a video is simple.

However, is increases memory usage.

  • Camera shake analysis

Parallelize over frames. Increases memory usage.

  • Processing

Processing itself could by parallel over image rows. However, this would require loading multiple temporary files into memory at the same time, which could be a problem for series of a really high number (really really high!) images.

Alternatively, processing of pixels in the same row could be done in parallel. The gain would be highest for large images, and particularly for large amounts of images in a series.

[Feature] Image stabilization / correct camera shake

It should be principally possible to correct for camera shake.

Would be computationally expensive, but should be possible.

Probably, pre-processing of all images is required before any time-slicing or processing.

[Feature] Control over time slicing / number of temporary files

Currently, images are converted to temporary time slices row by row. E.g., the first temp file contains the first row from every image.

The amount of pixels from each image going into one temp file could be user-controlled, to

  • increase: for better compression, less reading operations, and less temporary files
  • decrease: for less RAM usage during actual processing (for processing really huge numbers of images; > 100k!)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.