brianrho / fpm Goto Github PK
View Code? Open in Web Editor NEWArduino library for the R30x/ZFMxx/FPMxx optical fingerprint sensors
Arduino library for the R30x/ZFMxx/FPMxx optical fingerprint sensors
I am trying to get the fingerprint template using the library, what I did up until now is i used the enroll example to store a fingerprint then i tried to read it using the Templates code, but i am getting the "Packet too long" error as you can see here.
Hardware used:
->Arduino Mega2560
->FPM10A Fingerprint Sensor
Enroll:
https://github.com/brianrho/FPM/blob/master/examples/enroll/enroll.ino
Templates:
https://github.com/brianrho/FPM/blob/master/examples/templates/templates.ino
Hello! Thanks for your useful code, but I seem meet some problems. I try to solve it by searching much website by failed.
I use Arduino UNO to control the AS608, when I upload the enroll example code, I get some mistake:
Adafruit Fingerprint sensor enrollment
Did not find fingerprint sensor :(
On the other hand, I try the same program on Arduino Nano. Its mistake is same to UNO's.
And I have check my line connection, it seems without problems:
I try to put finger.begin(57600);
into loop function, but it is helpless.
My main program is the enroll code which in example folder
Hope I can get some useful suggestions to solve my problems, thanks!
Hi, can we save jpg or png instead of bmp ?
Hi,
with the help of your library i am able to enroll, and get template but when i try to use "image to pc code"
it gives me following output
OUTPUT:
Waiting for a finger...
.
.
.
.
.
.
.
.
.
.
Image taken
Starting image stream...
and after this the execution stops ..can you help me out here i want to display the thump impression in my java application . Thank You
Hi @brianrho
Could you please let me know how much time does it take to download the template file from sensor to host PC?
It will be very helpful to me.
Hi, i hope my question does not sound dumb but please can it be used to scan any image regardless of if it is a fingerprint or something like a single character or word on paper?
Hello!
How do I make sure that nobody exchanges the sensor attached to my controller board?
Can I change the address of the sensor?
Hey, your sketch can solve all my problems, But unfortunately it's not working although all other sketches are working but I just couldn't get this sketch to work. I am getting the following error
template 1 loaded
Error receiving packet
Unknown error
digging in your library i found that this snippet is causing the function to close before end packet.
if (bufLen == NULL || *bufLen < packetLen) // if a buffer was provided, ensure theres enough space { return false; }else
I tried to fix it but for some reason my arduino crashes.
Please help me out.
Thanks in advance.
I have in poseseion a fingerprint sensor FPM10A, like this link (). In the description it says that it has capacity for 1000 fingerprints. The bookstore tells me that it has capacity for 300 prints.
However, when I try to store some fingerprint with an ID greater than 163, it tells me that it has been stored correctly, but then in the sketch "fingerprint" does not recognize the fingerprint (if it does when the ID is lower). When I pass the ID 300 it gives me an error of "FINGERPRINT_BADLOCATION" and it tells me that it can not save the fingerprint.
I use an Arduino DUE and the last commit of your library.
Thanks and regards!
How to Use Touch PIN?
python output:
----------Extract Fingerprint Image------------
Options:
Press 1 to enter serial port settings
Press 2 to scan a fingerprint and save the image
Press 3 to view help
Press 4 to exit
1
Enter Arduino serial port number: COM3
Enter serial port baud rate: 57600
Options:
Press 1 to enter serial port settings
Press 2 to scan a fingerprint and save the image
Press 3 to view help
Press 4 to exit
2
Enter filename/path of output file (without extension): asd
SEND IMAGE TO PC test
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x7
[+]Length: 1
0
[+]Read complete
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x7
[+]Length: 17
0 0 0 0 0 1 F4 0 3 FF FF FF FF 0 2 0 6
[+]Read complete
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x7
[+]Length: 17
0 0 0 0 0 1 F4 0 3 FF FF FF FF 0 2 0 6
[+]Read complete
Found fingerprint sensor!
Capacity: 500
Packet length: 128
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x7
[+]Length: 1
0
[+]Read complete
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x7
[+]Length: 17
0 0 0 0 0 1 F4 0 3 FF FF FF FF 0 2 0 6
[+]Read complete
Packet length set to 128 bytes
Waiting for a finger...
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x7
[+]Length: 1
2
[+]Read complete
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x7
[+]Length: 1
0
[+]Read complete
Image taken
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x7
[+]Length: 1
0
[+]Read complete
Starting image stream...
Image saved as asd.bmp
FF FF FF FF FF FF FF FF FF FF FF FF FF EF �1 FF FF FF FF �2 0 82 FF FF FF FF
Picture is this:
Arduino seriam monitor shows this:
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x2
[+]Length: 128
⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮FF ⸮EF �1 ⸮FF ⸮FF ⸮FF ⸮FF �2
Read data failed: -1
Error receiving packet 67
Hi,
I'm trying to use your fork of the adafruit library, migrating from the original one.
My goal is to download and upload a set of fingerprints based on a menu selection. I´m just starting with tthat I´m not sure if it´s even possible.
During my migration I noticed that most of the functionality is the same or extended (which is great!) but I found that FastSearch is not available.
The packet id FPM_HISPEEDSEARCH is there but never used.
Is there any particular reason why this is not available on the fork?
Which is the intended method to check if a fingerprint matches?
Thanks !
Hello, I'm using a HLK-FPM383F Fingerprint sensor for my project. I'm usning your code for enrolling and deleting the fingerprints images. All my connections are right and also fingerprint sensor is detected as well. But when I enter a slot number, it starts to show 'Communication Error' . What am I missing ? I have uploaded ' Enroll with LED Control' program
Hi @brianrho,
I just wanted to try your library to test my new FMP10 sensor with an Arduino Nano. Connection and the detection of the sensor module itself is working properly (pin 2+3).
ENROLL test
Found fingerprint sensor!
Capacity: 150
Packet length: 128
Handshake command is supported.
Send any character to enroll a finger...
Searching for a free slot to store the template...
Free slot at ID 0
Waiting for valid finger to enroll
.
.
.
.
.
.
.
.
From here I only receive dots, nothing else. So it seems to me my finger is not being detected. Can you support me with that?
Thank you and best regards!
Hi,
At first, thank you for providing this code. I have a couple of questions regarding this library.
Is there a sensor which worked best in the past?
Is it also possible to use capacitive sensors?
Did I get that right from the documentation, that I am also able to read out the "raw" fingerprint from the sensor to the computer?
Thanks a lot for your answers
hi please help me R503 sensor led_control problem "no matching function for call to 'FPM :: led_control ()' '
hi . i use ZFM60 for my project and i use from your library for this module.
everything is Ok but i have a issue ...
when module is under the sunlight , the module want to try read finger and return error .. without put finger on it .
it means the Ghost try to put his finger :))) but system cannot recognized and return error (not found in database) .
but into building everything is ok .
how can i fix the sunlight issue ?
is this for security level ?
how can i change the security level on this line of library ?
is this line for change security ?
src/FPM.h:134
/* security levels */ enum { FPM_FRR_1 = 1, FPM_FRR_2, FPM_FRR_3, FPM_FRR_4, FPM_FRR_5 };
While testing a FPM10A/DY50-2V1 3V3 sensor with build in touch controller using at 57600 bps 8N1 on a ESP32 Devkit-1 board connected to hardware serial sometimes time-outs occurs:
Trace made with remote debug:
Fingerprint check for existing print in database:
(D t:23504ms) 05032019 13:31:03 .
(D t:23510ms) 05032019 13:31:03 .
(D t:23518ms) 05032019 13:31:03 .
(D t:23523ms) 05032019 13:31:03 .
(D t:23530ms) 05032019 13:31:03 .
(D t:23537ms) 05032019 13:31:03 .
(D t:23544ms) 05032019 13:31:03 .
(D t:23550ms) 05032019 13:31:03 .
(D t:24140ms) 05032019 13:31:03 Image taken
(D t:24532ms) 05032019 13:31:04 Image converted
(D t:24536ms) 05032019 13:31:04 Remove finger
(D t:26097ms) 05032019 13:31:05 Timeout!
Break off and start a new search again:
(D t:34893ms) 05032019 13:31:14 Touch the fingerprint reader to search for a print...
(D t:38517ms) 05032019 13:31:18 Waiting for valid finger
(D t:40520ms) 05032019 13:31:20 Timeout!
(D t:50317ms) 05032019 13:31:30 Timeout!
(D t:60113ms) 05032019 13:31:39 Timeout!
(D t:69909ms) 05032019 13:31:49 Timeout!
(D t:79705ms) 05032019 13:31:59 Timeout!
(D t:89501ms) 05032019 13:32:09 Timeout!
(D t:99297ms) 05032019 13:32:19 Timeout!
Had to reset complete module.
A software reset didn’t work.
I would have some method to extract the template in ISO 1974-2 format ?
Hie,
I tried running the templates example but was not able to successfully run it I am getting the following message please help me resolve it. I have changed the buffer size to 496
TEMPLATES test
Found fingerprint sensor!
Capacity: 500
Packet length: 128
Enter the template ID # you want to get...
Template 1 loaded
Error receiving packet
Below is the text which I am getting after I have removed the debug comment
TEMPLATES test
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x7
[+]Length: 1
0
[+]Read complete
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x7
[+]Length: 17
0 0 0 0 0 1 F4 0 3 FF FF FF FF 0 2 0 6
[+]Read complete
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x7
[+]Length: 17
0 0 0 0 0 1 F4 0 3 FF FF FF FF 0 2 0 6
[+]Read complete
Found fingerprint sensor!
Capacity: 500
Packet length: 128
Enter the template ID # you want to get...
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x7
[+]Length: 1
0
[+]Read complete
Template 1 loaded
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x7
[+]Length: 1
0
[+]Read complete
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x2
[+]Length: 128
4 B 6B 0 B2 9A 85 64 C2 B 42 E8 D AB 85 E0 40 DA 3B 7 1A 43 86 6A 41 DC 79 DF 39 33 87 66 41 A 78 E7 91 63 88 63 C2 8 38 E8 CE 6B 87 D9 68 EF 1 0 0 0 0 0 EF 1 FF FF 32 0 0
Read data failed: -1
Error receiving packet
Enter the template ID # you want to get...
Thanks and Regards
Maaz Shaikh.
Hello. I use Wemos R1. I was able to run this example by increasing the buffer of the SoftwareSeries to 768 by default there is 64.
SoftwareSerial fserial(D1, D2, false, BUFF_SZ);
It seems that the R551 writes to the buffer too quickly, and it overflows. Also had to comment out checking the length of the answer in FPM::readRaw
/* check the length
if (len != chunk_sz) {
FPM_DEBUG_PRINT("Read data failed: ");
FPM_DEBUG_PRINTLN(len);
return false;
} */
because last packet was:
[+]Got header
[+]Address: 0xFFFFFFFF
[+]PID: 0x8
[+]Length: 54
21 0 BE A4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 64
len (54) <> chunk_sz (from enum = 128)
There must be another length check for the last packet.
Thanks for the library, here more docs, for R551 too
Https://www.dropbox.com/sh/orprmb3bgb6lqb6/AACpiIXOF91R7-RQ9OkD4JXha?dl=0
I'm unable to use the read_template function in the templates example with the FPM10A sensor. Fails with a "packet too long: 130" error.
Hey,
I'm trying to extract a fingerprint image to my computer using the image to pc arduino + python codes.
I'm running an R307 fingerprint sensor with an Arduino Uno connected to an Ubuntu 18.04 with Python 3.6
Everything seems to be okay on the arduino side. I can get to a stage where the 'Image stream complete' message shows up. I use the following values for the serial port settings in the python code -
Arduino serial port number - /dev/ttyACM0
baud rate - 57600
I've triple checked the above values. When I enter the file name for the image to be stored, the code gives me the error - Invalid port settings! Image extraction failed!
After which it produces a glitched image on my designated folder.
Wondering where I am going wrong with this? When I try changing the baud rate from 57600 to anything else, the code does not recognize the sensor.
Hey,
I recently ordered a R551 module ( https://www.aliexpress.com/item/-/32879785395.html ) and it also works fine, as far as I can tell ( just tested enroll / read fingerprint so far ).
I found that sending command 0x33 or 0x60 turn the module into standby (~10µA) until it detects a finger. This also turns the LED and UART off. I cannot find this mentioned in any datasheet.
Also found that sending 0x47, 0x50, 0x51, 0x52, 0x53 or 0x68 returns something - but I don't know what it does.
The module has dual color LEDs (red/green) but I haven't found a way to control them... It's always green, or off in Stand-By.
---> 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x1 0x0 0x3 0x33 0x0 0x37
<--- 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x7 0x0 0x3 0x0
Sent command 0x33 got 0x0 // StandBy?!
---> 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x1 0x0 0x3 0x47 0x0 0x4B
<--- 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x7 0x0 0x13 0x0 0x50 0x50 0x4D 0x50 0x44 0x47 0x36 0x32 0x53 0x32 0x30 0x30 0x56 0x31 0x30 0x30
Sent command 0x47 got 0x0
---> 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x1 0x0 0x3 0x50 0x0 0x54
<--- 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x7 0x0 0x3 0x0
Sent command 0x50 got 0x0
---> 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x1 0x0 0x3 0x51 0x0 0x55
<--- 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x7 0x0 0x3 0x0
Sent command 0x51 got 0x0
---> 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x1 0x0 0x3 0x52 0x0 0x56
<--- 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x7 0x0 0x3 0x2
Sent command 0x52 got 0x2
---> 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x1 0x0 0x3 0x53 0x0 0x57
<--- 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x7 0x0 0x3 0x55
Sent command 0x53 got 0x55
---> 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x1 0x0 0x3 0x60 0x0 0x64
<--- 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x7 0x0 0x3 0x0
Sent command 0x60 got 0x0 // StandBy?!
---> 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x1 0x0 0x3 0x68 0x0 0x6C
<--- 0xEF 0x1 0xFF 0xFF 0xFF 0xFF 0x7 0x0 0x5 0x0 0x0 0x2
Sent command 0x68 got 0x0
Tell me please.
For example, if I use two modules and one will fail. How do I make a module dump in order to unload it into a new module?
I am using a DY50 3.3V sensor from eBay. The FPM software works very well, but occasionally triggers when nobody touched the sensor. It happens randomly thus does not seem to be when sun, sundown, sunrise, or any specific atmospheric event occurs.
Is it a bug somewhere in FPM or the sensor itself?
I am using Wemos D1 Mini, ESP8266-12E based development board. ESP8266 is controlling R301T Fingerprint sensor using Serial Monitor commands. I am also using ESP8266's WiFi as Access Point to do some configurations and communications with local clients. Everything is working as expected BUT only one problem is there...!!!
The Serial Monitor showing this error randomly even when WiFi is disabled (No AP mode).
[+]Response timeout
Some times, when AP mode is enabled, the error looks like this:
[+]Wrong chksum: 0xC
[+]Response timeout
or this:
[+]Wrong chksum: 0xB
[+]Response timeout
This timeout error becomes more frequent when ESP8266 is working in Access Point Mode and communicating with Clients.
Does this timeout occurs due to some Timer issues???
I can not understand the reason of this error and how to solve it. Please help me to solve this issue. Thanks!
Hi, I found out the FPM library two weeks ago, I used it to store fingerprints on my pc using the python example, after that I used some C# code to compare the generated images and it worked. But I need to send the image to my web server that is in laravel (php framework) and has a path just for the image upload, I can upload the file using a web form, but I don't figured out how I can create a post request using the Arduino with the fingerprint image, I am using the ENC28J60 module, so I can do post requests using UIPEthernet library
The following code is used to do a post request with a text message:
client.println("POST /test HTTP/1.1");
client.println("Host: 192.168.1.104");
client.println("Content-Type: multipart/form-data");
client.println("Connection: close");
client.print("Content-Length: ");
client.println(message.length());
client.println();
client.print(message);
client.println();
If I understood correctly, the image_to_udp example has the function readRaw and the buffer variable is where the image is stored, but how can I send it over the post request?
finger.readRaw(FPM_OUTPUT_TO_BUFFER, buffer, &read_finished, &readlen);
Thanks for the help!
Hello
Is there a way to send image not to the serial port but via UDP?
Thank you in advance
Hi Brian been a long time.
I am revisiting an old project and have the R503 reader types. Your library is excellent and all of my old code ported over fine.
Currently I have stored all the finger prints from the module to SD card in separate files, all looks good I can read these all back and the data is the same as downloaded. Total byte size is 1536 per finger print.
I want to now load these back in to a blank R503 Reader, can you tell me the functions I need to call in order to achieve this in your library please.
e.g: (1) Load template in to buffer
(2) Call store model and define slot ID etc
1536 bytes read.`
Not sure if I can reduce this array size settings for this that work are:
#define BUFF_SZ 36864UL //768 // R305 BUFFER SIZE ELSE 512 STANDARD
uint8_t template_buffer[BUFF_SZ];
Cool project, really having some fun with this. Any pointers will be brilliant. Huge thanks Dans
Hii brianrho. Can you help me in uploading an image file to R305 using arduino. As i dont want to enroll by scanning through FPS. R305 datasheet contains DownImage command description so just needed help in implementing that functionality.
Unfortunately, I have the problem on R308 fingerprint sensor, but the same code works on ZFM-60!
Also, I tried to change baud rate to 9600
and 57600
, but problem not fixed.
Hello,
i see pictures where the LED is Red, my FPM is green.
is it possible to change the color? so if it read a finger it switch to red or turn off the LED?
Hi.
Nice library, thanks.
image to pc works!
Please advise on how to go about uploading from the pc back to the reader slot.
Regards
Brian,
Your library is excellent, I have 2 readers of which both should be FPM10 format.
Old style works perfect downloading template to array, I have adapted this and now store to spiffs file and retrieve as well, works really well. One problem encountered with getTemplate is that when wifi connection is present sometimes times out or incorrect bytes returned 384 bytes instead of 512. Turning of wifi connection returns 512 template bytes every time.
I ordered some new readers which I thought were the same but ended up slightly different. Plugged in works in a normal way for all operations testes apart from getTemplate which crashes ESP with stack error.
new reader: http://www.ebay.co.uk/itm/322197616177?_trksid=p2060353.m1438.l2649&ssPageName=STRK%3AMEBIDX%3AIT
Byte format seems to be slightly different I think, have you tested this type of reader?
Hi, it's me again, first of all, sorry for not texting you back, I was awaiting for my arduino mega, since uno didn't had enough memory to run the code so couldn't test it until yesterday. I think the code is almost done, when my readers are correct (with the println() before the --X-ARDUINO_MULTIPART), it cannot read the fingerprint correctly, every time I get a error of wrong read length: -1, sometimes it says packet to long: 130, but it's rare. I don't know why this is happening, my server responds with unexpected end of file, so I know that at least one chunk of the file is being send. My code is:
uint16_t count = 0;
bool read_finished;
/* indicate the max size to read, and also returns how much was actually read */
uint16_t readlen = TRANSFER_SZ;
client.println("POST /post HTTP/1.1");
client.println("Host: 192.168.1.107");
client.println("Content-Type: multipart/form-data; boundary=X-ARDUINO_MULTIPART");
client.println("Connection: close");
client.println("Content-Length: 36864");
client.println();
client.println("--X-ARDUINO_MULTIPART");
while (true) {
bool ret = finger.readRaw(FPM_OUTPUT_TO_BUFFER, buffer, &read_finished, &readlen);
if (ret) {
count++;
client.println("Content-Disposition: form-data; name=\"blah.bmp\"");
client.println("Content-Type: application/octet-stream");
client.print("Content-Length: ");
client.println(readlen);
client.println();
client.write(buffer, readlen);
/* indicate the length to be read next time like before */
readlen = TRANSFER_SZ;
if (read_finished){
client.println();
client.println("--X-ARDUINO_MULTIPART--");
client.println();
client.flush();
break;
}
client.println();
client.println("--X-ARDUINO_MULTIPART");
client.flush();
}
else {
Serial.print("\r\nError receiving packet ");
Serial.println(count);
return;
}
yield();
}
I think that could help. My serial monitor messages:
Image taken
Starting image stream...
[+]Wrong chksum: 0x9444
[+]Response timeout
[+]Wrong read length: -1
Error receiving packet 29
Also, thanks a lot for the help, I didn't had any idea of how could I post the image, if I progress sometime, I will notify here.
I am enrolling and deleting many fingerprints one after another on random indexes for testing purposes.
I want to find the very first available index for next enrollment. I read the FPM.cpp file and find this function.
int16_t FPM::getFreeIndex(uint8_t page, int16_t * id)
Is this function is for this task? and is there any example code available to use this function?
Thanks.
I have a problem with uploading the downloaded template from AS608 FPM (also known as JM-101) and get "Packet too long: 130" in serial.
I also changed BUFF_SZ to 1024 so I able to download the template from the sensor.
Hie,
I have purchased a R551 sensor it was working nice when I uploaded some of the codes and was able to save the fingerprints and access those templates, but all of the sudden it stopped working and I am getting the message "Did not find fingerprint sensor :(" on the serial monitor.
If anyone knows how to solve the issue please help me out.
Thanks in advance
Hi, I have read the datasheet manual linked in the README.md
file, and it looks wired on my computer, so I did a little search and found out that maybe the original version of that datasheet file is this one from adafruit website. And now since adafruit provides a translated version of the user manual, could you please update the link so it points to a relatively better version of user manual?
And here is the link to adafruit's download page: https://learn.adafruit.com/adafruit-optical-fingerprint-sensor/downloads
Doing fingerprint-related development is a little harder due to lack of documents. 😂 I would suggest to add that link in README file too to provide more information.
[+]Response timeout
Did not find fingerprint sensor :(
I tried switching RX/TX and Adafruit example even. (pin 2 and 3, Arduino Micro)
Based on closed issue, I tried using set_password example as well.
Nothing seems to work. If anyone can suggest some troubleshooting suggestions, I'd really appreciate it.
Hi i am getting some problem while trying to save image using c getting problem in writing header , color platte and image buffer to file in c lanuage. Pls help
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.