Giter VIP home page Giter VIP logo

wechat-dump's Introduction

Dump WeChat Messages from Android

导出安卓微信消息记录

WeChat, as the most popular mobile IM app in China, doesn't provide any methods to export structured message history.

We reverse-engineered the storage protocol of WeChat messages, and provide this tool to decrypt and parse WeChat messages on a rooted android phone. It can also render the messages into self-contained html files including voice messages, images, emojis, videos, etc.

If the tool works for you, please take a moment to add your phone/OS to the wiki.

How to use:

Dependencies:

  • adb and rooted android phone connected to a Linux/Mac OSX/Win10+Bash. If the phone does not come with adb support, you can download an app such as https://play.google.com/store/apps/details?id=eu.chainfire.adbd
  • Python >= 3.6
  • sqlcipher >= 4.1
  • sox (command line tools)
  • Silk audio decoder (included; build it with ./third-party/compile_silk.sh)
  • Other python dependencies: pip install -r requirements.txt.

Get Necessary Data:

  1. Pull database file and (for older wechat versions) avatar index:
  • Automatic: ./android-interact.sh db. It may use an incorrect userid.
  • Manual:
    • Figure out your ${userid} by inspecting the contents of /data/data/com.tencent.mm/MicroMsg on the root filesystem of the device. It should be a 32-character-long name consisting of hexadecimal digits.
    • Get /data/data/com.tencent.mm/MicroMsg/${userid}/EnMicroMsg.db from the device.
  1. Decrypt database file:
  • Automatic: ./decrypt-db.py decrypt --input EnMicroMsg.db
  • Manual:
    • Get WeChat uin (an integer), possible ways are:

      • ./decrypt-db.py uin, which looks for uin in /data/data/com.tencent.mm/shared_prefs/
      • Login to web wechat, get wxuin=1234567 from document.cookie
    • Get your device id (a positive integer), possible ways are:

      • ./decrypt-db.py imei implements some ways to find device id.
      • Call *#06# on your phone
      • Find IMEI in system settings
    • Decrypt database with combination of uin and device id:

      ./decrypt-db.py decrypt --input EnMicroMsg.db --imei <device id> --uin <uin>
      

      NOTE: you may need to try different ways to get device id and find one that can decrypt the database. Some phones may have multiple IMEIs, you may need to try them all. See #33. The command will dump decrypted database at EnMicroMsg.db.decrypted.

If the above decryption doesn't work, you can also try the password cracker to brute-force the key. The encryption key is not very strong.

  1. Copy the WeChat user resource directory /mnt/sdcard/tencent/MicroMsg/${userid}/{avatar,emoji,image2,sfs,video,voice2} from the phone to the resource directory:

    • ./android-interact.sh res
    • Change RES_DIR in the script if the location of these directories is different on your phone.
    • This can take a while. Can be faster to first archive it with tar with or without compression, and then copy the archive, busybox tar is recommended as the Android system's tar may choke on long paths.
    • In the end, we need a resource directory with the following subdir: avatar,emoji,image2,sfs,video,voice2.
  2. (Optional) Download the emoji cache from here and decompress it under wechat-dump. This will avoid downloading too many emojis during rendering.

     wget -c https://github.com/ppwwyyxx/wechat-dump/releases/download/0.1/emoji.cache.tar.bz2
     tar xf emoji.cache.tar.bz2
    

Run:

  • Parse and dump text messages of every chat (requires decrypted database):

    ./dump-msg.py decrypted.db output_dir
    
  • List all chats (required decrypted database):

    ./list-chats.py decrypted.db
    
  • Generate statistics report on text messages (requires output_dir from ./dump-msg.py):

    ./count-message.sh output_dir
    
  • Dump messages of one contact to html, containing voice messages, emojis, and images (requires decrypted database and resource):

    ./dump-html.py "<contact_display_name>"
    

    The output file is output.html.

    Check ./dump-html.py -h to use different paths.

Examples:

Screenshots of generated html:

byvoid

See here for an example html.

TODO List

  • Fix rare unhandled message types: > 10000 and < 0
  • Better user experiences... see grep 'TODO' wechat -R

Donate!

[paypal]

wechat-dump's People

Contributors

chaserhkj avatar futurewrg avatar jia-kai avatar lqzhgood avatar mygod0rz avatar ppwwyyxx avatar sea72 avatar swordyork avatar trammel avatar vuryleo avatar weakish avatar ymy513 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  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

wechat-dump's Issues

android 5.0 and 6.0 can't get imei num

Hi:
when i try use this object export my wechat_history find some issues.

My Device : Moto X Style , Android 6.0.1 , Rooted . double Sim
1 The Script can't get the right Imei ,must be defind devices imei . (Because my devices have two imei)
2 And can't use "eu.chainfire.adbd" open "adb root" , could we don't use root to get EnMicroMsg.db , tech user use example code manual copy this file to sdcard or other space .
adb shell
su
cp -fR /data/data/com.tencent.mm/ /sdcard/somewhere

thanks

Parse talker name error

It seems to be something is in the way for parse the talker:

./dump-msg.py decrypted.db OutDir/
[18:36:32 [email protected]:wechat.parser] Your username is: wxid_xxxxxxxxxxxxxx
[18:36:32 [email protected]:wechat.parser] Found XX contacts.
[18:36:32 [email protected]:wechat.msg] Unhandled message type: xxxxxxx
[18:36:32 [email protected]:wechat.msg] Unhandled message type: xxxx
Traceback (most recent call last):
File "./dump-msg.py", line 23, in
parser = WeChatDBParser(db_file)
File "/home/myuser/Downloads/WechatBackup/wechat/parser.py", line 39, in init
self._parse()
File "/home/myuser/Downloads/WechatBackup/wechat/parser.py", line 120, in _parse
self._parse_msg()
File "/home/myuser/Downloads/WechatBackup/wechat/parser.py", line 63, in _parse_msg
values = self._parse_msg_row(row)
File "/home/myuser/Downloads/WechatBackup/wechat/parser.py", line 151, in _parse_msg_row
logger.warn("Unknown contact, probably deleted: {}".format(tk_id))
UnboundLocalError: local variable 'tk_id' referenced before assignment

Why reading the database(decrypted.db), it seems to be OK(table 'message' converts to csv output):

index,msgId,msgSvrId,type,status,isSend,isShowTimer,createTime,talker,content,imgPath,reserved,lvbuffer,transContent,transBrandWording,talkerId,bizClientMsgId,bizChatId,bizChatUserId,msgSeq,flag
0,2,3.32903169404e+18,1,3.0,0.0,,1438259445000,weixin,歡迎你再次回到WeChat。如果你在使用過程中有任何的問題或建議,記得告訴我哦。,,,{,,,22,,,,,0
...

Any clue for finding the bug?

Getting wxid from red envelope history

Irrelevant question, but is it possible to retrieve wxid_**************/WeChat ID from red envelope history since it shows user avatar and nickname? Thanks

A website for backup wechat history

Hi people,

I use wechat a lot for a long time and given Tencent's power, it is just not understandable why we cannot just keep all wechat history online, searchable with online interface, and easily download an archive.

It's all about data for people's lives and memories, pictures with friends and kids etc, which are so valuable. I am going to fix this, either I do it, or force Tencent's to notice me and do it themselves.
Either way, it will be a good outcome.

If you like to join forces, please give me a message at my email [email protected]

Thanks!

Stickers/emojis don't show up

Amazing job with this tool! I truly appreciate your effort, this was really nicely done. (By the way, used it on Windows 10 + Bash, worked perfectly.)

Now, about the issue. In my conversations, only the internal_emoji stickers work, all the others fail to load. The reason is that they show up as "data:image/None" in HTML, which I traced back to the imghdr library which seems to be unable to identify the type of these files.

All of these stickers do have a base64 encoding present, so everything else in your code seems to be working fine (or at least as expected). However, I don't know if the encoding is actually good. I attempted to decode as PNG/JPEG/GIF and it was all without luck. My guess is that the sticker files need further preprocessing done on them before encoding them to base64.

Unfortunately, I know nothing about the way WeChat stores its stickers, and the binary files were of little help to me, since I could not find any documentation online. From your code, it seems that you understand them and I also noticed a TODO there. So, do you know how to fix this issue? Do any stickers work for you? Is it possible that some packages work and others do not?

I am very curious to find out more. Once again, great job! These tools are amazing.

Restoring ?

Did anybody tried to put the database file and the other files in a new phone to restore the data ?
It would probably involve crypting it back.

decrypt wechat desktop backups

Can someone check if this program work for wechat desktop backups? Since you can backup chats on desktop to couple files: BAK_0_MEDIA BAK_0_TEXT Backup.db, can this program decrypt those file? In this way you do not need to root your phone (suppose I know my IMEI and UID).

Call history

wechat-dump is brilliant. Thanks for sharing it.

Would it be possible to integrate call history (voice/video) into the message dump? When I'm in WeChat, messages and calls are displayed inline so I hope the data is available

How is WeChat 6.5.* encryption mechanism different from the previous version?

Here's what I've tried to decrypt my wechat database. They are all failed:

  1. Regular method: Tried to read the IMEI no. of my phone and combine it with wechat uin, then use the md5 hashed password to decrypt the database.
  2. Transfer my chat history to another phone and tried to decrypt with its IMEI and uin.
  3. Back up my chat history to my PC and restore on another phone. Then decrypt.
  4. Decrypt with password cracker. I tried all possibilities.

I read from other post that since WeChat 6.5.*, the encryption mechanism is changed.
Is that the reason that I failed?

And btw, some of my chat history has reached almost 60000 lines. Is it possible to export?

Improvements for README.md

By following the steps I've found some difficulties if one is not professional (like me).

  1. the module requests wasn't found for me, so I'd suggest to add that in the dependencies section (installation with: pip install requests)
  2. "download uncompress emoji.cache" is not accurate enough, for me it wasn't clear that you'll have to uncompress first in wechat-dump folder and the uncompress the output again with emoji-cache-tool.py
    For me it seemed to work with this command: ./emoji-cache-tool.py unpack ./resource/emoji/
  3. ./dump-html.py decrypted.db avatar.index resource "<contact_name>" output.html
    A further example would be nice, "<contact_name>" is the display name, I'd recommend to enter anything and then there are displayed all contact_name(s) in right format.
  4. Entering this command with correct username gave out an error, the parameters would be wrong, I suggest leaving them out or write the command as stated in dump-html.py:
    ./dump-html.py --db decrypted.db --avt avatar.index --res resource "<contact_name>" --output output.html

Thank you really much for this awesome tool, it's amazing how much effort you've put in there and how nice the result looks!

Sincerely Malte

EDIT: Btw it's working for me with LG Optimus 4X HD Android 4.4.4 Omni Rom, I'm not able to write that in the wiki

dump-msg.py failed due to a deleted chatroom

./dump-msg.py decrypted.db rawMsg
[23:20:40 [email protected]:wechat.parser] Your username is: wxid_x
[23:20:40 [email protected]:wechat.parser] Found x contacts.
[23:20:40 [email protected]:wechat.msg] Unhandled message type: x
Traceback (most recent call last):
File "./dump-msg.py", line 23, in
parser = WeChatDBParser(db_file)
File "wechat-dump-master/wechat/parser.py", line 35, in init
self._parse()
File "wechat-dump-master/wechat/parser.py", line 113, in _parse
self._parse_msg()
File "wechat-dump-master/wechat/parser.py", line 64, in _parse_msg
for k, v in self.msgs_by_talker.iteritems()}
File "wechat-dump-master/wechat/parser.py", line 64, in
for k, v in self.msgs_by_talker.iteritems()}
KeyError: u'x@chatroom'

Just FYI, x@chatroom is a deleted chatroom.

[@res.py:wechat.res] Cannot get emoji [md5] in None

I cound found the file named by [md5] in directory Resource/emoji/, but it keep warn me that "Cannot get emoji [md5] in None'. I compared the chat history by chat time and found that those which counld not be found in None were all emoji that added by user themselves, and those official emoji or most downloaded emoji's album from wechat official shop can be showed as normal. I cound not figure it out why there is certain file under the right directory but it kept saying nothing found.
image
(ps: I add some code and with these output below, it seems that problem occured in function query)

Database Decryption Improvements : master issue

Different phones / users may experience different failures of decryption. Three directions can improve the decryption success rate:

  1. Implement better ways to obtain UIN.
  1. Implement better ways to obtain IMEI:
  • Currently using "CompatibleInfo" file from wechat. It should probably be the accurate IMEI that wechat uses. If not, please let us know.
  1. Implement/integrate password cracker from https://github.com/chg-hou/EnMicroMsg.db-Password-Cracker

Please comment on this issue only if you have ideas for improvements. Please DO NOT comment in this issue about decryption failures. People who don't have your phone will not know why decryption fails on your phone.

`db-decrypt` should be `db_decrypt` in README.md

./android-interact.sh db-decrypt should be ./android-interact.sh db_decrypt in README.md ( - vs _)

Also, ./android-interact.sh imei failed silently (console printed: Getting imei... Getting db...). I circumvented by hardcoding IMEI into .sh :P
Anyway, this project looks like the only working solution to export Wechat chatlog for Android, thanks for your work!

Help needed: pysqlcipher.dbapi2.DatabaseError: database disk image is malformed

updated: done after one more ./android-interact.sh decrypt-db with shutting down any connection and wechat!

Decrypt and dump database to decrypted.db ...
Traceback (most recent call last):
File "./decrypt-db.py", line 54, in
c.execute("ATTACH DATABASE '" + args.db + "' AS db KEY '';")

while i can see the .dbinfo result of sqlite3, i cannot get it even i stopped the wechat application and disconnect both wifi and 4G, then run either way:

  1. ./android-interact.sh ...
    2.adb pull ... first, and legacy/decrypt-db.sh ...

the enviroment is

  1. Huawei Honor6 L
  2. Android 4.4.2
    3.Wechat 6.3.23

note sue whether its due to other component incompability?

The path `/data/data/com.tencent.mm/MicroMsg` does not exist

Device: Nexus 6
Wechat Version: 6.5.10

➜  wd git:(master) ./android-interact.sh db
Starting rooted adb server...
adbd cannot run as root in production builds
Looking for user dir name...
Found        4 user(s). User chosen: 090faed739d2a5781aecd129f786ed7a
Pulling database and avatar index file...
adb: error: remote object '/data/data/com.tencent.mm/MicroMsg/090faed739d2a5781aecd129f786ed7a/EnMicroMsg.db' does not exist
Failed to pull database by adb
➜  wd git:(master) adb ls /data/data/com.tencent.mm/MicroMsg
➜  wd git:(master)

能不使用adb直接本地解码EnMicroMsg.db吗

我已经将EnMicroMsg.db文件imei和uin全获取到,能否直接在电脑上解码?不链接手机用adb
直接运行时显示如下结果:

[20:18:01 [email protected]:wechat.common.procutil] Command 'adb root' failed, return code=1
Traceback (most recent call last):
  File "D:\HG\Downloads\SD\wechat-dump-master\wechat\common\procutil.py", line 21, in subproc_call
    shell=True, timeout=timeout)
  File "D:\Projects\Lib\Python\Python36\lib\subprocess.py", line 356, in check_output
    **kwargs).stdout
  File "D:\Projects\Lib\Python\Python36\lib\subprocess.py", line 438, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command 'adb root' returned non-zero exit status 1.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "decrypt-db.py", line 153, in <module>
    subproc_succ("adb root")
  File "D:\HG\Downloads\SD\wechat-dump-master\wechat\common\procutil.py", line 43, in subproc_succ
    output, ret = subproc_call(cmd)
  File "D:\HG\Downloads\SD\wechat-dump-master\wechat\common\procutil.py", line 32, in subproc_call
    logger.warn(e.output.decode('utf-8'))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 6: invalid start byte

sqlite3.OperationalError: no such column: cdnUrl

; ./list-chats.py decrypted.db
[parser.py:wechat.parser] Your username is: wxid_****
[parser.py:wechat.parser] Found ** contacts.
[msg.py:wechat.msg] Unhandled message type: 285212721
[msg.py:wechat.msg] Unhandled message type: 35
[msg.py:wechat.msg] Unhandled message type: 268435505
[parser.py:wechat.parser] Found ** message records.
[parser.py:wechat.parser] Found ** hd image records.
Traceback (most recent call last):
  File "./list-chats.py", line 14, in <module>
    parser = WeChatDBParser(db_file)
  File "/pool/repos/contrib/wechat-dump/wechat/parser.py", line 39, in __init__
    self._parse()
  File "/pool/repos/contrib/wechat-dump/wechat/parser.py", line 122, in _parse
    self._parse_emoji()
  File "/pool/repos/contrib/wechat-dump/wechat/parser.py", line 107, in _parse_emoji
    """ SELECT md5, catalog, name, cdnUrl FROM EmojiInfo""")
sqlite3.OperationalError: no such column: cdnUrl

Same error with dump-msg.py and dump-html.py.

WeChat 5.2 (Too old to be compatible with current WeChat database schema?)

getting "Failed to pull database by adb"

Dear Dev,

After struggling to setup all environment requirement, I finally managed to run this script but still stuck at the end of "./android-interactive.sh db-decrypt"

Please help to look at what else am I missing.

UBuntu 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

dump-html.py error "/bin/sh: 1: sox: not found"

Basically, besides all of the dependencies mentioned in the README.md, still need to install the sox package.
via

sudo apt-get install sox

on Ubuntu for example.
Otherwise it will raise Failed to decode audio file error and the voices won't be rendered in the html file.

Is HTML the only form of exported data?

I can't use wechat dump for some reason. (my IMEI is randomized and i have to crack the key)
So before dumping chat history, I need to know something about the exported data, I need to make my chat history as index-able as the built-in wechat.
Is it possible? For long history, is the HTML file very long?

How to dump HTML by username rather than nickname? OR How to input special username into dump HTML?

My situation: I am using Ubuntu Server 17.10. Presumably due to the terminal capabilities, I am not able to view the special characters in nicknames in the output of "list-chats.py". They just come up in the terminal as a diamond followed by a space. So it's seemingly impossible for me to pass this nickname to "dump-html.py".

Issue: I don't understand why "dump-html.py" accepts only the nickname and not the username, which is also written out by "list-chats.py". Is it possible for "dump-html.py" to accept the username, e.g. "wxid_45vu0n3vt"?

If not, is it possible for "list-chats.py" to be able to write out the "nickname" using some pure ASCII via some encoding, which could then be decoded inside "dump-html.py"?

Note: Sorry I am not very familiar with Python. I am proficient with Java. Also, I know very little about UNIX character encoding behaviours.

Unable to install pysox/libsox-dev on Mac OS El Capitan

Hi, thanks for this awesome project at first!

I got question for the setup. I could successfully run the project in Ubuntu.
However, in mac os, when trying to pip install pysox, received below error.

pysox/sox.c:227:10: fatal error: 'sox.h' file not found
#include "sox.h"
^
1 error generated.

This seems to be a problem related to lack of libsox-dev in Mac. I searched all across google and stackoverflow, but have not figured out a way to do it.

Would you help on this? Thanks!

No title or URL found in TYPE_LINK; exception str() failed

Due to #51, I modified "dump-html.py" to remove the try block and instead accept chatid directly from args. Not sure if this will actually work. Following this, I am getting another issue when running "dump-html.py". See below image:

ubuntu server_27_12_2017_13_48_42

WeChat version: 6.3.27

Not sure if this is due to the change I made (see #51) or some other reason.

You can also see that the contact name comes up with diamonds in the name, this is also due to my terminal not being able to render those special characters; see paragraph at the top of #51.

第一次成功了现在导出都有这个提示了 不全

Decrypt and dump database to decrypted.db ...
Traceback (most recent call last):
File "./decrypt-db.py", line 54, in
c.execute("SELECT sqlcipher_export('db');" )
pysqlcipher.dbapi2.OperationalError: database disk image is malformed

Show other users' group alias in chatroom

First,thanks for providing this perfect tool!

Second, I found a bug In line 26:
with open(os.path.join(output_dir, name + '.txt'), 'w') as f:
If someone named "jackson@first/second", it will be error.

Last, can you show the members' alias-name field in the chatroom?
Example: my nickname is "Jackson", and my alias-name in the chatroom is "Jackson_IBM".Print "Jackson_IBM" to history file. The data_path is : EnMicroMsgDb.db -> chatroom -> roomdata , a blob field it is.

Emoji Decryption: ideas needed

Background:

In get_emoji_by_md5, the id of the emoji is known. The corresponding emoji file with that id can be found in resource/emoji. However, the file is not a regular image file and is encrypted with unknown methods.
Only the static thumbnail/cover files in resource/emoji are unencrypted - as a result, many animated stickers will become static in the rendered HTML.

Progress so far:

Only the first 1024B of the file is encrypted. I attempted to recover the image without knowing its first 1KB (by reading PNG format spec) and got limited success.

By comparing the original emoji file (obtained from older dumps) and encrypted file, we know that:

  • the first 1024B of the file is encrypted
  • the encryption result is different between userA on phoneA and userB on phoneB
  • If emoji A and B on the same phone+user has the same prefix, their encrypted prefix is also the same.

Note: most emojis have a "encrypturl" and "aeskey" field in database. They can be used like this:

openssl enc -d -aes-128-cbc -in ./encrypturl.download  -K <aeskey>  -out decrypted.file -iv <aeskey>

and they are not useful to decrypt emojis in resource/emoji.

Future task to do:

  • It would be good to figure out how they are encrypted. Thoughts or help on reverse-engineering is greatly appreciated.
  • It decryption is too hard, it might be possible to recover the half-encrypted image.

Analyze and backup database on Mac?

I recently deleted my chat log with parents on the phone by accident. Fortunately, the log has been synced to the Mac wechat portal. I wonder whether I can use a variant of your script to backup the chat log?
If not, is there any other work on analyzing wechat Mac database? Thanks!

file is encrypted or is not a database

hello,
im trying to use this tool on ubuntu 14.04.2 LTS
when i run decrypt-db.sh, i got followng errors
error near line3 : files is not encrypted or is not a database
error near line4 : files is not encrypted or is not a database
error near line5 : no such database:db

i double checked imei & uin.. they are correct.
any idea how to fix this ?

adb shell dumpsys iphonesubinfo not working since Android 5.0 Lollipop

As it is indicated in the title, adb shell dumpsys iphonesubinfo is not working since Android 5.0 Lollipop, causing ./android_interact.sh imei to fail with these devices

This page on stackoverflow pointed out the correct way of getting imei on Lollipop devices, please consider supporting this, as Lollipop devices are getting more and more around us.

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.