Giter Club home page Giter Club logo

Comments (13)

mid1221213 avatar mid1221213 commented on May 17, 2024 1

Is it the same issue?

I was facing the same issue (I am on Debian), installed random additional gst packages, which solved the issue for me. (Sorry, I've installed bunch of them, not able at the moment to pinpoint which one really solved the problem for me)

Indeed. The missing package to install was gstreamer1.0-python3-plugin-loader, thanks!

Now it works, but I'm limited to 5 images per second, because of the Fraction issue.

from webcam-filters.

maximevince avatar maximevince commented on May 17, 2024 1

Just FYI, same issue here:

webcam-filters --list-dev-caps /dev/video0
                    '/dev/video0' Capabilites                    
┏━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Media Type  ┃ Width ┃ Height ┃ Framerate                      ┃
┡━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ video/x-raw │ 1280  │ 960    │ {15/2,5/1}                     │
│ video/x-raw │ 1280  │ 720    │ {15/2,5/1}                     │
│ video/x-raw │ 1184  │ 656    │ {10/1,5/1}                     │
│ video/x-raw │ 960   │ 720    │ {10/1,5/1}                     │
│ video/x-raw │ 1024  │ 576    │ {10/1,5/1}                     │
│ video/x-raw │ 960   │ 544    │ {15/1,10/1,5/1}                │
│ video/x-raw │ 800   │ 600    │ {20/1,15/1,10/1,5/1}           │
│ video/x-raw │ 864   │ 480    │ {20/1,15/1,10/1,5/1}           │
│ video/x-raw │ 800   │ 448    │ {20/1,15/1,10/1,5/1}           │
│ video/x-raw │ 752   │ 416    │ {25/1,20/1,15/1,10/1,5/1}      │
│ video/x-raw │ 640   │ 480    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ video/x-raw │ 640   │ 360    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ video/x-raw │ 544   │ 288    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ video/x-raw │ 432   │ 240    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ video/x-raw │ 352   │ 288    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ video/x-raw │ 320   │ 240    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ video/x-raw │ 320   │ 176    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ video/x-raw │ 176   │ 144    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ video/x-raw │ 160   │ 120    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 1280  │ 960    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 1280  │ 720    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 1184  │ 656    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 960   │ 720    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 1024  │ 576    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 960   │ 544    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 800   │ 600    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 864   │ 480    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 800   │ 448    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 752   │ 416    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 640   │ 480    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 640   │ 360    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 544   │ 288    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 432   │ 240    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 352   │ 288    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 320   │ 240    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 320   │ 176    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 176   │ 144    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
│ image/jpeg  │ 160   │ 120    │ {30/1,25/1,20/1,15/1,10/1,5/1} │
└─────────────┴───────┴────────┴────────────────────────────────┘

When trying to use manual input framerate:

$ webcam-filters --input-dev /dev/video0 --output-dev /dev/video3 --input-framerate 10/1
gst-stream-error-quark: Internal data stream error. (1): ../gstreamer/libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming stopped, reason not-linked (-1)

from webcam-filters.

jashandeep-sohi avatar jashandeep-sohi commented on May 17, 2024

Looks like a bad assumption on my part when parsing device's framerate. Seems like they can be sets as well.

Can you post the output of webcam-filters --list-dev-caps /dev/videoX?

For me it looks like

         '/dev/video0' Capabilites          
┏━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━┓
┃ Media Type  ┃ Width ┃ Height ┃ Framerate ┃
┡━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━┩
│ video/x-raw │ 1280  │ 720    │ 10/1      │
│ video/x-raw │ 960   │ 540    │ 15/1      │
│ video/x-raw │ 848   │ 480    │ 15/1      │
│ video/x-raw │ 640   │ 480    │ 30/1      │
│ video/x-raw │ 640   │ 360    │ 30/1      │
│ video/x-raw │ 424   │ 240    │ 30/1      │
│ video/x-raw │ 352   │ 288    │ 30/1      │
│ video/x-raw │ 320   │ 240    │ 30/1      │
│ video/x-raw │ 320   │ 180    │ 30/1      │
│ image/jpeg  │ 1280  │ 720    │ 30/1      │
│ image/jpeg  │ 960   │ 540    │ 30/1      │
│ image/jpeg  │ 848   │ 480    │ 30/1      │
│ image/jpeg  │ 640   │ 480    │ 30/1      │
│ image/jpeg  │ 640   │ 360    │ 30/1      │
│ image/jpeg  │ 424   │ 240    │ 30/1      │
│ image/jpeg  │ 352   │ 288    │ 30/1      │
│ image/jpeg  │ 320   │ 240    │ 30/1      │
│ image/jpeg  │ 320   │ 180    │ 30/1      │
└─────────────┴───────┴────────┴───────────┘

from webcam-filters.

bobek avatar bobek commented on May 17, 2024

Facing the same issue, capabilities list looks like this for me (Logitech Webcam C925e)

┏━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Media Type  ┃ Width ┃ Height ┃ Framerate                                ┃
┡━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ video/x-raw │ 2304  │ 1536   │ 2/1                                      │
│ video/x-raw │ 2304  │ 1296   │ 2/1                                      │
│ video/x-raw │ 1920  │ 1080   │ 5/1                                      │
│ video/x-raw │ 1600  │ 896    │ {15/2,5/1}                               │
│ video/x-raw │ 1280  │ 720    │ {10/1,15/2,5/1}                          │
│ video/x-raw │ 960   │ 720    │ {15/1,10/1,15/2,5/1}                     │
│ video/x-raw │ 1024  │ 576    │ {15/1,10/1,15/2,5/1}                     │
│ video/x-raw │ 800   │ 600    │ {24/1,20/1,15/1,10/1,15/2,5/1}           │
│ video/x-raw │ 864   │ 480    │ {24/1,20/1,15/1,10/1,15/2,5/1}           │
│ video/x-raw │ 800   │ 448    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ video/x-raw │ 640   │ 480    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ video/x-raw │ 640   │ 360    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ video/x-raw │ 432   │ 240    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ video/x-raw │ 352   │ 288    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ video/x-raw │ 320   │ 240    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ video/x-raw │ 320   │ 180    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ video/x-raw │ 176   │ 144    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ video/x-raw │ 160   │ 120    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ video/x-raw │ 160   │ 90     │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 1920  │ 1080   │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 1600  │ 896    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 1280  │ 720    │ {60/1,30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 960   │ 720    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 1024  │ 576    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 800   │ 600    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 864   │ 480    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 800   │ 448    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 640   │ 480    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 640   │ 360    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 432   │ 240    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 352   │ 288    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 320   │ 240    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 320   │ 180    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 176   │ 144    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 160   │ 120    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
│ image/jpeg  │ 160   │ 90     │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1}      │
└─────────────┴───────┴────────┴──────────────────────────────────────────┘

I've tried to set resolution and framerate manually with the following but without the luck

webcam-filters --input-dev /dev/video4 --output-dev /dev/video6 --background-blur 150 --input-width 800 --input-height 600 --input-framerate '30/1'

Correction, based on @jashandeep-sohi input, changed to

webcam-filters --input-dev /dev/video4 --output-dev /dev/video6 --background-blur 150 --input-framerate '5/1'

which seems to be working.

from webcam-filters.

jashandeep-sohi avatar jashandeep-sohi commented on May 17, 2024

Oh my! So many options to choose from :)

Ok, I'll think of a patch for this.

In the mean time you should be able to side step the issue, by setting --input-framerate to one of the concrete framerates. @bobek in your case that would only be 5/1 or 2/1 unfortunately.

from webcam-filters.

mid1221213 avatar mid1221213 commented on May 17, 2024

In my case (Logitech C920 HD Pro), the capability list is:

$ webcam-filters --list-dev-caps /dev/video0
                      '/dev/video0' Capabilites                       
┏━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Media Type  ┃ Width ┃ Height ┃ Framerate                           ┃
┡━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ video/x-raw │ 2560  │ 1472   │ 2/1                                 │
│ video/x-raw │ 1920  │ 1080   │ 5/1                                 │
│ video/x-raw │ 1600  │ 896    │ {15/2,5/1}                          │
│ video/x-raw │ 1280  │ 720    │ {10/1,15/2,5/1}                     │
│ video/x-raw │ 960   │ 720    │ {15/1,10/1,15/2,5/1}                │
│ video/x-raw │ 1024  │ 576    │ {15/1,10/1,15/2,5/1}                │
│ video/x-raw │ 800   │ 600    │ {24/1,20/1,15/1,10/1,15/2,5/1}      │
│ video/x-raw │ 864   │ 480    │ {24/1,20/1,15/1,10/1,15/2,5/1}      │
│ video/x-raw │ 800   │ 448    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ video/x-raw │ 640   │ 480    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ video/x-raw │ 640   │ 360    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ video/x-raw │ 432   │ 240    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ video/x-raw │ 352   │ 288    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ video/x-raw │ 320   │ 240    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ video/x-raw │ 320   │ 180    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ video/x-raw │ 176   │ 144    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ video/x-raw │ 160   │ 120    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ video/x-raw │ 160   │ 90     │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 1920  │ 1080   │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 1600  │ 896    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 1280  │ 720    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 960   │ 720    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 1024  │ 576    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 800   │ 600    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 864   │ 480    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 800   │ 448    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 640   │ 480    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 640   │ 360    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 432   │ 240    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 352   │ 288    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 320   │ 240    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 320   │ 180    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 176   │ 144    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 160   │ 120    │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
│ image/jpeg  │ 160   │ 90     │ {30/1,24/1,20/1,15/1,10/1,15/2,5/1} │
└─────────────┴───────┴────────┴─────────────────────────────────────┘

and I tried the command line with adding --input-framerate 2/1 or --input-framerate 5/1 but no luck:

$ webcam-filters --input-dev /dev/video0 --output-dev /dev/video3 --background-blur 150 --input-framerate '5/1'
Traceback (most recent call last):
  File "/home/mid/.local/bin/webcam-filters", line 8, in <module>
    sys.exit(cli())
  File "/home/mid/.local/lib/python3.9/site-packages/click/core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "/home/mid/.local/lib/python3.9/site-packages/click/core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "/home/mid/.local/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/mid/.local/lib/python3.9/site-packages/click/core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "/home/mid/.local/lib/python3.9/site-packages/webcam_filters/main.py", line 137, in cli
    add_filters(
  File "/home/mid/.local/lib/python3.9/site-packages/webcam_filters/gst.py", line 152, in add_filters
    selfie.set_property("model", selfie_segmentation_model)
AttributeError: 'NoneType' object has no attribute 'set_property'

Am I missing something? Is it the same issue?
Thanks.

from webcam-filters.

bobek avatar bobek commented on May 17, 2024

Is it the same issue?

I was facing the same issue (I am on Debian), installed random additional gst packages, which solved the issue for me. (Sorry, I've installed bunch of them, not able at the moment to pinpoint which one really solved the problem for me)

from webcam-filters.

jashandeep-sohi avatar jashandeep-sohi commented on May 17, 2024

Ok, I think I've fixed this. Could you try webcam-filters==0.2.1a0 and see if that helps?

from webcam-filters.

mid1221213 avatar mid1221213 commented on May 17, 2024

Ok, I think I've fixed this. Could you try webcam-filters==0.2.1a0 and see if that helps?

It works better, thanks!
The only thing is that if one doesn't specify any constraint (like --input-width), the resolution / framerate chosen is not the best, and moreover the command exits immediately without error instead of staying running:

$ webcam-filters --input-dev /dev/video0 --output-dev /dev/video3 --background-blur 150
Selectd input: media-type=image/jpeg, width=1280 height=720 framerate=30/1

(python3:111307): GStreamer-CRITICAL **: 11:48:17.663: The created element should be floating, this is probably caused by faulty bindings

(python3:111307): GStreamer-CRITICAL **: 11:48:17.663: The created element should be floating, this is probably caused by faulty bindings

(python3:111307): GStreamer-CRITICAL **: 11:48:17.663: The created element should be floating, this is probably caused by faulty bindings
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
$ 

Here the best combination would have been 1920 × 1080 at 30FPS

from webcam-filters.

bobek avatar bobek commented on May 17, 2024

Ok, I think I've fixed this. Could you try webcam-filters==0.2.1a0 and see if that helps?

It solves the fraction problem for me. Thank you!

~ ❯ webcam-filters --input-dev /dev/video4 --output-dev /dev/video6 --background-blur 30
Selectd input: media-type=image/jpeg, width=1280 height=720 framerate=30/1

from webcam-filters.

jashandeep-sohi avatar jashandeep-sohi commented on May 17, 2024

Ok, I think I've fixed this. Could you try webcam-filters==0.2.1a0 and see if that helps?

It works better, thanks!
The only thing is that if one doesn't specify any constraint (like --input-width), the resolution / framerate chosen is not the best, and moreover the command exits immediately without error instead of staying running:

$ webcam-filters --input-dev /dev/video0 --output-dev /dev/video3 --background-blur 150
Selectd input: media-type=image/jpeg, width=1280 height=720 framerate=30/1

(python3:111307): GStreamer-CRITICAL **: 11:48:17.663: The created element should be floating, this is probably caused by faulty bindings

(python3:111307): GStreamer-CRITICAL **: 11:48:17.663: The created element should be floating, this is probably caused by faulty bindings

(python3:111307): GStreamer-CRITICAL **: 11:48:17.663: The created element should be floating, this is probably caused by faulty bindings
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
$ 

Here the best combination would have been 1920 × 1080 at 30FPS

Yes, this was conscious change. I'm picking the input that's closest to --input{width, height, framerate} rather than exactly that. Picking the "best" (i.e. the highest framerate, width, height) might not give you the best experience. For example, I doubt you could push 60fps through this without getting some serious frame drops. So the defaults for --input{width, height, framerate} are a "reasonable" 720p at 30fps and we select a input that's closest to that.

If you'd like to default to 1080p at 30fps (or something else more optimal), I'd just create an alias:

alias webcam-filters='webcam-filters --input-width 1920 --input-height 1080 --input-framerate 30'

from webcam-filters.

mid1221213 avatar mid1221213 commented on May 17, 2024

Ok, I think I've fixed this. Could you try webcam-filters==0.2.1a0 and see if that helps?

It works better, thanks!
The only thing is that if one doesn't specify any constraint (like --input-width), the resolution / framerate chosen is not the best, and moreover the command exits immediately without error instead of staying running:

Yes, this was conscious change. I'm picking the input that's closest to --input{width, height, framerate} rather than exactly that. Picking the "best" (i.e. the highest framerate, width, height) might not give you the best experience. For example, I doubt you could push 60fps through this without getting some serious frame drops. So the defaults for --input{width, height, framerate} are a "reasonable" 720p at 30fps and we select a input that's closest to that.

If you'd like to default to 1080p at 30fps (or something else more optimal), I'd just create an alias:

alias webcam-filters='webcam-filters --input-width 1920 --input-height 1080 --input-framerate 30'

Ok, I wasn't aware it was on purpose, so no problem. Thanks for the explanation.

But there is still the other problem that makes it exit instantly after launch if I don't specify any size / framerate constraint. There isn't any error message, the return code is 0, the light on my webcam is lit for an instant, then everything stops and I get the shell prompt. Do you want me to open another issue for this?

from webcam-filters.

jashandeep-sohi avatar jashandeep-sohi commented on May 17, 2024

Interesting, yes please. Sorry, I misunderstood that was also an issue. Closing this one.

from webcam-filters.

Related Issues (20)

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.