Giter VIP home page Giter VIP logo

scikit-video's Introduction

skvideologo_

BSD3_ Travis_ Coveralls_ CircleCI_ Python27_ Python35_ PyPi_

Video Processing SciKit

Borrowing coding styles and conventions from scikit-image and scikit-learn, scikit-video is a Python module for video processing built on top of scipy, numpy, and ffmpeg/libav.

This project is distributed under the 3-clause BSD.

Visit the documentation at http://www.scikit-video.org

Dependencies and Installation

Here are the requirements needed to use scikit-video.

  • Either ffmpeg (version >= 2.8) or libav (either version 10 or 11)
  • python (2.7, 3.3<=)
  • numpy (version >= 1.9.2)
  • scipy (version >= 0.16.0)
  • PIL/Pillow (version >= 3.1)
  • scikit-learn (version >= 0.18)
  • mediainfo (optional)

Installation:

$ sudo pip install scikit-video

Installing from github

  1. Make sure minimum dependencies (above) are installed. In addition, install setuptools (python-setuptools or python2-setuptools).
  2. Clone the scikit-video repository, enter the project directory, then run:

    $ python setup.py build
  3. In that same project directory, run the command:

    $ sudo python setup.py install

where python may refer to either python2 or python3.

Known conflicts

If you installed scikit-video prior to version 1.1.10, you may have an import conflict. Run the following command(s) to fix it:

$ sudo pip uninstall sk-video

Then To check that the conflict no longer exists, import skvideo and print the file path:

import skvideo
print(skvideo.__file__)

if setup correctly, you should see scikit_video in the path:

/usr/lib/python*/site-packages/scikit_video-*.*.*-py*.egg/skvideo/__init__.pyc

TODO/Roadmap

  • Spatial-Temporal filtering helper functions
  • Speedup routines (using cython and/or opencl)
  • More ffmpeg/avconv interfacing
  • Wrapping ffmpeg/avconv inside a subprocess to reduce memory overhead
  • Add additional algorithms and maintain more comprehensive benchmarks

For Contributors

Quick tutorial on how to go about setting up your environment to contribute to scikit-video:

https://github.com/beyondmetis/scikit-video/blob/master/CONTRIBUTING.rst

Testing

After installation, you can launch the test suite from outside the source directory (you will need to have the nose package installed). To ensure that both python2 and python3 versions pass:

$ nosetests2 -v skvideo
$ nosetests3 -v skvideo

Copyright 2015-2019, scikit-video developers (BSD license).

scikit-video's People

Contributors

abhinaukumar avatar alex1443 avatar andersonreyes avatar atcold avatar beyondmetis avatar cachitas avatar chenyncv avatar dhannasch avatar ewanlee avatar haawron avatar isikdogan avatar ivan94fi avatar johnhenning avatar kirillfish avatar kloumpt avatar lazare avatar lidq92 avatar meixu-chen avatar parnalte avatar sria91 avatar stg7 avatar vanossj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

scikit-video's Issues

Memory leak on skvideo.measure.scenedet

Hi, i'm trying to detect scenes using luminance algorithm on 8 minutes video, and after using all available memory process gets killed. I only get results on short ~1min videos.
I'm running script on my local machine.
Is there any solution for this kind of problem or i need to deploy it on cloud to work with long videos?
Thank you!

TypeError: 'float' object cannot be interpreted as an integer when using blockMotion in Python3

import skvideo.io
from skvideo.motion import blockMotion
video = skvideo.io.vread(file)
motion = blockMotion(video)

gives me the following error

File "main.py", line 47, in compute_motion_vectors
motion = blockMotion(video)
File "/usr/lib/python3.5/site-packages/skvideo/motion/block.py", line 950, in blockMotion
motionData = np.zeros((numFrames - 1, height / mbSize, width / mbSize, 2), np.int8)
TypeError: 'float' object cannot be interpreted as an integer

This error does not occur when using Python2. I believe the issue is because of this difference between Python versions.

No way to determine width or height from video.

I ran the first example "Video loading" or other situations when I use "skvideo.io.vread". I found the following error. I ran on a Centos7 server with x86_64 with ffmpeg installed. Any help appreciated!

Loading only luminance channel
Traceback (most recent call last):
File "untitled4.py", line 8, in
vid = skvideo.io.vread(filename, outputdict={"-pix_fmt": "gray"})[:, :, :, 0]
File "/home/ulu/anaconda2/lib/python2.7/site-packages/skvideo/io/io.py", line 144, in vread
reader = FFmpegReader(fname, inputdict=inputdict, outputdict=outputdict, verbosity=verbosity)
File "/home/ulu/anaconda2/lib/python2.7/site-packages/skvideo/io/ffmpeg.py", line 117, in init
raise ValueError("No way to determine width or height from video. Need -s in inputdict. Consult documentation on I/O.")
ValueError: No way to determine width or height from video. Need -s in inputdict. Consult documentation on I/O.

cannot convert pix_fmt

The script I wrote:

inputdict = {"-pix_fmt":"rgb24"}
reader = skvideo.io.FFmpegReader(input_file,inputdict)
print reader.pix_fmt
writer = skvideo.io.FFmpegWriter(output_file)
for frame in reader.nextFrame():
    do something

Error occured

Traceback (most recent call last):
  File "VideoIO_test.py", line 27, in <module>
    for frame in reader.nextFrame():
  File "/usr/lib/python2.7/site-packages/skvideo/io/ffmpeg.py", line 297, in nextFrame
    yield self._readFrame()
  File "/usr/lib/python2.7/site-packages/skvideo/io/ffmpeg.py", line 281, in _readFrame
    s = self._read_frame_data()
  File "/usr/lib/python2.7/site-packages/skvideo/io/ffmpeg.py", line 275, in _read_frame_data
    raise RuntimeError("%s" % (err1,))
RuntimeError

If I set inputdict to "{}", it works but the pix_fmt is YUV
Any ideas?
Thanks!

True installation way

Hi, everyone
Dont know correct words to express what I want, so I will just describe what I ve done and what I ve in the end

  1. sudo pip install scikit-video
    then i tried to run example and it failed on:
    cap = skvideo.io.VideoCapture('10hz.avi')
    ret, im = cap.read()
    with traceback:
    TypeError: must be str, not bytes

  2. I started googling and found out i should do:
    sudo pip uninstall scikit-video
    sudo pip install sk_video
    thats what i`ve done and after installing i got:
    succesfully installed sk-video-1.1.8

  3. After that i tried ti run code using skvideo.io.vread() but got "module skvideo doesnt have attribute vread"

  4. skvideo.version returns 0.0.2 (dont know why, cause i installed 1.1.8)

Could anyone explain, what should I do to finally read video files?))

Error when install this.

Hi there, I want to try this, however, there is a problem showed, when I tried to python setup.py build.
Command "python setup.py egg_info" failed with error code 1 in C:\Users\I321714\AppData\Local\Temp\pip-build-5v94_a4h\scipy\

    File "c:\python35\lib\site-packages\setuptools\command\easy_install.py", line 1066, in run_setup
        raise DistutilsError("Setup script exited with %s" % (v.args[0],))
    distutils.errors.DistutilsError: Setup script exited with error: Unable to find vcvarsall.bat

issue trying to set "-vsync" in outputdict (trying to use with "-vf": "select='eq(pict_type,PICT_TYPE_<X>)'")

Hi-
I'm using python 2.7

I'm trying to set the outputdict parameters for skvideo.io.vreader to extract e.g. only I-frames.

This is my test video:
https://www.youtube.com/watch?v=q1mAGQAw3Oc&t=22s
The version downloaded to my machine has 64 I-frames and 3269 P-frames.

The following will run, but seems to default to "cfr" as the "-vsync" parameter (Frames will be duplicated and dropped to achieve exactly the requested constant frame rate).

iframes = skvideo.io.vreader(myvideofile, outputdict={"-pix_fmt": "gray", "-vf": "select='eq(pict_type,PICT_TYPE_I)'"})
k=0
for frame in iframes:
k+=1
print k

3333

I want the above to yield only those 64 I-frames.

compare to:
allframes = skvideo.io.vreader(myvideofile, outputdict={"-pix_fmt": "gray"})
k=0
for frame in iframes:
k+=1
print k

3333

Trying to set "-vsync" to "vfr" (or anything other than "cfr") results in a RuntimeError.

iframes = skvideo.io.vreader(myvideofile, outputdict={"-pix_fmt": "gray", "-vf": "select='eq(pict_type,PICT_TYPE_I)'", "-vsync": "vfr"})
k=0
for frame in iframes:
k+=1
print k

RuntimeError Traceback (most recent call last)
in ()
1 k=0
----> 2 for frame in vid_p:
3 k+=1
4
5 print k

/usr/local/lib/python2.7/dist-packages/skvideo/io/io.pyc in vreader(fname, height, width, num_frames, as_grey, inputdict, outputdict, backend, verbosity)
251 reader = FFmpegReader(fname, inputdict=inputdict, outputdict=outputdict, verbosity=verbosity)
252 try:
--> 253 for frame in reader.nextFrame():
254 if as_grey:
255 yield vshape(frame[:, :, 0])

/usr/local/lib/python2.7/dist-packages/skvideo/io/ffmpeg.pyc in nextFrame(self)
291 """
292 for i in range(self.inputframenum):
--> 293 yield self._readFrame()
294
295

/usr/local/lib/python2.7/dist-packages/skvideo/io/ffmpeg.pyc in _readFrame(self)
275 # Read and convert to numpy array
276 # t0 = time.time()
--> 277 s = self._read_frame_data()
278 result = np.fromstring(s, dtype='uint8')
279

/usr/local/lib/python2.7/dist-packages/skvideo/io/ffmpeg.pyc in _read_frame_data(self)
269 self._terminate()
270 err1 = str(err)
--> 271 raise RuntimeError("%s" % (err1,))
272 return arr
273

RuntimeError:

Error while using skvideo.io

While running the code

import skvideo.io
import skvideo.datasets
videodata = skvideo.io.vread(skvideo.datasets.bigbuckbunny())
print(videodata.shape)

I am getting error AssertionError: Cannot find installation of real FFmpeg (which comes with ffprobe).

if tags['@key'] == 'rotate': TypeError: string indices must be integers

Hi,

I reported a bug a couple of days ago and one of you was very nice to fix it asap. The problem was reading files created on mobiles.

However, after the fix, we are having problems reading files created on web (webm files). Before the fix, this used to work.

Last time I sent the video, please ping me if you would like me to send one again ([email protected])

Traceback (most recent call last):
  File "test_video.py", line 13, in <module>
    videogen = skvideo.io.vread(video)
   File "/home/ubuntu/data_2/scikit-video/skvideo/io/io.py", line 144, in vread
    reader = FFmpegReader(fname, inputdict=inputdict, outputdict=outputdict, verbosity=verbosity)
  File "/home/ubuntu/data_2/scikit-video/skvideo/io/ffmpeg.py", line 115, in 
__init_

   if tags['@key'] == 'rotate':
  TypeError: string indices must be integers

VideoCapture error on Anaconda

I am using Python 3.5.2, Anaconda 4.2.0 (64-bit), OpenCV 3.1.0 installed with conda install -c menpo opencv3=3.1.0. I installed
sudo apt-get install libav-tools
pip install scikit-video

Then:
python
import skvideo.io
cap = VideoCapture('2538-5_70133.avi')

Error:
cap = VideoCapture('2538-5_70133.avi')
Traceback (most recent call last):
File "", line 1, in
File "/home/01677387637/anaconda3/lib/python3.5/site-packages/skvideo/io/init.py", line 26, in init
self.info = self.get_info()
File "/home/01677387637/anaconda3/lib/python3.5/site-packages/skvideo/io/init.py", line 119, in get_info
info = json.loads(output)
File "/home/01677387637/anaconda3/lib/python3.5/json/init.py", line 312, in loads
s.class.name))
TypeError: the JSON object must be str, not 'bytes'

Problems with skvideo\__init__.py on Windows

Ffmepg is not recognized on my Windows 10 and Windows 8 computers.
Changing "/ffmpeg" and "/ffprobe" to "/ffmpeg.exe" and "/ffprobe.exe" in the init files seems to resolve this for me.

AssertionError: Unknown encoder extension: .mp4 \skvideo\io\ffmpeg.py

I've been running a script on my Windows 8 Laptop and everything worked fine.
Running the same script on my Windows 10 Desktop, i get "AssertionError: Unknown encoder extension: .mp4" when using the skvideo.io.FFmpegWriter class with an mp4 extension.
The FFmpeg installation is working fine as far as i can tell and is accessible trough command line.

Windows executable path support

Great package - it's very useful for my research. Unfortunately, I'm using Windows and initially had problems with skvideo bonking when calling 'ffmpeg' and associated executables. I did an ugly hack like this:

# get the correct exe name based on OS
ffprobe_exe = "ffprobe"
ffmpeg_exe = "ffmpeg"
avprobe_exe = "avprobe"
avconv_exe = "avconv"
mediainfo_exe = "mediainfo"
if os.name == "nt":
    ffprobe_exe += ".exe"
    ffmpeg_exe += ".exe"
    avprobe_exe += ".exe"
    avconv_exe += ".exe"
    mediainfo_exe += ".exe"

in skvideo\__init__.py and then change calls like this:

version = check_output([_FFMPEG_PATH + "/ffmpeg", "-version"])

to this:

version = check_output([_FFMPEG_PATH + "/" + ffmpeg_exe, "-version"])

It looks like there is a nice little cross-platform where package that will correctly identify exe paths and may be useful in switching out the logic in the which function. In fact, it looks like the only thing you're using _FFMPEG_PATH, _AVCONV_PATH, and _MEDIAINFO_PATH for are to concatenate to the exe name when issuing commands? I think you could just use the output of the where command as the first argument to many of these calls, e.g.

import where
from skvideo.utils import check_output
ffmpeg_exe = where.where('ffmpeg')[0]
version = check_output([ffmpeg_exe, '-version'])

I'd be happy to write a PR, but thought you might have an idea of how you wanted to implement this.

reader = skvideo.io.FFmpegReader() throws an exception, RunTimeError()

raceback (most recent call last):
File "./mouth_detect/video2h5.py", line 82, in
video2h5(valid_path, valid_h5)
File "./detect/video2h5.py", line 32, in video2h5
video_read = detector(video_path, type=type)
File "/home/jlxie/Reading/detect/detect.py", line 87, in mouth_detector
for frame in reader.nextFrame():
File "/home/jlxie/anaconda2/envs/tf1.1-py2/lib/python2.7/site-packages/skvideo/io/ffmpeg.py", line 274, in nextFrame
yield self._readFrame()
File "/home/jlxie/anaconda2/envs/tf1.1-py2/lib/python2.7/site-packages/skvideo/io/ffmpeg.py", line 256, in _readFrame
s = self._read_frame_data()
File "/home/jlxie/anaconda2/envs/tf1.1-py2/lib/python2.7/site-packages/skvideo/io/ffmpeg.py", line 250, in _read_frame_data
raise RuntimeError("%s" % (err1,))
RuntimeError

But I do not know what is happening~

Broken pipe error with skvideo.io.vwrite

Hi,
I am getting a broken pipe error with a list of numpy frames. The shape is (no_frames, h, w, 3). Is there anything I am doing wrong ?

skvideo.io.vwrite("outputvideo.mp4", frames, backend="libav")

File "/home/jj/miniconda3/lib/python3.6/site-packages/skvideo/io/io.py", line 71, in vwrite
writer.writeFrame(videodata[t])
File "/home/jj/miniconda3/lib/python3.6/site-packages/skvideo/io/avconv.py", line 456, in writeFrame
raise IOError(msg)
OSError: [Errno 32] Broken pipe

avconv COMMAND:
/usr/bin/avconv -y -f rawvideo -pix_fmt rgb24 -s 126x126 -i pipe: -sws_flags bitexact outputvideo.mp4

avconv STDERR OUTPUT:

error reading high resolution videos

I am getting some runtime errors with high resolution videos. Code I am using is:

videogen = skvideo.io.vread('video.avi')

And what I get is:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/sk_video-1.1.8-py2.7.egg/skvideo/io/io.py", line 148, in vread
for idx, frame in enumerate(reader.nextFrame()):
File "/usr/local/lib/python2.7/dist-packages/sk_video-1.1.8-py2.7.egg/skvideo/io/ffmpeg.py", line 293, 
in nextFrame yield self._readFrame()
File "/usr/local/lib/python2.7/dist-packages/sk_video-1.1.8-py2.7.egg/skvideo/io/ffmpeg.py", line 277, 
in_readFrame
s = self._read_frame_data()
File "/usr/local/lib/python2.7/dist-packages/sk_video-1.1.8-py2.7.egg/skvideo/io/ffmpeg.py", line 271, 
in _read_frame_data
raise RuntimeError("%s" % (err1,))
RuntimeError

Need to update FFmpegWriter example at http://www.scikit-video.org/stable/io.html

The FFmpegWriter example (in section titled "Writing") at http://www.scikit-video.org/stable/io.html appears to be out of date. The updated example I found (at http://www.scikit-video.org/dev/examples/io.html#ioexamplevideo) does run for me, however.

The former link was significantly more visible/accessible through Google search for me, so it might be worth pushing the change as it would make a basic feature more accessible to new users or coders.

setFFmpegPath on Windows requires running twice.

This is almost certainly related to Issue 21, but on Windows, I have to run skvideo.setFFmpegPath(r'Path\to\binary') twice for it to work. Running it once, I'll receive a warning, and further skvideo calls will fail. However, running that same command a second time seems to solve the issue.

(toolchain) D:\bppci\ectests\bpp\main>python
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import skvideo
>>> skvideo.setFFmpegPath(r'D:\bbpci\ectests\bpp\main\bin\ffmpeg\windows\stable')
D:\bppci\ectests\bpp\main\toolchain\lib\site-packages\skvideo\__init__.py:310: UserWarning: ffmpeg/ffprobe not found in path: D:\bbpci\ectests\bpp\main\bin\ffmpeg\windows\stable
  warnings.warn("ffmpeg/ffprobe not found in path: " + str(path), UserWarning)
>>> skvideo.setFFmpegPath(r'D:\bbpci\ectests\bpp\main\bin\ffmpeg\windows\stable')
>>> skvideo.getFFmpegPath()
'D:\\bbpci\\ectests\\bpp\\main\\bin\\ffmpeg\\windows\\stable'
>>>

Import error when using skvideo.io

I am trying to import skvideo.io in python 3.6.3 but getting an import error. I installed skvideo through pip and it was installed successfully.

The is the error I am getting
Traceback (most recent call last): File "", line 1, in import skvideo.io File "C:\Users\Hasan\AppData\Local\Programs\Python\Python36\lib\site-packages\skvideo__init__.py", line 3, in from .utils import check_output, where File "C:\Users\Hasan\AppData\Local\Programs\Python\Python36\lib\site-packages\skvideo\utils__init__.py", line 10, in from .edge import canny File "C:\Users\Hasan\AppData\Local\Programs\Python\Python36\lib\site-packages\skvideo\utils\edge.py", line 8, in import scipy.ndimage File "C:\Users\Hasan\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\ndimage__init__.py", line 161, in from .filters import * File "C:\Users\Hasan\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\ndimage\filters.py", line 37, in from scipy.misc import doccer File "C:\Users\Hasan\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\misc__init__.py", line 67, in from scipy.interpolate._pade import pade as _pade File "C:\Users\Hasan\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\interpolate__init__.py", line 175, in from .interpolate import * File "C:\Users\Hasan\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\interpolate\interpolate.py", line 20, in import scipy.linalg File "C:\Users\Hasan\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\linalg__init__.py", line 186, in from .misc import * File "C:\Users\Hasan\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\linalg\misc.py", line 5, in from .blas import get_blas_funcs File "C:\Users\Hasan\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\linalg\blas.py", line 196, in from scipy.linalg import _fblas ImportError: DLL load failed: The specified module could not be found.

vread error on image files

skvideo.io.vread raises a TypeError on image files. Example code:

import skvideo.io
vid = skvideo.io.vread("vid_luma_frame1.png")

Environment: python 3.5.2 and ffmpeg version 2.8.11 built with gcc 5.4.0 on ubuntu 16.04

Exception trace:

/usr/local/lib/python3.5/dist-packages/skvideo/io/io.py in vread(fname, height, width, num_frames, as_grey, inputdict, outputdict, backend, verbosity)
142 outputdict['-pix_fmt'] = 'gray'
143
--> 144 reader = FFmpegReader(fname, inputdict=inputdict, outputdict=outputdict, verbosity=verbosity)
145 T, M, N, C = reader.getShape()
146

/usr/local/lib/python3.5/dist-packages/skvideo/io/ffmpeg.py in init(self, filename, inputdict, outputdict, verbosity)
192 # grabbing number of frames using ffprobe
193 probecmd = [_FFMPEG_PATH + "/ffprobe"] + ["-v", "error", "-count_frames", "-select_streams", "v:0", "-show_entries", "stream=nb_read_frames", "-of", "default=nokey=1:noprint_wrappers=1", self._filename]
--> 194 self.inputframenum = np.int(check_output(probecmd).split('\n')[0])
195
196 # Create process

TypeError: a bytes-like object is required, not 'str'

Get frame timestamp

Hello,

I am using skvideo.io.vreader to read a file as a stream:

videogen = skvideo.io.vreader(video_url) # s3 path to the video
for frame in videogen:
        # do stuff
        # get timestamp of frame

I want to get the timestamp of the frame relative to the start of the video. I couldn't find anything in the API docs related to this. Is it possible?

Cannot vread a second video (ValueError: No way to determine width or height from video. Need `-s` in `inputdict`. Consult documentation on I/O.)

I am having difficulty loading a second video using skvideo.io.vread

Please see the following iPython session. The first video loads successfully, however subsequent videos fail to load:

$ ipython3
Python 3.6.2 (default, Sep 14 2017, 18:08:00) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from skvideo import io

In [2]: %time v = io.vread("test.x265.10.mp4")
CPU times: user 10.5 s, sys: 12 s, total: 22.5 s
Wall time: 33.6 s

In [3]: %time v2 = io.vread("test.x265.10.mp4")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<timed exec> in <module>()

~/.pyenv/versions/3.6.2/envs/general/lib/python3.6/site-packages/skvideo/io/io.py in vread(fname, height, width, num_frames, as_grey, inputdict, outputdict, backend, verbosity)
    142             outputdict['-pix_fmt'] = 'gray'
    143 
--> 144         reader = FFmpegReader(fname, inputdict=inputdict, outputdict=outputdict, verbosity=verbosity)$ ipython3
Python 3.6.2 (default, Sep 14 2017, 18:08:00) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from skvideo import io

In [2]: %time v = io.vread("test.x265.10.mp4")
CPU times: user 10.5 s, sys: 12 s, total: 22.5 s
Wall time: 33.6 s

In [3]: %time v2 = io.vread("test.x265.10.mp4")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<timed exec> in <module>()

~/.pyenv/versions/3.6.2/envs/general/lib/python3.6/site-packages/skvideo/io/io.py in vread(fname, height, width, num_frames, as_grey, inputdict, outputdict, backend, verbosity)
    142             outputdict['-pix_fmt'] = 'gray'
    143 
--> 144         reader = FFmpegReader(fname, inputdict=inputdict, outputdict=outputdict, verbosity=verbosity)
    145         T, M, N, C = reader.getShape()
    146 

~/.pyenv/versions/3.6.2/envs/general/lib/python3.6/site-packages/skvideo/io/ffmpeg.py in __init__(self, filename, inputdict, outputdict, verbosity)
    128             self.inputheight = np.int(viddict["@height"])
    129         else:
--> 130             raise ValueError("No way to determine width or height from video. Need `-s` in `inputdict`. Consult documentation on I/O.")
    131 
    132         # smartphone recordings seem to store data about rotations

ValueError: No way to determine width or height from video. Need `-s` in `inputdict`. Consult documentation on I/O.

Python 3.6
skvideo 1.1.8
ffmpeg version git-2017-09-27-c1f22c2 (although I have tried other versions as well)

Any ideas?

Does vread work in Python 3.6?

Hi!

vread doesn't seem to work for my Python 3.6 (Anaconda3-4.3.1-Linux-x86_64).

from skvideo.io import vread
vid = vread('/data/myvid.mp4')

gives me

File "/software/Anaconda3-4.3.1-Linux-x86_64/lib/python3.6/site-packages/skvideo/io/io.py", line 144, in vread
    reader = FFmpegReader(fname, inputdict=inputdict, outputdict=outputdict, verbosity=verbosity)
  File "/software/Anaconda3-4.3.1-Linux-x86_64/lib/python3.6/site-packages/skvideo/io/ffmpeg.py", line 194, in __init__
    self.inputframenum = np.int(check_output(probecmd).split('\n')[0])
TypeError: a bytes-like object is required, not 'str'

If it's not supported now, approximately when will it get supported?

Many thanks for the development!

Skip ahead in video

Hello,

How do you skip ahead a certain number of frames in the vreader function? I see in the documentation that there is a num_frames parameter, but what if I want to do this:

  • Read 500 frames from 0s.
  • Read another 500 frames from after frame number 1000?

The reason I am asking is because I have a set of processes in AWS Batch that are designed to process different parts of a video in parallel. Ideally I would have each batch task processing a segment of the video. When I am creating the tasks, I can specify the "limit" and "skip" (or whatever the equivalent names are here) parameters based on the video metadata.

Thanks so much

skvideo.io.ffprobe not working sometimes

When I run ffprobe from the command line, it emits metadata, but skvideo.io isn't parsing it properly.

usmanm@usmanm-puget:~/identidata/facey/fixtures (master)*$ ffprobe videos/video0.mov 
ffprobe version 3.3-1~16.04.york1 Copyright (c) 2007-2017 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
  configuration: --prefix=/usr --extra-version='1~16.04.york1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libavresample   3.  5.  0 /  3.  5.  0
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'videos/video0.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 0
    compatible_brands: qt  
    creation_time   : 2017-06-14T18:28:36.000000Z
  Duration: 00:00:02.65, start: 0.000000, bitrate: 651 kb/s
    Stream #0:0(und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt709/bt709), 480x360, 557 kb/s, 20 fps, 20 tbr, 600 tbn, 1200 tbc (default)
    Metadata:
      rotate          : 90
      creation_time   : 2017-06-14T18:28:36.000000Z
      handler_name    : Core Media Data Handler
      encoder         : H.264
    Side data:
      displaymatrix: rotation of -90.00 degrees
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 78 kb/s (default)
    Metadata:
      creation_time   : 2017-06-14T18:28:36.000000Z
      handler_name    : Core Media Data Handler
usmanm@usmanm-puget:~/identidata/facey/fixtures (master)*$ ipython
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
Type "copyright", "credits" or "license" for more information.

IPython 5.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import skvideo.io

In [2]: skvideo.io.ffprobe('videos/video0.mpg')
Out[2]: {}

This causes FFmpegReader to throw the following error:

[ERROR] 2017-06-16 14:37:00,760 (383) tasks: No way to determine width or height from video. Need `-s` in `inputdict`. Consult documentation on I/O.
Traceback (most recent call last):
  File "/identidata/facey/tasks.py", line 137, in _extract_faces_from_video
    reader = skvideo.io.FFmpegReader(f.name)#, inputdict=inputdict)
  File "/usr/local/lib/python2.7/dist-packages/skvideo/io/ffmpeg.py", line 130, in __init__
    raise ValueError("No way to determine width or height from video. Need `-s` in `inputdict`. Consult documentation on I/O.")
ValueError: No way to determine width or height from video. Need `-s` in `inputdict`. Consult documentation on I/O.

Too many spawned processes with vread

I'm reading multiple videos in a loop using vread

for file_name in VIDEO_LIST:
frames = skvideo.io.vread(file_name)
# Process

I am reading >10000 videos, and after around 2000 videos my process starts giving an error. When I checked htop in between, I saw ffmpeg processes alive for many videos that had already been processed.

Is this a bug with skvideo not closing the underlying ffmpeg process?

EDIT:

I went through the code and I see that in io.py, an FFmpegReader object is created which spawns a subprocess, but the subprocess is never terminated after vread() is done reading the frames. So, I guess the issue is with cleanly killing the subprocess associated with the FFmpregReader object once the job's done.

skvideo.io.vreader always capturing the same, fixed frame

I am reading a 3 sec video where a human can actually see motion. However, when I save the frames as pictures, they are all the same. sample code:

import cv2
video = 'my_video.webm'
videogen = skvideo.io.vread(video)
for i in range(0,videogen.shape[0]):
    frame = cv2.cvtColor(videogen[i],cv2.COLOR_BGR2RGB)
    cv2.imwrite('frame_'+str(i)+'.jpg,frame)

When you open the .jpg files, they are all exactly the same. That does not happen when you watch the video, frames are clearly different.

Hints?

AVConv/AVProbe Warning

This is more of a question than an issue, but if it is a bug, its a very minor one. After updated to 1.1.8, I see warnings about AVConv/AVProbe not being found in the path, even though FFmpeg is in the path. My understanding was that sk-video looks for one or the other, but maybe I'm wrong?

skvideo.io.vread throws an exception where skvideo.io.vreader does not

for the same video.
Here is the exception.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/sk_video-1.1.8-py2.7.egg/skvideo/io/io.py", line 253, in vre
ader
    for frame in reader.nextFrame():
  File "/usr/local/lib/python2.7/dist-packages/sk_video-1.1.8-py2.7.egg/skvideo/io/ffmpeg.py", line 293, in
 nextFrame
    yield self._readFrame()
  File "/usr/local/lib/python2.7/dist-packages/sk_video-1.1.8-py2.7.egg/skvideo/io/ffmpeg.py", line 277, in
 _readFrame
    s = self._read_frame_data()
  File "/usr/local/lib/python2.7/dist-packages/sk_video-1.1.8-py2.7.egg/skvideo/io/ffmpeg.py", line 271, in
 _read_frame_data
    raise RuntimeError("%s" % (err1,))
RuntimeError

Issue with io/ffmpeg.py

RuntimeError: Traceback (most recent call last):
  File "/home/praateek/.local/lib/python2.7/site-packages/torch/utils/data/dataloader.py", line 40, in _worker_loop
    samples = collate_fn([dataset[i] for i in batch_indices])
  File "<ipython-input-10-a53d73bbb9a6>", line 32, in __getitem__
    vid = skvideo.io.vread(self.__xs[index])
  File "/usr/local/lib/python2.7/dist-packages/skvideo/io/io.py", line 148, in vread
    for idx, frame in enumerate(reader.nextFrame()):
  File "/usr/local/lib/python2.7/dist-packages/skvideo/io/ffmpeg.py", line 293, in nextFrame
    yield self._readFrame()
  File "/usr/local/lib/python2.7/dist-packages/skvideo/io/ffmpeg.py", line 277, in _readFrame
    s = self._read_frame_data()
  File "/usr/local/lib/python2.7/dist-packages/skvideo/io/ffmpeg.py", line 271, in _read_frame_data
    raise RuntimeError("%s" % (err1,))
RuntimeError

So I am loading around 10,000 videos, and this issue seems to pop randomly. First I thought maybe it's one corrupted video files, but after having tried on different machines, I am sure the error just pops from any arbitary file.

        vid = skvideo.io.vread(filename)
        frames, width, height, channels = vid.shape
        time_steps = int(frames/self.timestep) #sample rate is number of frames to extract per second 
        return vid[::self.timestep]

I'm sharing my code just in case it helps figure it out, but I believe the behavior is random, because it does it load a lot of videos before throwing that error.

Use skvideo.io.ffmpeg to make a video which can be played on mobile

Hi, me again.

Now, I am trying to put my video, created from images, online.

I use skvideo.io.ffmpeg to produce the video and use '-vcodec': 'libx264' in outputdict, and it plays well on the PC browsers.

However, it can not play on my cell phone(using chrome or safari), how can I fix this problem?

BTW, at first, I thought it was a decoding problem, so I have tried setting up some commands in outputdict, such as 'profile:v : high' and 'level : 4.0'.

But I got some errors below.

OSError: [Errno 32] Broken pipe

FFMPEG COMMAND:
C:\path/ffmpeg.exe -y -f rawvideo -r 15 -s 500x333 -pix_fmt rgb24 -i - -profile:v high -level 4.0 -pix_fmt yuv420p -c:v h264 -b 30000000 D:\path\filename.mp4

About Detecting scene boundaries

Hi,thank you for this beautiful work! It's very useful for me! But I found a issue that when I run the example:Detecting scene boundaries Demo ,the result I got differs from yours.
Here is my result. click it .I guess in the code that
scene_lum_idx = skvideo.measure.scenedet(videodata, method='intensity', parameter1=1.0) ,parameter1
is uncorrected! Can you help me?

Closing FFmpegReader file

I am unable to understand how to close a FFmpegReader object.
I have many videos, and I have to free resources, when they are not used.
Any suggestion? The _close() method does not really work.

I see that the FFmpegReader.nextFrame() iterator can be closed, but not the main object.

Error when trying to change output fps of video using vread

Hi,

I am trying to read the data from a video but re-sampling it to a lower fps. That is, say I have a 30s video with a fps of 15, resulting in 450 frames. I want to re-sample it to an fps of 10, so that I end up with only 300 frames, i.e., using vread I end up with an array of shape (300, height, width, 3).

I tried using
videodata = skvideo.io.vread("input_video.avi", outputdict={'-r': '10'})
but this fails with this error message:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-88-219782b70a2a> in <module>()
----> 1 video_data = skvideo.io.vread(fname, outputdict={'-r': '10'})

/home/pablo/anaconda/envs/conda-forge/lib/python2.7/site-packages/skvideo/io/io.pyc in vread(fname, height, width, num_frames, as_grey, inputdict, outputdict, backend, verbosity)
    146 
    147         videodata = np.zeros((T, M, N, C), dtype=np.uint8)
--> 148         for idx, frame in enumerate(reader.nextFrame()):
    149             videodata[idx, :, :, :] = frame
    150 

/home/pablo/anaconda/envs/conda-forge/lib/python2.7/site-packages/skvideo/io/ffmpeg.pyc in nextFrame(self)
    291         """
    292         for i in range(self.inputframenum):
--> 293             yield self._readFrame()
    294 
    295 

/home/pablo/anaconda/envs/conda-forge/lib/python2.7/site-packages/skvideo/io/ffmpeg.pyc in _readFrame(self)
    275         # Read and convert to numpy array
    276         # t0 = time.time()
--> 277         s = self._read_frame_data()
    278         result = np.fromstring(s, dtype='uint8')
    279 

/home/pablo/anaconda/envs/conda-forge/lib/python2.7/site-packages/skvideo/io/ffmpeg.pyc in _read_frame_data(self)
    269             self._terminate()
    270             err1 = str(err)
--> 271             raise RuntimeError("%s" % (err1,))
    272         return arr
    273 

RuntimeError: 

If I use vreader instead of vread, this call does not fail, but the generator created has a problem, as it tries to go over the correct number of output frames (in the example above, it will try to yield frame no. 301, and hit the same error then). Some code to show this:

In [89]: videodata_gen = skvideo.io.vreader("input_video.avi", outputdict={'-r': '10'})

In [90]: for i,frame in enumerate(videodata_gen):
    ...:     print i
0
1
2
3
[...]
300
301
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-90-4db35cfe3b02> in <module>()
----> 1 for i,frame in enumerate(videodata_gen):
      2     print i

/home/pablo/anaconda/envs/conda-forge/lib/python2.7/site-packages/skvideo/io/io.pyc in vreader(fname, height, width, num_frames, as_grey, inputdict, outputdict, backend, verbosity)
    251         reader = FFmpegReader(fname, inputdict=inputdict, outputdict=outputdict, verbosity=verbosity)
    252         try:
--> 253             for frame in reader.nextFrame():
    254                 if as_grey:
    255                     yield vshape(frame[:, :, 0])

/home/pablo/anaconda/envs/conda-forge/lib/python2.7/site-packages/skvideo/io/ffmpeg.pyc in nextFrame(self)
    291         """
    292         for i in range(self.inputframenum):
--> 293             yield self._readFrame()
    294 
    295 

/home/pablo/anaconda/envs/conda-forge/lib/python2.7/site-packages/skvideo/io/ffmpeg.pyc in _readFrame(self)
    275         # Read and convert to numpy array
    276         # t0 = time.time()
--> 277         s = self._read_frame_data()
    278         result = np.fromstring(s, dtype='uint8')
    279 

/home/pablo/anaconda/envs/conda-forge/lib/python2.7/site-packages/skvideo/io/ffmpeg.pyc in _read_frame_data(self)
    269             self._terminate()
    270             err1 = str(err)
--> 271             raise RuntimeError("%s" % (err1,))
    272         return arr
    273 

RuntimeError: 

In principle, I could calculate the required number of frames in output and write a wrapper over the output of vreader I got, but I wonder if there is there is a way of doing this directly using vread (or if I am hitting a bug here).

Thanks for your help!
Pablo.

skvideo.io.FFmpegReader throws exception of str.encode

On line 153:

    if (str.encode(self.extension) in [b".raw", b".yuv"]):

and 176:
assert str.encode(self.extension).lower() in _FFMPEG_SUPPORTED_DECODERS, "Unknown decoder extension: " + self.extension.lower()

in FFmpegReader I am getting an "TypeError: descriptor 'encode' requires a 'str' object but received a 'unicode'. I am currently fixing this by casting self.extension to a str and then encoding it:

str.encode(str(self.extension))

but there is probably a better way? I'm not sure why self.extension is unicode on some of my movies but not others.

windows 10 cannot play video generated by skvideo.io.vwrite

Hello,
thanks for your development of this useful package. However, I ran into below issues:
operating system: windows 10
ffmpeg version:N-89803-g856b7cae9f
python 3.6
code:
########
import skvideo.io
import skvideo.datasets
import skvideo.utils
vid = skvideo.io.vread(skvideo.datasets.bigbuckbunny())
skvideo.io.vwrite("testbunny.mp4", vid)
########
the video does have size ~1M and duration 5seconds
But I cannot play the testbunny.mp4 by any player.
if I use ffmpeg to display the video information. it seems to be also OK.
image

Maybe I made some stupid mistakes. Can you help? thanks a lot!

video write seems to be hanging

Hello,

I'm trying to do a video write but it is hanging. I tried to follow the examples: rawsnippet.py and also ran the test suite, which hanged on the skvideo.tests.test_ffmpeg.test_FFmpegWriter ...

I'm using:
Python 2.7.12 :: Anaconda 4.1.1 (x86_64)
Macbook
scikit-video: latest code from github

Appreciate the help.

Thanks,
Carlos

FFMpegWriter input and output dict format

I installed the most recent version of scikit-video, and I was wondering if there is an example format for the inputdict or outputdict formats or keys. Going through the tutorial at (http://www.scikit-video.org/stable/io.html) the given example of this code doesn't work as written with the current version of scikit-video:

writer = skvideo.io.FFmpegWriter("outputvideo.mp4", (5, 480, 640, 3))

Is there a way an example could be provided of what the inputdict and outputdict values would be to alter the parameters of FFmpegWriter?

Specify fps rate while writing the video.

Hi,

I am using the skvideo.io.FFmpegWriter() function to write a video to a file. I want to specify the fps rate which should be used while saving this video. How can I do this. Kindly help.

Thanks,
Daksh

TypeError in block.py

File "/home/jmathai/miniconda3/lib/python3.6/site-packages/skvideo/motion/block.py", line 950, in blockMotion
motionData = np.zeros((numFrames - 1, height / mbSize, width / mbSize, 2), np.int8)
TypeError: 'float' object cannot be interpreted as an integer

frame rate of the last frame in the video

Hello,

I am trying to make videos with images,

so I use skvideo.io.FFmpegWriter and writeFrame to write them frame by frame.

writer = skvideo.io.FFmpegWriter(outputMp4,
                                 inputdict={
                                     '-r':'1'
                                 },
                                 outputdict={
                                     '-vcodec':'libx264',
                                     '-b': '30000000'
                                 })  
for i in resizeImagesMp4:
    writer.writeFrame(i)
writer.close()

However, when I set up a new frame rate, it do not work on the last image.

In other words, all the images in the video will delay for a second except for the last one.

How can I fix it?

Thanks a lot.

ffmpeg write stalls occassionally

Similar to #14, writing seems to stall randomly on OS X. I'm executing the same process (copying a few frames from a number of different AVI files and writing to a single mp4). It randomly stalls at different video files.

CTRL-C yields:

Traceback (most recent call last):
  File "./parse.py", line 36, in <module>
    writer.writeFrame(f)
  File "/usr/local/lib/python2.7/site-packages/skvideo/io/ffmpeg.py", line 439, in writeFrame
    self._proc.stdin.write(vid.tostring())

version info:

 ffmpeg -V
ffmpeg version 3.2.2 Copyright (c) 2000-2016 the FFmpeg developers
  built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
  libavutil      55. 34.100 / 55. 34.100
  libavcodec     57. 64.101 / 57. 64.101
  libavformat    57. 56.100 / 57. 56.100
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libavresample   3.  1.  0 /  3.  1.  0
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100
$ python
Python 2.7.9 (default, Dec 15 2014, 10:01:34)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import skvideo
>>> print(skvideo.__file__)
/usr/local/lib/python2.7/site-packages/skvideo/__init__.pyc

FFMpegReader input and output dict format

Is there documentation somewhere on how to use inputdict/outputdict to read a movie? I am unsure what parameters I am supposed to be passing it, and I keep getting errors. I am reading an H264 .avi file...after figuring out that I need to pass '-s' with the frame dimensions, I get the following error:

Traceback (most recent call last):
File "runFlyTracker.py", line 149, in
videodata = skvideo.io.FFmpegReader(movieName,{'-s':(str(width) + 'x' + str(height)).encode('asc
ii')})
File "C:\Anaconda\lib\site-packages\skvideo\io\ffmpeg.py", line 153, in init
if (str.encode(self.extension) in [b".raw", b".yuv"]):
TypeError: descriptor 'encode' requires a 'str' object but received a 'unicode'

...which I assume means that there are more parameters I need to pass in but what those are are somewhat opaque.

upload on conda-forge

I would be interested in having this package on conda-forge. I can also try to build the recipe myself, unless someone is already tackling the problem. Let me know if you agree, and I can proceed.

pictures are very blurry and objects are quadrupled

I used the following code to extract frames:

import skvideo.io
video = 'bobby_3.mov'

reader = skvideo.io.FFmpegReader(video)

i = 0
for frame in reader.nextFrame():
    cv2.imwrite('frame_2_'+str(i)+'.jpg',frame)
    i +=1

this is how a frame looks

image

I assume we need to fine tune a ffmpeg parameter, but not sure which ones (of course, I would also need to change RGB to BGR, but that is easy since based on the metadata, I know I must tune that).

If you look at the video on any video player, it looks just fine, medium resolution.

Did you come across such issue and know how to fix it?

Thanks so much.
Alejandro

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.