nsfwjs

nsfwjs

基于浏览器的图像内容识别工具

nsfwjs是一个基于TensorFlow.js的JavaScript库,用于在客户端浏览器中识别图像内容。该工具可将图像分为绘画、色情动画、中性、色情和性感五类,准确率约为90-93%。nsfwjs支持浏览器、React Native和Node.js等多种环境,并提供模型缓存和自托管功能,以提升性能和灵活性。这个开源项目为开发者提供了一个便捷的图像内容识别解决方案。

NSFWJSTensorFlow.js机器学习图像分类内容审核Github开源项目
<p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/11f944fa-7aeb-4aed-bdcf-331ca7f68665.jpg" alt="NSFWJS标志" width="400" /> <h2 align="center">客户端不雅内容检查</h2> </p>

所有贡献者 CircleCI Netlify状态

这是一个简单的JavaScript库,可以帮助您在客户端浏览器中快速识别不雅图像。NSFWJS并不完美,但它相当准确(小型模型约90%,中型模型约93%的准确率)...而且它正在变得越来越准确。

为什么这会有用?查看公告博文

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/8b314110-ed5e-47c8-8025-78a20634c98e.gif" alt="演示示例" width="800" align="center" /> </p>

注意

如果您尝试访问Cloudfront托管的模型并遇到错误,很可能是因为模型已被移动到新位置。请查看我们的自行托管模型部分。在处理一些热链接问题后,我们将恢复模型的访问。

目录

<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --> <!-- END doctoc generated TOC please keep comment here to allow auto update -->

该库将图像概率分为以下5个类别:

  • Drawing - 适合工作场合的绘画(包括动漫)
  • Hentai - 色情动漫和色情绘画
  • Neutral - 适合工作场合的中性图像
  • Porn - 色情图像,性行为
  • Sexy - 性感露骨的图像,非色情

演示是持续部署源 - 试一试:http://nsfwjs.com

快速:如何使用该模块

支持async/await

import * as nsfwjs from "nsfwjs"; const img = document.getElementById("img"); // 如果您想自行托管模型或使用不同于可用模型的模型,请参阅"自行托管模型"部分。 const model = await nsfwjs.load(); // 对图像进行分类 const predictions = await model.classify(img); console.log("预测结果:", predictions);

不支持async/await

import * as nsfwjs from "nsfwjs"; const img = document.getElementById("img"); // 如果您想自行托管模型或使用不同于可用模型的模型,请参阅"自行托管模型"部分。 nsfwjs .load() .then(function (model) { // 对图像进行分类 return model.classify(img); }) .then(function (predictions) { console.log("预测结果:", predictions); });

库API

加载模型

在分类任何图像之前,您需要加载模型。

const model = nsfwjs.load(); // 默认:"MobileNetV2"

您可以使用可选的第一个参数来指定要使用的模型,从三个捆绑在一起的模型中选择。默认为:"MobileNetV2"。这支持在Webpack等支持的打包工具上进行树摇优化,因此您只会加载您正在使用的模型。

const model = nsfwjs.load("MobileNetV2Mid"); // "MobileNetV2" | "MobileNetV2Mid" | "InceptionV3"

您还可以使用相同的参数从您的网站/服务器加载模型,如自行托管模型部分所解释的那样。这样做可以将加载模型的包大小减少约1.33倍(33%),因为您可以直接使用二进制文件而不是与包一起捆绑的base64。例如,捆绑到包中的"MobileNetV2"模型为3.5MB,而托管的二进制文件为2.6MB。这只会在客户端浏览器上每次加载模型时(不使用缓存)产生差异,因为在服务器端,您只会在服务器启动时加载一次模型。

MobileNetV2模型 - 224x224

const model = nsfwjs.load("/path/to/model/directory/");

如果您使用的模型需要224x224以外的图像尺寸,您可以在选项参数中传递大小。

MobileNetV2Mid模型 - 299x299

const model = nsfwjs.load("/path/to/model/", { size: 299 }); /* 您可能需要使用图形类型加载此模型 */ const model = nsfwjs.load("/path/to/model/", { type: 'graph' });

如果您使用的是图形模型,则无法使用推断方法,并且需要在选项中告诉模型加载您正在处理的是图形模型。

InceptionV3模型 - 图形

const model = nsfwjs.load("/path/to/different/model/", { type: "graph" });

缓存

如果您在浏览器中使用,并希望随后从IndexedDB或本地存储加载(注意:模型大小可能太大,无法存储在本地存储中!),您可以使用适当的方案保存底层模型,并从那里加载。

const initialLoad = await nsfwjs.load( "/path/to/different/model/" /*, { ...options }*/ ); await initialLoad.model.save("indexeddb://exampleModel"); const model = await nsfwjs.load("indexeddb://exampleModel" /*, { ...options }*/);

参数

初始加载:

  1. 包含model.json的文件夹的URL或路径。
  2. 可选对象,包含您的模型期望的大小或类型属性。

后续加载:

  1. IndexedDB路径。
  2. 可选对象,包含您的模型期望的大小或类型属性。

返回值

  • 准备使用的NSFWJS模型对象

故障排除

  • 在加载模型的标签页上,检查元素并导航到"应用程序"标签。在左侧窗格的"存储"部分下,有一个名为"IndexedDB"的子部分。在这里您可以查看模型是否正在保存。

分类图像

此函数可以接受任何基于浏览器的图像元素(<img><video><canvas>),并返回最可能的预测及其置信度水平的数组。

// 返回前3个猜测(而不是所有5个) const predictions = await model.classify(img, 3);

参数

  • 张量、图像数据、图像元素、视频元素或画布元素进行检查
  • 要返回的结果数量(默认为所有5个)

返回值

  • 包含classNameprobability的对象数组。数组大小由classify函数的第二个参数决定。

生产环境

Tensorflow.js提供了两个标志,enableProdModeenableDebugMode。如果您要在生产环境中使用NSFWJS,请确保在加载NSFWJS模型之前启用生产模式。

import * as tf from "@tensorflow/tfjs"; import * as nsfwjs from "nsfwjs"; tf.enableProdMode(); //... let model = await nsfwjs.load(`${urlToNSFWJSModel}`);

注意: 在转移到生产环境之前,请考虑下载并自行托管模型,如自行托管模型部分所述。这可能会改善模型的初始加载时间。此外,如果您在浏览器中使用,请考虑缓存模型。

安装

NSFWJS以TensorFlow.js作为对等依赖。如果您的项目尚未包含TFJS,您需要添加它。

# 对等依赖 $ yarn add @tensorflow/tfjs # 安装NSFWJS $ yarn add nsfwjs

对于脚本标签,请包含所有捆绑包,如此处所示。然后简单地访问nsfwjs全局变量。这要求您已经导入了TensorFlow.js。

自行托管模型

NSFWJS的魔力来自NSFW检测模型。默认情况下,模型已被打包到这个包中。但你可能想在自己的服务器上托管模型,以通过加载原始二进制文件来减少包大小,或者托管你自己的自定义模型。如果你想托管自己版本的模型文件,可以按照以下步骤操作。然后你可以在load函数中传递托管文件的相对URL,必要时还可以传递options

以下是如何在网站上安装默认模型:

  1. 通过下载zip文件或克隆git clone https://github.com/infinitered/nsfwjs.git来下载项目。如果下载zip文件不起作用,请使用克隆。
  2. 从项目根目录提取models文件夹,并将其放入网络应用程序的public目录中,以便与你的网站一起作为静态文件提供服务。(你可以将其托管在任何地方,比如S3存储桶,只要你可以通过URL访问它即可)。
  3. 获取URL并将其放入nsfwjs.load()中。例如:nsfwjs.load(https://yourwebsite.com/models/mobilenet_v2/model.json)

运行示例

浏览器中的Tensorflow.js

https://nsfwjs.com/提供支持的演示可在`examples/nsfw_demo`文件夹中找到。

要运行演示,请执行yarn prep,这将把最新代码复制到演示中。完成后,你可以cd进入演示文件夹并使用yarn start运行。

Browserify

使用纯promises和脚本标签的browserify版本可在minimal_demo文件夹中找到。

<script src="/path/to/model/directory/model.min.js"></script> <script src="/path/to/model/directory/group1-shard1of2.min.js"></script> <script src="/path/to/model/directory/group1-shard2of2.min.js"></script> <script src="/path/to/bundle/nsfwjs.min.js"></script>

你应该将nsfwjs.min.js文件和所有你想使用的模型包托管在你的项目旁边,并在脚本标签中使用src属性引用它们。

React Native

NSFWJS React Native应用 React Native演示

加载模型的本地副本以减少网络负载,并利用TFJS-React-Native。博客文章

Node JS应用

使用NPM,你也可以在服务器端使用该模型。

$ npm install nsfwjs $ npm install @tensorflow/tfjs-node
const axios = require("axios"); //你可以使用任何http客户端 const tf = require("@tensorflow/tfjs-node"); const nsfw = require("nsfwjs"); async function fn() { const pic = await axios.get(`link-to-picture`, { responseType: "arraybuffer", }); const model = await nsfw.load(); // 加载本地模型,nsfw.load('file://./path/to/model/') // 图像必须是tf.tensor3d格式 // 你可以使用tf.node.decodeImage(Uint8Array,channels)将图像转换为tf.tensor3d const image = await tf.node.decodeImage(pic.data, 3); const predictions = await model.classify(image); image.dispose(); // 必须显式管理Tensor内存(让tf.Tensor超出作用域不足以释放其内存)。 console.log(predictions); } fn();

这里是另一个使用Express的multipart/form-data POST的完整示例,假设你使用的是JPG格式。

const express = require("express"); const multer = require("multer"); const jpeg = require("jpeg-js"); const tf = require("@tensorflow/tfjs-node"); const nsfw = require("nsfwjs"); const app = express(); const upload = multer(); let _model; const convert = async (img) => { // UInt8字节数组中解码的图像 const image = await jpeg.decode(img, { useTArray: true }); const numChannels = 3; const numPixels = image.width * image.height; const values = new Int32Array(numPixels * numChannels); for (let i = 0; i < numPixels; i++) for (let c = 0; c < numChannels; ++c) values[i * numChannels + c] = image.data[i * 4 + c]; return tf.tensor3d(values, [image.height, image.width, numChannels], "int32"); }; app.post("/nsfw", upload.single("image"), async (req, res) => { if (!req.file) res.status(400).send("缺少图像multipart/form-data"); else { const image = await convert(req.file.buffer); const predictions = await _model.classify(image); image.dispose(); res.json(predictions); } }); const load_model = async () => { _model = await nsfw.load(); }; // 将模型保存在内存中,确保它只加载一次 load_model().then(() => app.listen(8080)); // curl --request POST localhost:8080/nsfw --header 'Content-Type: multipart/form-data' --data-binary 'image=@/full/path/to/picture.jpg'

你还可以使用lovell/sharp进行预处理任务和处理更多文件格式。

NSFW过滤器

NSFW过滤器是一个使用NSFWJS从浏览器中过滤掉NSFW图像的网络扩展。

它目前可用于Chrome和Firefox,完全开源。

这里查看该项目。

学习TensorFlow.js

通过我的O'Reilly书籍"Learning TensorFlow.js"学习如何编写像NSFWJS这样的库,可在O'Reilly亚马逊上购买。

Learning TensorFlow.js JavaScript Book Red

更多!

提供了一个FAQ页面。

更多关于NSFWJS和TensorFlow.js的信息 - https://youtu.be/uzQwmZwy3yw

该模型在Keras中经过几天的训练,使用了60多GB的数据。请务必查看模型代码,该模型使用Alexander Kimnsfw_data_scraper提供的数据进行训练。

开源

NSFWJS作为开源软件,现在和将来都是免费使用的:heart:。它采用MIT许可,我们将始终尽最大努力提供帮助并快速解决问题。如果你想联系我们,请加入我们的社区slack

需要专家?为你的下一个项目聘请Infinite Red

如果你的项目需要React Native方面的专家,Infinite Red随时为你提供帮助!我们经验丰富的软件工程师团队曾与微软、Zoom和Mercari等公司合作,成功实现了一些最复杂的项目。

无论是运行整个项目还是培训团队使用React Native,我们都可以帮助你解决公司最棘手的工程挑战 – 同时让这个过程成为一次美好的体验。 准备好看看我们如何合作了吗?给我们发送消息

贡献者

感谢这些优秀的人(表情符号说明):

<!-- 贡献者列表开始 - 请勿移除或修改此部分 --> <!-- prettier-ignore-start --> <!-- markdownlint-disable --> <table> <tbody> <tr> <td align="center" valign="top" width="14.28%"><a href="http://gantlaborde.com/"><img src="https://avatars0.githubusercontent.com/u/997157?v=4?s=100" width="100px;" alt="Gant Laborde"/><br /><sub><b>Gant Laborde</b></sub></a><br /><a href="#question-GantMan" title="回答问题">💬</a> <a href="#blog-GantMan" title="博客文章">📝</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=GantMan" title="代码">💻</a> <a href="#example-GantMan" title="示例">💡</a> <a href="#ideas-GantMan" title="想法、规划与反馈">🤔</a> <a href="#infra-GantMan" title="基础设施(托管、构建工具等)">🚇</a> <a href="https://github.com/infinitered/nsfwjs/pulls?q=is%3Apr+reviewed-by%3AGantMan" title="审核过的拉取请求">👀</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=GantMan" title="测试">⚠️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://jamonholmgren.com"><img src="https://avatars3.githubusercontent.com/u/1479215?v=4?s=100" width="100px;" alt="Jamon Holmgren"/><br /><sub><b>Jamon Holmgren</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=jamonholmgren" title="文档">📖</a> <a href="#ideas-jamonholmgren" title="想法、规划与反馈">🤔</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=jamonholmgren" title="代码">💻</a> <a href="#content-jamonholmgren" title="内容">🖋</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/mazenchami"><img src="https://avatars.githubusercontent.com/u/9324607?v=4?s=100" width="100px;" alt="Mazen Chami"/><br /><sub><b>Mazen Chami</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=mazenchami" title="文档">📖</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=mazenchami" title="代码">💻</a> <a href="https://github.com/infinitered/nsfwjs/pulls?q=is%3Apr+reviewed-by%3Amazenchami" title="审核过的拉取请求">👀</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=mazenchami" title="测试">⚠️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/jstudenski"><img src="https://avatars0.githubusercontent.com/u/7350279?v=4?s=100" width="100px;" alt="Jeff Studenski"/><br /><sub><b>Jeff Studenski</b></sub></a><br /><a href="#design-jstudenski" title="设计">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/fvonhoven"><img src="https://avatars2.githubusercontent.com/u/10098988?v=4?s=100" width="100px;" alt="Frank von Hoven III"/><br /><sub><b>Frank von Hoven III</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=fvonhoven" title="文档">📖</a> <a href="#ideas-fvonhoven" title="想法、规划与反馈">🤔</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/sandeshsoni"><img src="https://avatars3.githubusercontent.com/u/3761745?v=4?s=100" width="100px;" alt="Sandesh Soni"/><br /><sub><b>Sandesh Soni</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=sandeshsoni" title="代码">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/seannam1218"><img src="https://avatars1.githubusercontent.com/u/24437898?v=4?s=100" width="100px;" alt="Sean Nam"/><br /><sub><b>Sean Nam</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=seannam1218" title="文档">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/emer7"><img src="https://avatars1.githubusercontent.com/u/21377166?v=4?s=100" width="100px;" alt="Gilbert Emerson"/><br /><sub><b>Gilbert Emerson</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=emer7" title="代码">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/xilaraux"><img src="https://avatars2.githubusercontent.com/u/17703730?v=4?s=100" width="100px;" alt="Oleksandr Kozlov"/><br /><sub><b>Oleksandr Kozlov</b></sub></a><br /><a href="#infra-xilaraux" title="基础设施(托管、构建工具等)">🚇</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=xilaraux" title="测试">⚠️</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=xilaraux" title="代码">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="http://morganlaco.com"><img src="https://avatars2.githubusercontent.com/u/4466642?v=4?s=100" width="100px;" alt="Morgan"/><br /><sub><b>Morgan</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=mlaco" title="代码">💻</a> <a href="#ideas-mlaco" title="想法、规划与反馈">🤔</a></td> <td align="center" valign="top" width="14.28%"><a href="http://mycaule.github.io/"><img src="https://avatars2.githubusercontent.com/u/6161385?v=4?s=100" width="100px;" alt="Michel Hua"/><br /><sub><b>Michel Hua</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=mycaule" title="代码">💻</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=mycaule" title="文档">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://www.infinite.red"><img src="https://avatars2.githubusercontent.com/u/1771152?v=4?s=100" width="100px;" alt="Kevin VanGelder"/><br /><sub><b>Kevin VanGelder</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=kevinvangelder" title="代码">💻</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=kevinvangelder" title="文档">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="http://technikempire.com"><img src="https://avatars2.githubusercontent.com/u/11234763?v=4?s=100" width="100px;" alt="Jesse Nicholson"/><br /><sub><b>Jesse Nicholson</b></sub></a><br /><a href="#data-TechnikEmpire" title="数据">🔣</a> <a href="#ideas-TechnikEmpire" title="想法、规划与反馈">🤔</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/camhart"><img src="https://avatars0.githubusercontent.com/u/3038809?v=4?s=100" width="100px;" alt="camhart"/><br /><sub><b>camhart</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=camhart" title="文档">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Cameron-Burkholder"><img src="https://avatars2.githubusercontent.com/u/13265710?v=4?s=100" width="100px;" alt="Cameron Burkholder"/><br /><sub><b>Cameron Burkholder</b></sub></a><br /><a href="#design-Cameron-Burkholder" title="设计">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://qwertyforce.ru"><img src="https://avatars0.githubusercontent.com/u/44163887?v=4?s=100" width="100px;" alt="qwertyforce"/><br /><sub><b>qwertyforce</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=qwertyforce" title="文档">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/YegorZaremba"><img src="https://avatars3.githubusercontent.com/u/31797554?v=4?s=100" width="100px;" alt="Yegor <3"/><br /><sub><b>Yegor <3</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=YegorZaremba" title="代码">💻</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=YegorZaremba" title="测试">⚠️</a></td> <td align="center" valign="top" width="14.28%"><a href="http://navendu.me"><img src="https://avatars1.githubusercontent.com/u/49474499?v=4?s=100" width="100px;" alt="Navendu Pottekkat"/><br /><sub><b>Navendu Pottekkat</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=navendu-pottekkat" title="文档">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/VladStepanov"><img src="https://avatars0.githubusercontent.com/u/49880862?v=4?s=100" width="100px;" alt="Vladislav"/><br /><sub><b>Vladislav</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=VladStepanov" title="代码">💻</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=VladStepanov" title="文档">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/nacht42"><img src="https://avatars1.githubusercontent.com/u/37903575?v=4?s=100" width="100px;" alt="Nacht"/><br /><sub><b>Nacht</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=nacht42" title="代码">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/kateinkim"><img src="https://avatars.githubusercontent.com/u/53795920?v=4?s=100" width="100px;" alt="kateinkim"/><br /><sub><b>kateinkim</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=kateinkim" title="代码">💻</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=kateinkim" title="文档">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://janpoonthong.github.io/portfolio/"><img src="https://avatars.githubusercontent.com/u/56725335?v=4?s=100" width="100px;" alt="jan"/><br /><sub><b>jan</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=JanPoonthong" title="文档">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/roerohan"><img src="https://avatars.githubusercontent.com/u/42958812?v=4?s=100" width="100px;" alt="Rohan Mukherjee"/><br /><sub><b>Rohan Mukherjee</b></sub></a><br /><a href="#question-roerohan" title="回答问题">💬</a> <a href="#infra-roerohan" title="基础设施(托管、构建工具等)">🚇</a> <a href="#maintenance-roerohan" title="维护">🚧</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=roerohan" title="代码">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://hazya.dev"><img src="https://avatars.githubusercontent.com/u/63403456?v=4?s=100" width="100px;" alt="Hasitha Wickramasinghe"/><br /><sub><b>Hasitha Wickramasinghe</b></sub></a><br /><a href="https://github.com/infinitered/nsfwjs/commits?author=haZya" title="代码">💻</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=haZya" title="文档">📖</a> <a href="#example-haZya" title="示例">💡</a> <a href="#ideas-haZya" title="想法、规划与反馈">🤔</a> <a href="#infra-haZya" title="基础设施(托管、构建工具等)">🚇</a> <a href="https://github.com/infinitered/nsfwjs/commits?author=haZya" title="测试">⚠️</a></td> </tr> </tbody> </table> <!-- markdownlint-restore --> <!-- prettier-ignore-end --> <!-- ALL-CONTRIBUTORS-LIST:END -->

本项目遵循all-contributors规范。欢迎各种形式的贡献!

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多