Giter Site home page Giter Site logo

caj2pdf / caj2pdf Goto Github PK

View Code? Open in Web Editor NEW
2.8K 2.8K 609.0 308 KB

Convert CAJ (China Academic Journals) files to PDF. 转换**知网 CAJ 格式文献为 PDF。佛系转换,成功与否,皆是玄学。

License: Other

Python 89.92% C++ 10.08%
caj cnki pdf python python3

caj2pdf's Introduction

caj2pdf

Why

中国知网的某些文献(多为学位论文)仅提供其专有的 CAJ 格式下载,仅能使用知网提供的软件(如 CAJViewer 等)打开,给文献的阅读和管理带来了不便(尤其是在非 Windows 系统上)。

若要将 CAJ 文件转换为 PDF 文件,可以使用 CAJViewer 的打印功能。但这样得到的 PDF 文件的内容为图片,无法进行文字的选择,且原文献的大纲列表也会丢失。本项目希望可以解决上述两问题。

How far we've come

知网下载到的后缀为 caj 的文件内部结构其实分为两类:CAJ 格式和 HN 格式(受考察样本所限可能还有更多)。目前本项目支持 CAJ 格式文件的转换,HN 格式的转换未完善,并且需要建立两个新的共享库(除了Microsoft Windows:我们提供Microsoft Windows 32-bit/64-bit DLLs, Mac OS users can download from extra libs build, and chmod +x ...),详情如下:

cc -Wall -fPIC --shared -o libjbigdec.so jbigdec.cc JBigDecode.cc
cc -Wall `pkg-config --cflags poppler` -fPIC -shared -o libjbig2codec.so decode_jbig2data.cc `pkg-config --libs poppler`

抑或和libpoppler 相比,还是取决于您是否更喜欢libjbig2dec一点,可以替换libpoppler:

cc -Wall -fPIC --shared -o libjbigdec.so jbigdec.cc JBigDecode.cc
cc -Wall `pkg-config --cflags jbig2dec` -fPIC -shared -o libjbig2codec.so decode_jbig2data_x.cc `pkg-config --libs jbig2dec`

关于两种格式文件结构的分析进展和本项目的实现细节,请查阅项目 Wiki

How to contribute

受测试样本数量所限,即使转换 CAJ 格式的文件也可能(或者说几乎一定)存在 Bug。如遇到这种情况,欢迎在 Issue 中提出,并提供可重现 Bug 的 caj 文件——可以将样本文件上传到网盘等处,也可直接提供知网链接(作者已滚出校园网,提 issue 请提供可下载的 caj 文件)。

如果你对二进制文件分析、图像/文字压缩算法、逆向工程等领域中的一个或几个有所了解,欢迎帮助完善此项目。你可以从阅读项目 Wiki 开始,看看是否有可以发挥你特长的地方。Pull requests are always welcome.

How to use

环境和依赖

除了Microsoft Windows:我们提供Microsoft Windows 32-bit/64-bit DLLs,HN 格式需要

  • C/C++编译器
  • libpoppler开发包,或libjbig2dec开发包

用法

# 打印文件基本信息(文件类型、页面数、大纲项目数)
caj2pdf show [input_file]

# 转换文件
caj2pdf convert [input_file] -o/--output [output_file]

# 从 CAJ 文件中提取大纲信息并添加至 PDF 文件
## 遇到不支持的文件类型或 Bug 时,可用 CAJViewer 打印 PDF 文件,并用这条命令为其添加大纲
caj2pdf outlines [input_file] -o/--output [pdf_file]

caj2pdf show test.caj
caj2pdf convert test.caj -o output.pdf
caj2pdf outlines test.caj -o printed.pdf

异常输出(IMPORTANT!!!)

尽管这个项目目前有不少同学关注到了,但它仍然只支持部分 caj 文件的转换,必须承认这完全不是一个对普通用户足够友好的成熟项目。具体支持哪些不支持哪些,在前文也已经说了,但似乎很多同学并没有注意到。所以如果你遇到以下两种输出,本项目目前无法帮助到你。与此相关的 issue 不再回复。

  • Unknown file type.:未知文件类型;

License

本项目基于 GLWTPL (Good Luck With That Public License) 许可证开源。

caj2pdf's People

Contributors

0xfizzy avatar adhu2018 avatar darkofthemoon avatar gzz2000 avatar hintak avatar jezil avatar lelandyang avatar maybeka avatar oddwatcher avatar suwa-mitsuo 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

caj2pdf's Issues

Remaining issue with HN files' conversion and processing

This is a continuation of #43 - HN files are now processed well enough. These are the known remaining problems:

  • smaller images per page are put onto a separate smaller pages, instead of overlaying the main image.
  • you still need to compile two small python ctypes modules, JBIG and JBIG2. The JBIG2 code is for only really old HN files ( for which we only have one sample - https://github.com/caj2pdf/CAJSamples/tree/master/issue-43/Windows9x_NT操作系统的磁盘备份与恢复的研究与实现_张宗伟.caj from #43 ) - there are two choices for it which gives identical results. I crossed compiled the jbig one and committed it as libjbigdec-w32/w64.dll. Windows users don't need a compiler but need a small adjustment at the top of jbigdec.py to pick the right one. Don't know how many people want to use python on windows.
  • adding a modified version of img2pdf probably adds hidden dependency on PIL and much else. I'd like to remove dependency on PIL totally; partly for windows but also partly because it is a large dependency.
  • again, for the same old HN file, the smaller images per page are up-side-down. Technically, every image in all other HN files are inverted, but these are upright, so we inverted everything and they ended up the wrong way up.
  • text extraction is unfinished. The embedded text seems to be interlaced with positioning code. It makes sense to have archive documents both as images and text-extractable (by mouse/GUI). Solving this probably will solve the positioning problem with smaller images (the first item above) too, and the inverted image in the previous item.

EDIT: to strike out PIL and windows dll loading - completed.

2nd Edit: everything done except text-extraction of Windows9x_NT操作系统的磁盘备份与恢复的研究与实现_张宗伟.caj is different from the rest.

3rd edit: finished text extraction of the last file.

最根本的办法是直接下载pdf文件

文章提交格式是pdf,caj文件只是知网二次处理得出来的文件,而且服务器中存在pdf格式文件,只是不提供下载链接,有油猴脚本可以直接下载pdf。

KDH 类型文件的解密算法

KDH 格式其实挺简单的(甚至有点弱智),加密过程在 CAJFILE_PDF2MLF() 函数内,反推解密过程如下:

  1. 删掉文件的前 254 字节
  2. 剩余的部分,和 "FZHMEI" 这个东西 xor 即可

附样例代码:

#!/usr/bin/env python3

pszEncodeCode = b"FZHMEI"

fp = open("test.caj", "rb")
indat = fp.read()
fp.close()
#print(indat[:0xFE])
indat = indat[0xFE:]
outdat = []
eci = 0
for i in range(0, len(indat)):
    outdat.append(indat[i] ^ pszEncodeCode[eci])
    eci += 1
    if eci == len(pszEncodeCode):
        eci = 0
outdat = bytes(outdat)

fp = open("out.pdf", "wb")
fp.write(outdat)
fp.close()

error: cannot find startxref

毛玻璃型肺结节检测算法的研究_胡向丽.caj

root@ubuntu-server: /home/weakiwi/code/caj2pdf master
 # ./caj2pdf show 毛玻璃型肺结节检测算法的研究_胡向丽.caj                                                                                                                                             [11:53:50]
File: 毛玻璃型肺结节检测算法的研究_胡向丽.caj
Type: CAJ
Page count: 72
Outlines count: 56


root@ubuntu-server: /home/weakiwi/code/caj2pdf master
 # ./caj2pdf convert 毛玻璃型肺结节检测算法的研究_胡向丽.caj -o 毛玻璃型肺结节检测算法的研究_胡向丽.pdf                                                                                               [11:53:56]
error: cannot find startxref
warning: trying to repair broken xref

请问出现这种情况怎么办??

C:\Users\\Desktop\caj2pdf-master>python caj2pdf conver C:\Users\\desktop\caj2pdf-master\.caj -o .\.pdf
Traceback (most recent call last):
File "caj2pdf", line 5, in
from parser import CAJParser
ImportError: cannot import name 'CAJParser'

Pull "Analysing libreaderex" into wiki

There does not seems to be a way for me to issue a pull to update the wiki. So I am filing this issue.

the wiki is a hidden git repo with .wiki added to the end. You can merge mine (found online at https://github.com/HinTak/caj2pdf/wiki ) by doing this to merge my changes:

git clone [email protected]:caj2pdf/caj2pdf.wiki.git
cd caj2pdf.wiki
git pull https://github.com/HinTak/caj2pdf.wiki.git
git push

There are only three changes - a new "Analysing libreaderex" doc, a reference to it from the main page, and also adjusting
all wiki URLs to be relative (so that it does not jump between mine and yours).

不支持中文

请问caj内容为中文是否不支持,或者说,必须安装mutool工具转化为图片?

KeyError: '/Root'

Environment

Python 3.7.6
mupdf-1.16.0-windows
pypdf2==1.26.0

File can't convert
基于微观核力的有限核和中子-中子散射截面研究 - **知网

百度云盘下载

链接: https://pan.baidu.com/s/1Psn7zTK1B-tGLPZByFbh3w 提取码: caj0 复制这段内容后打开百度网盘手机App,操作更方便哦

Command

PS> pipenv install PyPDF2
PS> pipenv run python caj2pdf convert 1.caj -o 1.pdf                                                                    Loading .env environment variables…
Traceback (most recent call last):
  File "caj2pdf", line 41, in <module>
    caj.convert(args.output)
  File "E:\Tools\caj2pdf\cajparser.py", line 72, in convert
    self._convert_caj(dest)
  File "E:\Tools\caj2pdf\cajparser.py", line 231, in _convert_caj
    add_outlines(self.get_toc(), "pdf_toc.pdf", dest)
  File "E:\Tools\caj2pdf\utils.py", line 185, in add_outlines
    for p in pdf_in.pages:
  File "C:\Users\Jason\.virtualenvs\caj2pdf-a0e2zHHU\lib\site-packages\PyPDF2\utils.py", line 159, in __getitem__
    len_self = len(self)
  File "C:\Users\Jason\.virtualenvs\caj2pdf-a0e2zHHU\lib\site-packages\PyPDF2\utils.py", line 150, in __len__
    return self.lengthFunction()
  File "C:\Users\Jason\.virtualenvs\caj2pdf-a0e2zHHU\lib\site-packages\PyPDF2\pdf.py", line 1155, in getNumPages
    self._flatten()
  File "C:\Users\Jason\.virtualenvs\caj2pdf-a0e2zHHU\lib\site-packages\PyPDF2\pdf.py", line 1505, in _flatten
    catalog = self.trailer["/Root"].getObject()
  File "C:\Users\Jason\.virtualenvs\caj2pdf-a0e2zHHU\lib\site-packages\PyPDF2\generic.py", line 516, in __getitem__
    return dict.__getitem__(self, key).getObject()
KeyError: '/Root'

UnicodeDecodeError:'gb2312' codec can't decode

Thanks for developing this. But I got an error while running caj2pdf outlines XXX.caj -o XXX.pdf

Traceback (most recent call last):
File "caj2pdf", line 40, in
toc = caj.get_toc()
File "/Users/cogito/Documents/Mac/caj2pdf-master/parser.py", line 46, in get_toc
title = toc_bytes[0].replace(b'\x00', b'').decode("gb2312").encode("utf-8")
UnicodeDecodeError: 'gb2312' codec can't decode byte 0x89 in position 18: illegal multibyte sequence

Please help.

Windows 下添加目录报错

@mgcwang (in #4 ):

D:\caj2pdf-master>python caj2pdf outlines test.caj -o printed.pdf
Traceback (most recent call last):
  File "caj2pdf", line 42, in <module>
    call(["mv", "tmp.pdf", args.output])
  File "D:\Python\Python36-32\lib\subprocess.py", line 267, in call
    with Popen(*popenargs, **kwargs) as p:
  File "D:\Python\Python36-32\lib\subprocess.py", line 707, in __init__
    restore_signals, start_new_session)
  File "D:\Python\Python36-32\lib\subprocess.py", line 992, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] 系统找不到指定的文件。

请问,如何排除问题?


刚才又试了试,发现使用caj2pdf的第3条用法为printed.pdf添加目录的时候,虽然显示以上的问题,但是新生成的temp.pdf顺利地把目录添加进去了,而且暂时还没发现temp.pdf文件显示有什么问题,所以是不是就算添加目录成功了? @JeziL

关于 HN 格式图像数据的分析

看来 HN 格式的图像数据可能是由 BMP 格式中的 DIB Header调色板和压缩像素数据组成。

DIB Header 格式:
DIB Header format
调色板条目格式:

typedef struct tagRGBQUAD {
    BYTE rgbBlue;
    BYTE rgbGreen;
    BYTE rgbRed;
    BYTE rgbReserved;
}   RGBQUAD;

样本
样本

对照 DIB Header 的格式,可以发现 libreaderex.so 反编译源码CImage::DecodeJbig(int a1, int a2, int a3) 完成了对 DIB Header 的解析,并将相关参数传给了 JBigCodec::Decode 函数:

int __fastcall CImage::DecodeJbig(int a1, int a2, int a3)
{
  int v3; // r6@1
  int v4; // r7@1
  int v5; // r10@1
  int v6; // r4@1
  int v7; // r8@1
  int v8; // r9@1
  int v9; // r5@1
  int v10; // r0@1
  char v12; // [sp+14h] [bp-8054h]@1

  v3 = a3;
  // 宽度像素数
  v4 = (*(_WORD *)(a1 + 6) << 16) | *(_WORD *)(a1 + 4);
  // 高度像素数
  v5 = (*(_WORD *)(a1 + 10) << 16) | *(_WORD *)(a1 + 8);
  v6 = a1;
  v7 = a2;
  // 每行像素字节数
  v8 = 4 * ((v4 * *(_WORD *)(a1 + 14) + 31) / 32);
  v9 = (int)operator new(0x128u);
  CImage::CImage(v9, v6);
  // DIB Header 及调色板结束地址
  v10 = FindDIBBits(v6);
  JBigCodec::Decode((int)&v12, v10, v6 - v10 + v7, v5, v4 * *(_WORD *)(v6 + 14), v8, *(void **)(v9 + 8));
  if ( v3 )
    *(_DWORD *)v3 = *(_DWORD *)(v9 + 16);
  return v9;
}

压缩像素数据如何解码仍有待研究。

一个无法转换的例子

例子的下载地址

附上一些log

error: cannot find startxref
warning: trying to repair broken xref
warning: repairing PDF document
warning: name is too long
warning: ... repeated 20 times...
warning: invalid character in hex string
warning: ... repeated 138 times...
error: invalid key in dict
warning: name is too long
warning: ... repeated 16 times...
warning: expected 'endobj' or 'stream' keyword (320 0 R)
warning: invalid character in hex string
warning: ... repeated 138 times...
error: invalid key in dict
warning: ignoring broken object (471 0 R)
warning: invalid character in hex string
warning: ... repeated 138 times...
error: invalid key in dict

Command mutool returned non-zero exit status 1

看似caj文件内容有所缺失。不过官方的CAJViewMac可以正常阅读。

书签目标错误

在 SumatraPDF 3.2中,书签被定位到页面底部,3.1.2 正常。(虽然可能是SumatraPDF 的bug,不过那边积压的bug太多,这边修改相对容易)。

复现方法

caj文件:依据书法笔力对运笔基本问题的再认识_刘玉栋.zip

由于无法convert,我下载了无书签的pdf版本:依据书法笔力对运笔基本问题的再认识_刘玉栋.pdf

caj2pdf outlines 之后:output.pdf
SumatraPDF “视图”->“连续显示页面”,点击指向第4页的书签:
image
窗口顶端定位于第4页底部,主体为第5页:
image

建议修改

utils.py 改为

def make_dest(pdfw, pg):
    d = PDF.ArrayObject()
    d.append(pdfw.getPage(pg).indirectRef)
    d.append(PDF.NameObject("/Fit"))
    return d

add_outlines 出错

E:\caj2pdf-master\dist>caj2pdf.exe convert 2.caj -o 2.pdf
PdfReadWarning: Object 325 0 not defined. [pdf.py:1629]
Traceback (most recent call last):
File "caj2pdf", line 36, in
File "cajparser.py", line 65, in convert
File "cajparser.py", line 220, in _convert_caj
File "utils.py", line 185, in add_outlines
File "site-packages\PyPDF2\utils.py", line 159, in getitem
File "site-packages\PyPDF2\utils.py", line 150, in len
File "site-packages\PyPDF2\pdf.py", line 1155, in getNumPages
File "site-packages\PyPDF2\pdf.py", line 1520, in _flatten
File "site-packages\PyPDF2\generic.py", line 178, in getObject
File "site-packages\PyPDF2\pdf.py", line 1631, in getObject
PyPDF2.utils.PdfReadError: Could not find object.
[51116] Failed to execute script caj2pdf

2.zip

转换文件出错,HNParsePage.py有问题

混凝土道面评价指标分析_谢永亮.zip

Traceback (most recent call last):
File "caj2pdf", line 47, in
caj.convert(args.output)
File "G:\ling-pc\D7200\TOOLS\caj2pdf\cajparser.py", line 101, in convert
self._convert_hn(dest)
File "G:\ling-pc\D7200\TOOLS\caj2pdf\cajparser.py", line 308, in _convert_hn
page_data = HNParsePage(output, page_style)
File "G:\ling-pc\D7200\TOOLS\caj2pdf\HNParsePage.py", line 72, in init
(dispatch_code,) = struct.unpack("H", self.data[self.offset:self.offset+2])
struct.error: unpack requires a buffer of 2 bytes

经测试把HNParsePage.py第71行的
while (self.offset < self.data_length):
改成
while (self.offset < self.data_length - 1):
就不报错了,转换也ok

Error on PDF objects numbering.

`D:\Documents\本科毕业设计\caj2pdf-master>python caj2pdf show C:\users\zzq\downloads\Lambertian.caj
File: C:\users\zzq\downloads\Lambertian.caj
Type: CAJ
Page count: 141
Outlines count: 31

D:\Documents\本科毕业设计\caj2pdf-master>python caj2pdf convert C:\users\zzq\downloads\Lambertian.caj -o C:\users\zzq\downloads\Lambertian.pdf
Error on PDF objects numbering.`

Lambertian.zip

Unknown file type 的可能

我在对cajviewer进行容器打包时,无意发现软件对以下几种文件类型进行了注册,其中 就有NH格式.

image

我猜想剩余的未知文件格式可能就是CAA,KDH,TEB这三种了

关于已有的方案

国人做了个
迅捷caj转换器的
收费版
但是价格还行
可以参考一下用于反向

C rewrite

I produced another version of the converter written in C. It has no external dependences. You can find my project here austerios/melon.

I registered an account just for this. NH needs more work.

Add install instruction

Add install instruction to Readme may be better

pip install PyPDF2
sudo apt install mupdf-tools

outlines 出错

System : Ubuntu

Traceback (most recent call last):
  File "./caj2pdf", line 41, in <module>
    add_outlines(toc, args.output, "tmp.pdf")
  File "/home/daidai/Downloads/caj2pdf-dev/utils.py", line 196, in add_outlines
    in_file = open(filename, 'rb')
FileNotFoundError: [Errno 2] No such file or directory

file download

转换失败

在调用caj2pdf convert 时,显示转换失败,信息如下:
error: cannot find startxref
warning: trying to repair broken xref
warning: repairing PDF document
Traceback (most recent call last):
File "./caj2pdf", line 36, in
caj.convert(args.output)
File "/data/opens/caj2pdf/parser.py", line 62, in convert
self._convert_caj(dest)
File "/data/opens/caj2pdf/parser.py", line 155, in _convert_caj
add_outlines(self.get_toc(), "pdf_toc.pdf", dest)
File "/data/opens/caj2pdf/utils.py", line 156, in add_outlines
PDF.NameObject("/Dest"): make_dest(pdf_out, t["page"])
File "/data/opens/caj2pdf/utils.py", line 107, in make_dest
d.append(pdfw.getPage(pg).indirectRef)
File "/usr/local/lib/python3.6/site-packages/PyPDF2/pdf.py", line 162, in getPage
return pages["/Kids"][pageNumber].getObject()
IndexError: list index out of range

当根 Pages 对象已存在时,寻找其编号的算法存在错误

By @sbkk000 in issue #4

error: cannot find startxref
warning: trying to repair broken xref
warning: repairing PDF document
error: unknown token in dict
error: unknown token in dict
warning: ignoring broken object (1 0 R)
error: unknown token in dict
warning: unknown token in dict
Traceback (most recent call last):
File "caj2pdf", line 36, in 
caj.convert(args.output)
File "C:\Users\------------\Desktop\caj2pdf-master\myparser.py", line 64, in convert
self._convert_caj(dest)
File "C:\Users\------------\Desktop\caj2pdf-master\myparser.py", line 214, in _convert_caj
add_outlines(self.get_toc(), "pdf_toc.pdf", dest)
File "C:\Users\------------\Desktop\caj2pdf-master\utils.py", line 184, in add_outlines
for p in pdf_in.pages:
File "C:\Users\------------\AppData\Local\Programs\Python\Python36-32\lib\site-packages\PyPDF2\utils.py", line 159, in getitem
len_self = len(self)
File "C:\Users\------------\AppData\Local\Programs\Python\Python36-32\lib\site-packages\PyPDF2\utils.py", line 150, in len
return self.lengthFunction()
File "C:\Users\------------\AppData\Local\Programs\Python\Python36-32\lib\site-packages\PyPDF2\pdf.py", line 1155, in getNumPages
self._flatten()
File "C:\Users\------------\AppData\Local\Programs\Python\Python36-32\lib\site-packages\PyPDF2\pdf.py", line 1505, in _flatten
catalog = self.trailer["/Root"].getObject()
File "C:\Users\------------\AppData\Local\Programs\Python\Python36-32\lib\site-packages\PyPDF2\generic.py", line 516, in getitem
return dict.getitem(self, key).getObject()
KeyError: '/Root'

可以使用OCRmyPDF使文档的文字可以选择

使用 CAJViewer 的打印功能 得到的 PDF 文件的内容为图片,无法进行文字的选择。但是我发现OCRmyPDF 项目可以在CAJViewer打印生成PDF之后ocr识别,使文件可以进行文字选择 排版也不会被破坏 但是大纲列表会丢失

转换之后的文档出现乱码

附件中的CAJ文件能够成功转换,但是转换之后的文件为乱码,汉字无法正常显示。
猜想原因:所选择的字体没有嵌入到PDF文件中。
这种情况在我之前上百个CAJ逆向研究样本中出现过好几次。

附件中的压缩包包括了CAJ文件和使用CAJ2PDF转换之后的PDF文件。
Unknown.zip

Still don't have write access

@JeziL I think it is a per-repository setting (especially for repo that already existed before it got moved into an organization). Here is my setting on FontVal-MacGUI to allow Georg to push into it:

Screenshot_2020-12-20-04-05-26

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.