realfinder / avs-stuff Goto Github PK
View Code? Open in Web Editor NEWavs/avs+ Stuff
License: GNU General Public License v2.0
avs/avs+ Stuff
License: GNU General Public License v2.0
Instead of using the crappy lsb setting fft3d and dfttest could be used with native hibits content, which is much faster. There is even huge upside to use fft3d in high bits mode irrepective of the input clip bits, because this solves the banding issues fft3d has but is still faster then using dfttest on low bits.
Suggestion would be to replace the lsbd variable with something more readable like "forceHighBitFFT" and change the calls like that:
inHighBits = input.BitsPerComponent()>8
lowInForceHigh = forceHighBitFFT && !inHighBits
(Denoiser == "dfttest") ? sneo_dfttest(lowInForceHigh ? noiseWindow.ConvertBits(16) : noiseWindow, ....) : \
(Denoiser == "KNLMeansCL") ? ... : \
sneo_FFT3D(lowInForceHigh ? noiseWindow.ConvertBits(16) : noiseWindow, ....)
dnwindow = (Denoiser != "KNLMeansCL" && lowInForceHigh ) ? dnWindow.ConvertBits(8,dither=1) : dnWindow
dnwindow = (Denoiser == "KNLMeansCL" && lowInForceHigh ) ? dnWindow.ditherpost(....)
Time to use vsDegrainMedian, hope you update your script with new filter vsDegrainMedian
Hi, Hqdn3d already supports hdb and can process only luma. Can you replace Hqdn3dY/Hqdn3d16Y with Hqdn3d in Hqdn3d_2?
ddcomb is acting very strange, sometimes it actually introduces static dot crawl back or blurs area where there is no dot crawl at all heavily and even takes chunks out of lines, I use it to grab any residual dot crawl that may have been missed.
Do you think you can add anyway we can further control ddcomb?
Not sure if I'm missing something or if there are bugs in
https://github.com/realfinder/AVS-Stuff/blob/Community/avs%202.5%20and%20up/DFMDeRainbow.avsi
themask=subtract(org,YtoUV(first_u,first_v,org)).Levels(108,1,148,0,255)
\ .svsMSharpen(mask=true,threshold=maskthresh).Invert()
\ .Blur(0.5).Levels(0,2,255,0,255).Blur(0.5)
svsMSharpen should probably be just MSharpen
Also I get 'deen need a YV12 input' when using:
LoadCPlugin("I:\Hybrid\32bit\AVISYN~1\ffms2.dll")
LoadPlugin("I:\Hybrid\32bit\AVISYN~1\masktools2.dll")
LoadPlugin("I:\Hybrid\32bit\AVISYN~1\MSharpen.dll")
LoadPlugin("I:\Hybrid\32bit\AVISYN~1\FluxSmooth.dll")
LoadPlugin("I:\Hybrid\32bit\AVISYN~1\Deen.dll")
Import("I:\Hybrid\32bit\avisynthPlugins\Zs_RF_Shared.avsi")
Import("I:\Hybrid\32bit\avisynthPlugins\DFMDeRainbow.avsi")
SetFilterMTMode("DEFAULT_MT_MODE", MT_MULTI_INSTANCE)
FFVideoSource("F:\TESTCL~1\files\test.avi",cachefile="E:\Temp\avi_078c37f69bb356e7b5fa040c71584c40_853323747_1_0.ffindex",fpsnum=25,colorspace="YV12")
DFMDeRainbow(interlaced=false)
return last
I use the Deen version from http://ziquash.chez-alice.fr/Deen%20beta%202.zip
is there a newer one which support more than Yv12?
Error gone when change "int undershoot2" to "float undershoot2"
AVS-Stuff/avs 2.5 and up/LSFmod.avsi
Line 648 in 4bf0b83
AVS-Stuff/avs 2.5 and up/LSFmod.avsi
Line 229 in 4bf0b83
Hi.
Comparing original YLevelsC ( http://avisynth.nl/images/YLevels_mt.avsi ) and the one from the latest update here, there is a big difference (8-bit):
tv range yuv input
YlevelsC(16,4.5,15,0,240)
Can you add some info about:
Thanks.
You can still use it though with this patch:
diff --git a/avs 2.6 and up/QTGMC.avsi b/avs 2.6 and up/QTGMC.avsi
index 2e0f48e..197ffe0 100644
--- a/avs 2.6 and up/QTGMC.avsi
+++ b/avs 2.6 and up/QTGMC.avsi
@@ -211,6 +211,7 @@ function QTGMC( clip Input, string "Preset", int "TR0", int "TR1", int "TR2", in
# EdiMode="RepcYadif"/"cYadif" require the Yadif plugin, which doesn't autoload. Typically the calling script would load it.
# Temporary Warnings
+ AvsPlusVersionNumber = 9000
Assert( !defined(BT), "QTGMC: Setting BT has been replaced by setting NoiseTR" )
Assert( !defined(DetailRestore), "QTGMC: Setting DetailRestore has been renamed to GrainRestore" )
Assert( !defined(MotionBlur), "QTGMC: Setting MotionBlur has been renamed to ShutterBlur" )
@@ -359,7 +360,8 @@ function QTGMC( clip Input, string "Preset", int "TR0", int "TR1", int "TR2", in
EdiMaxD = (SourceMatch == 0) ? EdiMaxD : Select( mpNum1, 12, 10, 8, 7, 7, 6, 6, 5, 4, 4 )
EdiQual = (SourceMatch == 0) ? EdiQual : Select( mpNum1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 )
TempEdi = EdiMode # Main interpolation is actually done by basic-source match step when enabled, so a little swap and wriggle is needed
- EdiMode = (SourceMatch == 0) ? EdiMode : default( MatchEdi, ((mpNum1 < 9) ? EdiMode : "Yadif") ) # Force Yadif for "Ultra Fast" basic source match
+ #EdiMode = (SourceMatch == 0) ? EdiMode : default( MatchEdi, ((mpNum1 < 9) ? EdiMode : "Yadif") ) # Force Yadif for "Ultra Fast" basic source match
+ EdiMode = "Yadif"
MatchEdi = TempEdi
# Very Very Super Ultra
@@ -377,7 +379,7 @@ function QTGMC( clip Input, string "Preset", int "TR0", int "TR1", int "TR2", in
# Core and Interpolation defaults
TR2 = (SourceMatch > 0) ? default(TR2, ((TR2X == 0) ? 1 : TR2X)) : TR2X # ***TR2 defaults always at least 1 when using source-match***
RepChroma = default( RepChroma, true )
- EdiThreads = default( EdiThreads, sh_GetUserGlobalIMTint(true) )
+ EdiThreads = default( EdiThreads, 20 )
ChromaEdi = default( ChromaEdi, "" )
NNeurons = (EdiMode == "NNEDI2" && NNeurons > 2) ? 2 : NNeurons # Smaller range for NNeurons in NNEDI2 (which calls it nsize)
EdiQual = (EdiMode == "EEDI3+NNEDI3" || EdiMode == "NNEDI3" || EdiMode == "BWDIF+NNEDI3" || EdiMode == "BWDIF+EEDI3") && EdiQual > 2 ? 2 : EdiQual # Smaller range for EdiQual in NNEDI3
@@ -420,7 +422,7 @@ function QTGMC( clip Input, string "Preset", int "TR0", int "TR1", int "TR2", in
(defined(EZDenoise) && EZDenoise > 0.0) ? EZDenoise : \
(defined(EZKeepGrain) && EZKeepGrain > 0.0) ? 4.0 * EZKeepGrain : 2.0
FftThreads = default( FftThreads, EdiThreads )
- bomt = sh_GetUserGlobalIMTbool()
+ bomt = true
ChromaNoise = default( ChromaNoise, false )
ShowNoise = default( ShowNoise, 0.0 )
ShowNoise = IsBool( ShowNoise ) ? (ShowNoise ? 10.0 : 0.0) : ShowNoise
@@ -509,7 +511,7 @@ function QTGMC( clip Input, string "Preset", int "TR0", int "TR1", int "TR2", in
planarClip = yuy2 ? clip.nonyuy2clipin(true) : clip
# Bob the input as a starting point for motion search clip
- bobbed = (InputType == 0) ? UseEdiExt > 0 ? isyuy2(EdiExt) ? EdiExt.nonyuy2clipin(true) : EdiExt : planarClip.sh_Bob( 0,0.5 ) : \
+ bobbed = (InputType == 0) ? UseEdiExt > 0 ? isyuy2(EdiExt) ? EdiExt.nonyuy2clipin(true) : EdiExt : planarClip.Bob( 0,0.5 ) : \
(InputType == 1) ? planarClip : \
planarClip.Blur( 0,1 )
bobbed = (InputType == 0) && UseEdiExt > 1 ? bobbed.Vinverse() : bobbed
@@ -778,7 +780,7 @@ function QTGMC( clip Input, string "Preset", int "TR0", int "TR1", int "TR2", in
# Expand fields to full frame size before extracting noise (allows use of motion vectors which are frame-sized)
fullClip = (NoiseProcess == 0) ? NOP() : \
(InputType > 0) ? clip : \
- clip.sh_Bob( 0,1.0 )
+ clip.Bob( 0,1.0 )
fullClip = (yuy2 && NoiseTR > 0) ? fullClip.nonyuy2clipin(true) : fullClip
fullSuper = (NoiseTR > 0) ? defined(bomt) ? fullClip.MSuper( pel=SubPel, levels=1, hpad=hpad, vpad=vpad, chroma=ChromaNoise, mt=bomt ) : fullClip.MSuper( pel=SubPel, levels=1, hpad=hpad, vpad=vpad, chroma=ChromaNoise ) : NOP() #TEST chroma OK?
@@ -822,7 +824,7 @@ function QTGMC( clip Input, string "Preset", int "TR0", int "TR1", int "TR2", in
noise = (totalRestore > 0.0) ? mt_makediff( planarClip, planarDenoised, U=CNmt1,V=CNmt1 ) : NOP()
deintNoise = (NoiseProcess == 0 || totalRestore == 0.0) ? NOP() : \
(InputType != 0) ? noise : \
- (NoiseDeint == "Bob") ? noise.sh_Bob( 0,0.5 ) : \
+ (NoiseDeint == "Bob") ? noise.Bob( 0,0.5 ) : \
(NoiseDeint == "Generate") ? noise.QTGMC_Generate2ndFieldNoise( denoised, ChromaNoise ) : \
noise.DoubleWeave()
# Motion-compensated stabilization of generated noise
@@ -1064,19 +1066,19 @@ function QTGMC_Interpolate( clip Input, int InputType, string EdiMode, int NNSiz
(EdiMode == "Yadif") ? isyuy2(Input) ? Input.nonyuy2clipin(true).Yadifmod2( mode=3 ).nonyuy2clipout(true) : Input.Yadifmod2( mode=3 ) : \
(EdiMode == "cYadif") ? Input.Yadif( mode=3 ) : \
(EdiMode == "TDeint") ? Input.TDeInt( mode=1 ) : \
- (EdiMode == "RepYadif") ? isyuy2(Input) ? Repair( Input.nonyuy2clipin(true).Yadifmod2( mode=3 ), default( Fallback, Input.sh_Bob( 0,0.5 ) ).nonyuy2clipin(true), 2, 0 ).nonyuy2clipout(true) : \
- Repair( Input.Yadifmod2( mode=3 ), default( Fallback, Input.sh_Bob( 0,0.5 ) ), 2, 0 ) : \
- (EdiMode == "RepcYadif") ? isyuy2(Input) ? Repair( Input.Yadif( mode=3 ).nonyuy2clipin(true), default( Fallback, Input.sh_Bob( 0,0.5 ) ).nonyuy2clipin(true), 2, 0 ).nonyuy2clipout(true) : \
- Repair( Input.Yadif( mode=3 ), default( Fallback, Input.sh_Bob( 0,0.5 ) ), 2, 0 ) : \
+ (EdiMode == "RepYadif") ? isyuy2(Input) ? Repair( Input.nonyuy2clipin(true).Yadifmod2( mode=3 ), default( Fallback, Input.Bob( 0,0.5 ) ).nonyuy2clipin(true), 2, 0 ).nonyuy2clipout(true) : \
+ Repair( Input.Yadifmod2( mode=3 ), default( Fallback, Input.Bob( 0,0.5 ) ), 2, 0 ) : \
+ (EdiMode == "RepcYadif") ? isyuy2(Input) ? Repair( Input.Yadif( mode=3 ).nonyuy2clipin(true), default( Fallback, Input.Bob( 0,0.5 ) ).nonyuy2clipin(true), 2, 0 ).nonyuy2clipout(true) : \
+ Repair( Input.Yadif( mode=3 ), default( Fallback, Input.Bob( 0,0.5 ) ), 2, 0 ) : \
(EdiMode == "BWDIF+NNEDI3") ? isyuy2(Input) ? Input.nonyuy2clipin(true).BWDIF(-2,edeint=NNEDI3clp.nonyuy2clipin(true)).Vinverse(clip2=NNEDI3clp.nonyuy2clipin(true)).nonyuy2clipout(true) : Input.BWDIF(-2,edeint=NNEDI3clp).Vinverse(clip2=NNEDI3clp) : \
(EdiMode == "BWDIF+EEDI3") ? isyuy2(Input) ? Input.nonyuy2clipin(true).BWDIF(-2,edeint=EEDI3clp.nonyuy2clipin(true)).Vinverse(clip2=NNEDI3clp.nonyuy2clipin(true)).nonyuy2clipout(true) : Input.BWDIF(-2,edeint=EEDI3clp).Vinverse(clip2=NNEDI3clp) : \
- default( Fallback, Input.sh_Bob( 0,0.5 ) )
+ default( Fallback, Input.Bob( 0,0.5 ) )
interpuv = (InputType == 1) ? NOP() : \
(ChromaEdi == "NNEDI3") ? Input.NNEDI3( field=-2, nsize=4, nns=0, qual=1, threads=EdiThreads, Y=false ) : \
(ChromaEdi == "Yadif") ? isyuy2(Input) ? Input.nonyuy2clipin(true).Yadifmod2( mode=3 ).nonyuy2clipout(true) : Input.Yadifmod2( mode=3 ) : \
(ChromaEdi == "cYadif") ? Input.Yadif( mode=3 ) : \
- (ChromaEdi == "Bob") ? Input.sh_Bob( 0,0.5 ) : \
+ (ChromaEdi == "Bob") ? Input.Bob( 0,0.5 ) : \
NOP()
return (!IsClip(interpuv)) ? interp : interp.MergeChroma( interpuv )
@@ -1324,4 +1326,4 @@ function QTGMC_GetUserGlobal( string Prefix, string Name, bool "Reuse" )
try { ret = Reuse ? Eval( globalName ) : NOP() }
catch (e) { ret = NOP() }
return ret
-}
\ No newline at end of file
+}
With the most updated TIVTC and TDeint:
https://github.com/pinterf/TIVTC/releases
Im getting errors "TFMPP: clip2 colorspace must be the same as input clip!"
and "I dont know what "dm" means" - (only happens when using Prefetch() and mode =2)
^This was srestore getting mad at prefetch
Hi,
why not replace SangNom with SangNom2 in ContraSharpen_mod.avsi and ZS_AVS_Shared_Functions.avsi?
Hi, I saw you changed Vinverse_avsi with the latest vinverse in QTGMC.avsi. Can you do the same with AnimeIVTC.avsi and AutoDeblock2.avsi?
I meet this error when try index video with lsmashsource
Script error: expected "val", "bool", "int", "float", "string", "array", or "clip" (or their "_array" versions
(C:/Program Files (x86)/AviSynth+/plugins64+/LSFmod_v2.192.avsi, line 422, column 0)
At some point in LSFmod.avsi, Smethod=5 was removed:
477 Assert( ( Smethod >= 1 && Smethod <= 4 ) ? true : false, chr(10) + "'Smethod' have not a correct value! [1,2,3,4]" + chr(10))
According to the AviSynth Wiki, these should be the values for Smethod:
int Smethod = 2
Sharpening method: (not used for Smode=1&2)
1 : 3x3 Kernel
2 : Min/Max (original)
3 : Min/Max (enhanced)
4 : Min/Max (original) + 3x3 Kernel
5 : Min/Max (enhanced) + 3x3 Kernel
Are these Smethods still the same? Is it correct that Smethod=5 should be removed?
I seen Dogway updated new ver MasksPack, can you still mod new ver MasksPack or delete it on your mod scripts??
Updating MasksPack to v2.5
Removed SatMask (now in GradePack), updated BoxMask and LumaMask: https://github.com/Dogway/Avisynth-Scripts/blob/master/MasksPack.v2.5.avsi
GradePack add Satmask: https://github.com/Dogway/Avisynth-Scripts/blob/master/GradePack.v1.0.avsi
Hi.
I uploaded here diff for Advanced Denoising.avsi, nnedi3_resize16.avsi and ZS AVS Shared Functions.avsi. Without those changes the scripts aren't working. ZS AVS Shared Functions.avsi has added few helper functions.
I checked with avs info tool and meet this error:
[Plugin errors/warnings]
Function duplicates:
"FillBorders" : "[PluginFunction]"
"FillBorders" : "C:\Program Files (x86)\AviSynth+\plugins64+\Stabilization_Tools_Pack_v2.1mod2.51.avsi"
"undefined" : "[InternalFunction]"
"Undefined" : "C:\Program Files (x86)\AviSynth+\plugins64+\Zs_RF_Shared_v1.139.avsi"
Hi,
Thank you for you effort, it is much appreciated.
On line 601 of QTGMC.avsi
I trust
V==ChromaNoise?3:2
should be changed to
V=ChromaNoise?3:2
All the best,
Milan
"MinBlur" : "C:\Program Files (x86)\AviSynth+\plugins+\rm_logo_.avsi"
"MinBlur" : "C:\Program Files (x86)\AviSynth+\plugins+\Zs_RF_Shared_v1.154.avsi"
I got a warning after I updated the new Zs_RF_Shared.avsi and QTGMC.avsi just now.
”Import: UTF-8 source files with BOM are not supported, re-save script with ANSI or UTF8 w/o BOM encoding! : "C:/Program Files (x86)/AviSynth+/plugins64+/Zs_RF_Shared.avsi"
(F:\so hurt_temp\so hurt_source.avs, line 2)”
In Turkish alphabet, the uppercase for i is İ, not I like in English. (I is the uppercase letter for the lowercase letter ı in Turkish.)
QTGMC adopts the uppercase name NNEDI3
as an alias function name for nnedi3
in NNEDI3 plugin or plugins_JPSDR plugin. Although AviSynth is indifferent between cases, this uppercase function call raises an issue in the particular case of Turkish locale.
StaxRip developers/collaborators found this issue while discussing a mysterious error caused by QTGMC with a Turkish user. On Turkish locale, the critical plugin 'plugins_JPSDR' was not automatically loaded when QTGMC was called. (Other filters that require the same 'plugins_JPSDR' do not fail. Eg., nnedi
)
This issue was fixed only after the user changed the function name from 'NNEDI3' to 'nnedi3'. Please see this.
And please also refer to the related issue thread on the StaxRip repo: here.
It'd be greatly appreciated if you could fix this issue by changing the letter cases.
Just wanted to let you know that since you removed dither.avsi, HQDeringmod.avsi doesn't work any more since it relies on dither.avsi.
Hi,
ffvideosource(1080p)
Crop(0, 138, -0, -138)
daa3mod()
has green lines on the bottom - https://images2.imgbox.com/86/e5/yIakeDy3_o.png
Hi,
colorbars(pixel_type="yv12")
import("DFMDeRainbow.avsi")
DFMDeRainbow()
gives error "I don't know what 'org_ue' means."
Maybe line 52 and 55 should be org_u and org_v - https://github.com/realfinder/AVS-Stuff/blob/Community/avs%202.5%20and%20up/DFMDeRainbow.avsi#L52
I error with some screenchange in this video when use with AnimeITVC(1)
https://drive.google.com/file/d/1TqPZyX0HfjdTCO3PNyhslgYxV87C4EUI/view?usp=sharing
At this point, if you want to use bbob4_params or cbob4_params in AnimeIVTC, you have to word the string like ", [params here]". So, for example, bbob4_params=", Rep0=7,Rep1=7,Rep2=7". I think it might make more sense to have the comma and space concatenated already so the user doesn't have to insert it themselves, or wonder what the issue is when they don't. Thanks!
Hi,
Using the latest update has memory leak.
ffvideosource()
#convertbits(x)
f3kdb_3_adg()
Any bit depth from 8-bit to 16-bit is using 2GB+ for only few frames.
Btw this version https://pastebin.com/cAqHEzPJ has the same memory leak only for 8-bit but it's fine from 10-bit to 16-bit.
Also using f3kdb_3_adg(random_algo_ref=2, random_algo_grain=2) the speed is significantly lower compared to f3kdb_3_adg(). (neo-)f3kdb(random_algo_ref=2, random_algo_grain=2) has almost the same speed as (neo-)f3kdb(). Is it expected behavior?
Hi,
Can you add vsMSharpen and vsTCanny in that script?
Thanks.
It brings a speed improvement at no cost at all to always restrict the srchClip to 8 bits before feeting it to MAnalyse. This could actually being done as early as the very beginning of the "Motion Analysis" stage at the "bobbed" clip:
bobbedMA = input.BitsPerComponent()>8 ? bobbed.ConvertBits(8,dither=-1) : bobbed
In the rest of the "Motion Analysis" stage "bobbedMA" would be used instead of "bobbed"
Cause sbr plugin doesn't have an r parameter so I think you need to use sbr_avsi to replace sbr
Problem is that neo_fft3d does not have an 'ncpu' argument.
-> Zs_RF_Shared.avsi should be adjusted accordingly
see: https://github.com/HomeOfAviSynthPlusEvolution/neo_FFT3D/blob/master/src/fft3d_common.h 'struct EngineParams' (line 48+)
I meet crach immediately when use stab3 with video
https://drive.google.com/file/d/1XR3jjFkH3ZlDzJD57WbFr1DLIV4CHeDq/view?usp=sharing
Srcipt:
TurnRight
Stab3
Hi,
yuy26 should be replaced with sisyuy2 here - https://github.com/realfinder/AVS-Stuff/blob/Community/avs%202.5%20and%20up/F3KDB_s.avsi#L172
What about adding support for the clips different than 16-bit for f3kdb_3_adg? Here one solution - https://pastebin.com/cAqHEzPJ
Line 56 should be:
noutput_mode==1 ? last.convertbits(16,false).ConvertToStacked() : noutput_mode==2 ? last.convertbits(16,false).ConvertToDoubleWidth() : last
How it currently is, it will just return the input clip when using stacked input/output.
Need change name from Zs_RF_shared (maybe)
AVS-Stuff/avs 2.5 and up/Zs_RF_Shared.avsi
Line 677 in 6a90497
I think need add BM3D same KNLMeansCL prefilters for quality denoise
Hi,
The result of 8-bit and 16-bit is different. Test:
colorbars(pixel_type="yuv420p16") #colorbars(pixel_type="yv12")
FixChromaBleedingMod(-200)
ExtractV()
G'day!
Thanks for these wonderful scripts. I just upgraded to v1.78 and encountered a glitch. I've uploaded a sample along with an image comparison.
Image Comparison:
https://slow.pics/c/ykjOGizV
Sample:
https://www.dropbox.com/s/tjbq3gsqmb76yae/rt.m2v?dl=0
Script:
MPEG2Source("rt.d2v", cpu=0)
TFM(order=1).Tdecimate()
ASTDR() / ASTDRmc()
Kind Regards
The SearchParam for Search=4 and 5 look very suspicious. I would have expected them to increase in radius for the slower presets, especially for placebo, very slow and slow.
Following the x264 documentation the search range for hex (=4) and umh (=5) can be up to 16 or 24. At a maximal range of 2 I doubt that uhm and hex are much better then Search=2 with SearchParam=2.
I tested that hypothesis by returning the "noiseWindow" clip and scrolling through a film and comparing Search=0,4,5 at SearchParam=2. And indeed the result was basically identical for SearchParam=2. Increasing SerachParam for hex and umh however yielded much better results the more the content was moving.
Hi,
Both vsTEdgeMask and TEedgeMask have identical outputs (default parameters).
Can you update ASTDR.avsi and ContraSharpen_mod.avsi for vsTEdgeMask?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.