Giter VIP home page Giter VIP logo

obj2tiles's Introduction

Obj2Tiles - Converts OBJ file to 3D Tiles format

license commits languages Build & Test Publish

Obj2Tiles is a fully fledged tool to convert OBJ files to 3D Tiles format. It creates multiple LODs, splits the mesh and repacks the textures.

Installation

You can download precompiled binaries for Windows, Linux and macOS from https://github.com/OpenDroneMap/Obj2Tiles/releases.

Command line parameters


  Input (pos. 0)         Required. Input OBJ file.
  Output (pos. 1)        Required. Output folder.
  
  -s, --stage            (Default: Tiling) Stage to stop at (Decimation, Splitting, Tiling)
  
  -l, --lods             (Default: 3) How many levels of details

  -d, --divisions        (Default: 2) How many tiles divisions
  -z, --zsplit           (Default: false) Splits along z-axis too
  -k, --keeptextures     (Default: false) Keeps original textures
  
  --lat                  Latitude of the mesh
  --lon                  Longitude of the mesh
  --alt                  (Default: 0) Altitude of the mesh (meters)
  -e, --error            (Default: 100), baseError value for root node
  --scale                (Default: 1), scale for data if using units other than meters ( 1200.0/3937.0 for survey ft)  
  
  --use-system-temp      (Default: false) Uses the system temp folder
  --keep-intermediate    (Default: false) Keeps the intermediate files (do not cleanup)
  
  --help                 Display this help screen.
  --version              Display version information.

The pipeline is composed of the following steps:

Decimation

The source obj is decimated using the Fast Quadric Mesh Simplification algorithm (by Mattias Edlund). The algorithm was ported from .NET Framework 3.5 to .NET Core 6.0. The original repo is here.

You can specify how many LODs (levels of detail) you want to generate using the --lods parameter. The decimation levels are generated using this formula:

quality[i] = 1 - ((i + 1) / lods)

For example: with 5 LODs the program will use the following quality levels: 80%, 60%, 40%, 20%. If you specify 1 LOD, the decimation will be skipped.

Splitting

For every decimated mesh, the program splits it recursively along x, y and z axis (optional using the --zsplit flag). Every split is a new mesh with repacked textures (to save space), the bin pack algorithm is by Jukka Jylänki. If you want to preserve the original textures, use the --keeptextures flag (not recommended)

You can control how many times the split is performed by using the --divisions flag. The model will be split into divisions^2 meshes (or divisions^3 if --zsplit is used).

3D Tiles conversion

Each split mesh is converted to B3DM format using ObjConvert. Then the tileset.json is generated using the resulting files. You can specify the --lat and --lon and --alt parameters to set the location of the model. See the Remarks section to find out how to rotate the model.

Running

Obj2Tiles is built using .NET Core 6.0. Releases are available on GitHub for a multitude of platforms (win / linux / mac). You can download the latest release or compile it yourself using the following commands:

git clone https://github.com/OpenDroneMap/Obj2Tiles.git
cd Obj2Tiles
dotnet build -c Release

Examples

You can download the test obj file here. The Brighton Beach textured model generated using OpenDroneMap.

Basic usage (using defaults)

It runs all the pipeline stages and generates the tileset.json file in the output folder.

Obj2Tiles model.obj ./output

Decimation

Stop the pipeline at the decimation stage and generate 8 LODs

Obj2Tiles --stage Decimation --lods 8 model.obj -o ./output

Splitting

Stop the pipeline at the splitting stage and generate 3 divisions per axis

Obj2Tiles --stage Splitting --divisions 3 model.obj ./output

Full pipeline

Run all the pipeline stages and generate the tileset.json file in the output folder.

Obj2Tiles --lods 8 --divisions 3 --lat 40.689434025350025 --lon -74.0444987716782 --alt 120 model.obj ./output

Rotating the model

After generating tileset.json, you can edit the file and change the 4x4 Transform matrix to account for translation, rotation and scaling. This is the matrix structure:

TransformationMatrix1

The tiling stage uses this matrix to place the model in the requested geo location:

Translation-Matrix1

But you can add scaling:

Scaling-Matrix1

Or rotation around any of the 3 axes:

RotationX-Matrix1

RotationY-Matrix1

RotationZ-Matrix1

By combining these matrices, you can rotate, scale and translate the model.

You can find more details about this topic on BrainVoyager

Remarks

All the pipeline stages are multi threaded to speed up the process. You can stop the pipeline at any stage by providing the --stage flag. If you need to keep the intermediate files, use the --keep-intermediate flag. You can use the --use-system-temp flag to use the system temp folder instead of the output folder.

Gallery

cesium

split-brighton

z-split

obj2tiles's People

Contributors

andreiveselov avatar charly-perspectives avatar eziohelios avatar hedo88th avatar kgdev avatar pierotofy 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

obj2tiles's Issues

CopyImage row and col index out of range

in MeshT.cs

CopyImage row and col index out of range

can u tell how to modify the parms?

Common.CopyImage(texture, newTexture, clusterX, adjustedSourceY, clusterWidth, clusterHeight,
                newTextureClusterRect.X, adjustedDestY);

Obj2Tiles conversion Memory leakage

We ran Obj2Tiles conversion for a model of size 470 mb . At the step of writing to tiles, obj2tiles library consuming memory of 60GB RAM and 60 GB SWAP Memory and got killed at end due to OOM issue

The machine configuration is a 60GB RAM system and Version of Obj2Tiles used : v1.0.11.
The RAM memory gets fully consumed while running the command and gets killed automatically.

Command used for conversion : Obj2Tiles input_dir/model_name.obj ./output_dir

Model files to reproduce the issue : https://drive.google.com/file/d/1kLltbY4pNS3Zk_AzRMV1Svn9lD25dhxu/view?usp=sharing

Screenshot_20221114_151119

Anyone have any possible explanation on why it is getting killed.

Improve texture packing

Add clearance between texture rectangles when bin packing. This will allow for easy reduction when it is possible.

a BUG

Box3 Bounds in Mesh.cs,
maxX = v.X > maxX ? maxX : v.X;
maxY = v.Y > maxY ? maxY : v.Y;
maxZ = v.Z > maxZ ? maxZ : v.Z;
pls revise it

Obj2Tiles tiles generating without texture.

What is the problem?

Hello, the project ran great but the problem is that when running the model the tiles are getting generated without texture.
See output below:
image

What should be the expected behavior?

The expected behaviour should be a model with texture.
See expected output below:
image

How can we reproduce this? THIS IS IMPORTANT. What steps did you do to trigger the problem? If this is an issue with processing a model, YOU MUST include a copy of your model uploaded on Google Drive or Dropbox (otherwise we cannot reproduce this) along with the command line parameters you used to process it.

Link to download: https://www.dropbox.com/s/w5ndp7emp9cvhxl/Test_DamInspection.zip?dl=0

The command that was ran to build the tiles was: Obj2Tiles c:\objtest\Test_DamInspection.obj .\output
I also tried running it using the --keeptextures flag.

Add ability to specify coordinate system units on a command line


First of all, thank you for taking the time to report an issue.

Before you continue, make sure you are in the right place. Please open an issue only to report faults and bugs. For questions and discussion please open a topic on http://community.opendronemap.org/c/opendronemap.

Please use the format below to report bugs and faults.


What is the problem?

We have OBJ meshes created using different coordinate systems. Some are UTM and use meters, some are State Plane coordinate system for US and they might use feet as units. If I ran Obj2Tiles on UTM created meshes and specify center longitude, latitude and altitude, everything is positioned correctly in Cesium. If I do the same with datasets that use feet, data is scaled incorrectly, since feet are used for X,Y,Z offsets and not meters.

I assume I can try to modify transformation matrix by multiplying it with a scale matrix for X,Y,Z, but would we good to have it as a part of a command

What should be the expected behavior?

Ideally, would be good to have ability to specify a unit as part of a command. Maybe have "--u meter" or "--u feet". If no unit is specified, then we can assume meters for backward compatibility.

How can we reproduce this? THIS IS IMPORTANT. What steps did you do to trigger the problem? If this is an issue with processing a model, YOU MUST include a copy of your model uploaded on Google Drive or Dropbox (otherwise we cannot reproduce this) along with the command line parameters you used to process it.

[I would be able to create a sample dataset if needed]

[Question] top-level matrix in tileset.json has rotation defined

Hello,

thank you for the tool, i'm currently trying to rotate my model once displayed on the map, as such I was playing with the tileset.json file top-level matrice and noticed something strange,

this tool explains that only transformation is applied (to go from local coordinates to ECEF coordinates) however the matrix has predefined values on rotation parts

image

shouldn't the matrix be as following ?

1 0 0 0
0 1 0 0
0 0 1 0
tX tY tZ 1

could you explain why isnt that the case and how would I go about applying custom rotation ?

Reduce warnings

The builds produce a lot of warnings. Lots of them can be easily removed and / or fixed.

Generated 3D tiles not valid according to 3d-tiles-validator

What is the problem?

I have tried to run Obj2Tiles (v1.0.12) using the sample Brighton data, and to verify it is producing a correct dataset, I have used 3d-tiles-validator tool. The tool reported various errors - meaning that the Obj2Tiles probably does not follow the spec in some areas.

What should be the expected behavior?

There should be no errors reported by 3d-tiles-validator

How can we reproduce this?

  1. download sample data: https://github.com/DroneDB/test_data/raw/master/brighton/odm_texturing.zip
  2. run Obj2Tiles: ./Obj2Tiles odm/odm_textured_model_geo.obj 3dt
  3. install 3d-tiles-validator: npm install 3d-tiles-validator
  4. run validator on the output: npx 3d-tiles-validator --tilesetFile 3dt/tileset.json > errors.txt

The validator reports various errors - 34 in total - see errors.txt

Exception: Invalid texture coordinates


First of all, thank you for taking the time to report an issue.

Before you continue, make sure you are in the right place. Please open an issue only to report faults and bugs. For questions and discussion please open a topic on http://community.opendronemap.org/c/opendronemap.

Please use the format below to report bugs and faults.


What is the problem?

I am getting the following exception:
!> Exception: Invalid texture coordinates: (11.415483; 8.501141)

The above exception is thrown when trying to run Obj2Tile for an OBJ file exported from Blender. The conversion works well if I disabled UV Coordinates when exporting the file but nothing shows up when I view the exported tileset in Cesium!

What should be the expected behavior?

I expect the tileset to be generated successfully and is displayed correctly in CesiumJS.

How can we reproduce this? THIS IS IMPORTANT. What steps did you do to trigger the problem? If this is an issue with processing a model, YOU MUST include a copy of your model uploaded on Google Drive or Dropbox (otherwise we cannot reproduce this) along with the command line parameters you used to process it.

Command line params:
./Obj2Tiles ./FixedTexture.obj output-dir --lat 25.33263 --lon 51.18725 --alt 126

Copy of model:
https://drive.google.com/drive/folders/1zszbKmMWngQVSwma7Dy_IfYAsfHPB-TX?usp=sharing

Unhandled exception. System.IO.IOException: The process cannot access the file

?> Loaded 3829944 vertices, 1758548 faces in 4727ms
-> Splitting with a depth of 1
?> Done 22249 edge splits in 3891ms (5.72 split/ms)
-> Writing tiles
!> Exception: Index was outside the bounds of the array.

=> Pipeline completed in 00:48:46.2553339
=> Cleaning up
Unhandled exception. System.IO.IOException: The process cannot access the file 'Mesh-XL-YL-texture-SimplygonCastMaterial_016.jpg' because it is being used by another process.
at System.IO.FileSystem.RemoveDirectoryRecursive(String, WIN32_FIND_DATA&, Boolean)
at System.IO.FileSystem.RemoveDirectory(String, Boolean)
at Obj2Tiles.Program.Run(Options opts)
at CommandLine.ParserResultExtensions.WithParsedAsync[T](ParserResult1 result, Func2 action)
at Obj2Tiles.Program.Main(String[] args)
at Obj2Tiles.Program.

(String[] args)

Exception: The number of sub-mesh material names does not match the count of sub-mesh index arrays.


First of all, thank you for taking the time to report an issue.

Before you continue, make sure you are in the right place. Please open an issue only to report faults and bugs. For questions and discussion please open a topic on http://community.opendronemap.org/c/opendronemap.

Please use the format below to report bugs and faults.


What is the problem?

when i use Obj2Tiles to split my obj file have a exception :Exception: The number of sub-mesh material names does not match the count of sub-mesh index arrays.

What should be the expected behavior?

Please tell me , why this exception happened, and how to solve it. If it is the format of the Obj data itself, please give me an answer. Thank you very much!

How can we reproduce this? THIS IS IMPORTANT. What steps did you do to trigger the problem? If this is an issue with processing a model, YOU MUST include a copy of your model uploaded on Google Drive or Dropbox (otherwise we cannot reproduce this) along with the command line parameters you used to process it.

[Type answer here]

Obj2Tiles conversion taking more than 24 hours for 400MB+ file

We ran a model of size 420MB and after 24 hrs of running the command, it only completed about 4 steps is taking too much time to execute.
The machine configuration is a 30GB RAM system and Version of Obj2Tiles used : v1.0.11.
command we used for conversion : Obj2Tiles --lods 8 input_dir/model_name.obj ./output_dir

Is there any limitation within the library on model size? or do we have any suggested specifications for running on larger models?

WhatsApp Image 2022-11-11 at 10 58 41 AM

macos - tilesset.json not created

Basic run -
$ ./Obj2Tiles ./model.obj ./output
results in an exeption
Exception: One or more errors occurred. (Empty path name is not legal. (Parameter 'path'))

Exception: The given key 'Mesh-XL-YL-XL-YR-XL-YR-XL-YL-XR-YR-XR-YL' was not present in the dictionary.


First of all, thank you for taking the time to report an issue.

Before you continue, make sure you are in the right place. Please open an issue only to report faults and bugs. For questions and discussion please open a topic on http://community.opendronemap.org/c/opendronemap.

Please use the format below to report bugs and faults.


What is the problem?

I keep getting this exception when trying on certain meshes. Usually lowering the depth would fix this issue for most of the meshes, but this time I am not able to work around this exception also it takes unusually long time to generate tiles for a 1.7GB mesh on a container with 8 vcpus and 50 GBs of RAM.

image

What should be the expected behavior?

Obj2Tiles should be able to tile a large mesh in a reasonable time.

How can we reproduce this? THIS IS IMPORTANT. What steps did you do to trigger the problem? If this is an issue with processing a model, YOU MUST include a copy of your model uploaded on Google Drive or Dropbox (otherwise we cannot reproduce this) along with the command line parameters you used to process it.

You can download the mesh from here:
https://plasio.s3.us-east-2.amazonaws.com/zurich_mesh.zip

Command:
Obj2Tiles textured_mesh.obj ./output/ -d 6 (gives the dictionary error)
Obj2Tiles textured_mesh.obj ./output/ -d 4 (Takes a lot of time)
Obj2Tiles textured_mesh.obj ./output/ -d 3 (Takes a lot of time)

Keep colors on obj objects with vertex colors ?


First of all, thank you for taking the time to report an issue.

Before you continue, make sure you are in the right place. Please open an issue only to report faults and bugs. For questions and discussion please open a topic on http://community.opendronemap.org/c/opendronemap.

Please use the format below to report bugs and faults.


What is the problem?

Vertices colors are not exported, e.g when a vertex is specified with x/y/z and r/g/b components in obj file by writing vertex line as follow "v x y z r g b", r/g/b vector is ignored after exporting.

What should be the expected behavior?

Would it be possible to keep vertex colors ?

How can we reproduce this?

Run a obj file that have vertices with colors.
box.zip
See attached example.

Exception: Access to the path '_______' is denied

What is the problem?

[When downloading some OBJ files, I noticed that they don't have external MTL files, but their first line is "mtllib ". When running the program in this case, it throws an exception-Exception: Access to the path '________' is denied.]

What should be the expected behavior?

[I hope to handle this situation by ignoring the 'mtllib ']

How can we reproduce this? THIS IS IMPORTANT. What steps did you do to trigger the problem? If this is an issue with processing a model, YOU MUST include a copy of your model uploaded on Google Drive or Dropbox (otherwise we cannot reproduce this) along with the command line parameters you used to process it.

[It is possible to reproduce the exception in OBJ files that do not use external MTL files by adding 'mtllib' on the first line]

Snipaste_2023-12-26_11-20-30

Keep colors on obj objects that have no textures?

What is the problem?

After export all of the materials that don't have a texture becomes grey

What should be the expected behavior?

Would it be possible to keep the material colors for materials that do not have any texture?

How can we reproduce this?

Run a obj file that have no textures for the materials. Se attached example.

materials_only2.zip

normal maps in ObjTiles

Hi there, while working with ObjTiles i figured out normal maps arent supported for the OBJ import/export
the "norm" attribute isnt featured in the official OBJ format specs, but has been extended for physically-based rendering in various softwares
read more here

Pr/map_Pr     # roughness
Pm/map_Pm     # metallic
Ps/map_Ps     # sheen
Pc            # clearcoat thickness
Pcr           # clearcoat roughness
Ke/map_Ke     # emissive
aniso         # anisotropy
anisor        # anisotropy rotation
**norm          # normal map (RGB components represent XYZ components of the surface normal)**

is that an extension that ObjTiles author would consider ? having normal map read / write feature would be usefull,
more over do you know if the 3D tiles specifications ( gltf buffer ) will allow a diffuse + normal information ?
thx

OBJ model conversion failed

First of all, thank you for contributing such a great tool. Secondly, my question is: My OBJ model was exported through Blender, and I have also tried to import it back into Blender or 3dmax, and it displayed correctly. The model should not have any problems, but why did I report an error when using this tool to convert it to tiles: Exception: Element not supported:'l 62675 62676 '? Is it because the model is too large that it cannot be converted, or is it due to other reasons? I hope you can answer this. Thank you

Error not applying texture

hi
I am using this tool well.
However, when I extract b3dm and tileset.json from obj and upload them to Unreal Cesium, the mtl is not applied, so they are visualized without textures. I don't know why. I attach the .obj I used and send it.

import os
import subprocess

# Set the path to the Obj2Tiles executable
obj2tiles_path = r"a"

# Set the input and output paths
input_folder = r"a"
output_folder = r"a"

# Set the options
lods = 1
divisions = 1
lat = 34.9088325995
lon = 128.6168433943
alt = 250
# zsplit = "Ture"
keeptextures  = "Ture"
#"--keeptextures",str(keeptextures)
#"--zsplit", str(lon)
# "--lat", str(lat), "--lon", str(lon)

# Find all OBJ files in the input folder
for filename in os.listdir(input_folder):
    if filename.endswith(".obj"):
        input_path = os.path.join(input_folder, filename)
        # Add a suffix to the output filename
        output_filename = os.path.splitext(filename)[0] + "output"
        output_path = os.path.join(output_folder, output_filename)
        # Run Obj2Tiles
        subprocess.run([obj2tiles_path, input_path, output_path, "--lods", str(lods), "--divisions", str(divisions),"--lat", str(lat), "--lon", str(lon),"--alt", str(alt),"--keeptextures"])

test.zip

Why do 8 LODs make the viewer crash?

3D Tiles with 8 LODS originated with photogrammetry data crashes while 3D tiles with 8 LODS from other sources are loading just fine in Threejs. Any idea of what might be the cause? This is happening regardless the size of the model.

What would be the best approach to define the LODS according to the model size (or number of vertices)?

Question about the generated number of b3dm files

Hi, Thanks for your great work and make it open source. I have some questions about the LODs when I found that it contains the same number of b3dm files under every LOD folder.
If I understand it correctly, the number of b3dm files at each levelishould be:
N = 4^(lods -i -1) if the mesh is splitted in a quadric way.
So it should contain the most b3dm files at LOD 0 ( the finest level) , the least at the top level, which is the coarsest level.
So I think the number of splitted mesh generated by Obj2Tiles is not right.
Please correct me if I'm wrong. Thank you.

Visualization issue

Hello,
First of all, thank you for your work on a topic that we consider very important for WebGIS.

We tried to convert a GIS model saved as obj to 3d tiles: tileset and LOD folders are produced by the converter, but the 3dtiles is not displayable.
We have also tried to convert a simple cube obj created in 3dbuilder, but this gives the same problem too.
We attach the two OBJs in the zipped folder.
Could you please help us? Thanks in advance.

OBJ_cube_GIS.zip

Error while performing splitting.

I am trying to convert an obj to 3d-tiles. I keep getting the following error in Splitting stage:

 !> Exception: The given key '' was not present in the dictionary.

It seems to run successfully when I use the --keep-textures flag. Seems like there is some problem parsing the texture map.

after converted, missing color message

command
Obj2Tiles.exe --lods 8 --divisions 3 --keeptextures --lat 40.689434025350025 --lon -74.0444987716782 --alt 120 mesh/mesh.obj ./output

view:
image

but my obj is
image

anything i missing ??

thanks

Splitting stage can be shortcut if divisions = 0

Currently the program spends time doing a split with depth of 0. This takes a while and could be short-cut.

 ?> Loaded 137430 vertices, 242436 faces in 658ms
 -> Splitting with a depth of 0
 ?> Done 0 edge splits in 0ms (NaN split/ms)
 -> Writing tiles

Add verbose parameter

Add verbose parameter and remove most of the output when it is not specified.
Maybe make use of a logging framework instead of relying on Console.WriteLine

When using cesium to load 3dtiles, the browser crashes due to high memory usage

How did you install WebODM (docker, installer, etc.)?

docker
[Type answer here]

What's your browser and operating system? (Copy/paste the output of https://www.whatismybrowser.com/)

Your version is: Chrome 107 on Windows 11
[Type answer here]

What is the problem?

When using cesium to load 3dtiles, the browser crashes due to high memory usage。(The browser occupies more than 8GB, and the physical memory is 16GB)。
[Type answer here]

How can we reproduce this? (What steps trigger the problem? What parameters are you using for processing? Include screenshots. If you are having issues processing a dataset, you must include a copy of your dataset uploaded on Dropbox, Google Drive or https://dronedb.app)

Use the generated 3dtiles file to load it in cesium 1.99, causing the browser to crash. The raw data used are: https://github.com/merkato/odm_wietrznia
Does ODM provide the function of dividing obj files into small files by grid? Whether it will support splitting obj into multiple small obj files in the future, converting each small obj file into 3dtiles, and finally summarizing to generate tilesets.json With this obj file splitting, you can load a large amount of data and significantly reduce the memory consumption of the browser.
[Type answer here]

[Bug] Catch exceptions

Exceptions that are not captured cause a core dump.

E.g. running out of space causes:

Unhandled exception. System.IO.IOException: No space left on device : '/tmp/88eed7c3-0520-419e-804e-c5e1eaed014c-obj2tiles-split'
   at System.IO.FileSystem.CreateDirectory(String )
   at System.IO.Directory.CreateDirectory(String )
   at Obj2Tiles.Program.CreateTempFolder(String folderName) in /home/runner/work/Obj2Tiles/Obj2Tiles/Obj2Tiles/Program.cs:line 199
   at Obj2Tiles.Program.Run(Options opts) in /home/runner/work/Obj2Tiles/Obj2Tiles/Obj2Tiles/Program.cs:line 128
   at CommandLine.ParserResultExtensions.WithParsedAsync[T](ParserResult`1 result, Func`2 action)
   at Obj2Tiles.Program.Main(String[] args) in /home/runner/work/Obj2Tiles/Obj2Tiles/Obj2Tiles/Program.cs:line 19
   at Obj2Tiles.Program.<Main>(String[] args)
Aborted (core dumped)

The program should exit gracefully with error code 1.

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.