Tag: 开源

  • 如何避免Qt和qt-creator的坑:商用闭源软件开发指南

    如何避免Qt和qt-creator的坑:商用闭源软件开发指南

    大家好,我是王大神,今天我将和大家分享一个关于Qt和qt-creator的故事。这个故事将引出我们为什么要写这篇文章,以及如何在开发商用闭源软件时避免一些潜在的法律坑。废话不多说,让我们开始吧!

    引子:梦想与挑战

    很多年前,有一位名叫小李的年轻开发者,他有一个伟大的梦想——创建一款革命性的软件,可以自动化生成代码和配置代码,从而大幅提高开发效率。他对Qt的强大功能和跨平台特性感到着迷,于是决定基于Qt来实现他的梦想。

    小李的梦想是美好的,但他并不知道在商用闭源软件开发的道路上,隐藏着一些坑。让我们一起跟随小李的脚步,了解这些坑以及如何避免它们。

    第一章:Qt和qt-creator的开源协议

    小李开始了他的开发之旅,但很快他就发现了一个重要的事实——Qt采用了GNU通用公共许可证(GPL)协议,而qt-creator使用GNU较宽通用公共许可证(LGPL)。这两个协议都要求开发者在分发软件时开源源代码。

    小李陷入了思考中:难道他的商用软件也需要开源吗?这将是他的梦想破灭的开始吗?

    第二章:商用闭源的挑战

    小李并不是唯一一个面对这一问题的开发者。有人曾尝试使用动态连接来规避开源要求,但结果并不总是顺利。有报道称,Qt公司可能会向依赖Qt的商业应用程序发出律师函,要求它们遵守开源协议。这让小李更加焦虑,他不知道该如何继续前行。

    第三章:选择其他开发工具?

    在面对Qt和qt-creator的开源协议时,小李开始考虑是否应该寻找其他开发工具。他听说了Electron和Flutter等工具,它们在商用闭源方面可能更加灵活。但小李也明白,选择开发工具取决于项目的需求和开发者的偏好。

    第四章:智慧的选择

    最后,小李做出了智慧的选择。他明白了Qt和qt-creator的开源协议要求,在商用软件中开源源代码是法律底线。虽然有人可能尝试使用动态连接来规避,但Qt公司积极维护协议,可能会采取法律行动。

    因此,小李决定购买Qt的企业版授权,以确保他的项目合法并受到支持。他明白,作为开发者,时刻关注开源协议的要求是非常重要的,这将有助于保护自己和自己的项目。

    结语:智慧之路

    在软件开发的道路上,我们都会面临各种挑战和坑。了解开源协议的要求,明智地选择开发工具,购买合适的授权,这些都是帮助我们避免坑的关键步骤。不管你是像小李一样有梦想的年轻开发者,还是经验丰富的老手,这些建议都将对你有所帮助。

    希望这篇文章能够为你提供有价值的信息,并帮助你在商用闭源软件开发中走得更远。如果你有任何其他问题或需要更多信息,请随时向我提问。

  • 实现情侣在线同步观影的绝佳方案

    实现情侣在线同步观影的绝佳方案

    异地恋或者在不同地方的情侣常常会面临一个共同的问题:如何在线同步观看电影,以分享电影时刻和增进感情?在这篇文章中,我们将探讨一些可行的解决方案,帮助情侣们享受电影的乐趣,而不必担心播放不同步或质量下降的问题。

    问题的背景

    让我们首先了解一下问题的背景。许多情侣在不同的地方,或者由于各种原因无法亲自相聚,但他们仍然希望能够一起观看电影,分享这种特殊的时刻。然而,现有的视频会议软件并不总是满足他们的需求。录屏和录音的质量可能会受到限制,导致观影体验下降。因此,他们寻求一种更好的解决方案,使观看电影成为愉快的体验。

    解决方案一:使用媒体服务器

    一个解决方案是使用媒体服务器来共享电影。有一些免费和开源的媒体服务器软件,如Jellyfin和Plex,可以让你轻松地建立自己的媒体库。这些软件支持同步播放,允许你和你的伴侣同时观看相同的电影,而不必担心播放不同步的问题。你可以上传自己喜欢的电影,并与伴侣共享。

    解决方案二:使用专业的工具

    如果你希望更专业一点的解决方案,可以考虑使用专门设计的工具,如VideoTogether或Parsec。这些工具专为多人在线观影而设计,提供了高质量的视频流和低延迟的同步播放。它们通常需要适度的付费,但可以为你提供极好的观影体验。

    解决方案三:利用现有的技术

    一些用户提到了利用现有的技术,如Apple的SharePlay功能和FaceTime。这些功能允许你和你的伴侣同时观看电影,而不必依赖第三方工具。然而,这些功能通常仅适用于苹果设备,如果你和你的伴侣都使用macOS和其他苹果设备,这可能是一个不错的选择。

    解决方案四:自建直播间

    如果你想要更多的控制权,你可以考虑自建一个直播间,用来播放你想看的电影。这可以通过各种方式实现,包括使用OBS进行推流,或者使用腾讯的云直播服务。这种方法可以提供高质量的视频和音频流,但可能需要一些技术知识和付费。

    解决方案五:自定义的解决方案

    最后,如果你有一些编程或技术方面的知识,你还可以考虑创建自定义的解决方案。例如,你可以编写一个能够远程同步触发的程序,以控制播放和暂停电影。这个方法需要一些额外的工作,但可以为你提供最大的自由度。

    结论

    无论你选择哪种解决方案,都要根据你和你的伴侣的需求和技术水平来做出决定。每个解决方案都有其优点和局限性,所以请根据你的情况选择最

    适合你的方法。重要的是,能够共享电影时刻,增进感情,无论你们身在何处。

    在未来,我们也期待看到更多的技术创新,以满足情侣们在不同地点共享电影时刻的需求。

  • 构建自己的NAS家庭服务器:省钱、省心、省心事

    构建自己的NAS家庭服务器:省钱、省心、省心事

    在这个数字化时代,我们积累了大量的数据和服务需求。无论是照片、视频还是文档,数据的存储和访问对于每个人都至关重要。然而,云存储和订阅服务的费用逐渐攀升,使人们陷入了昂贵的存储解决方案和复杂的订阅费用之中。如果你正寻求一种方法来摆脱这一困境,那么自己构建一个便宜的DIY NAS家庭服务器可能是一个更好的选择。

    DIY NAS与购买现成产品的对比

    在决定是否走DIY NAS的路线之前,值得考虑一下你对设备的需求。QNAP或Synology等品牌的NAS产品提供了更为简单、不费时的选择。它们提供了预安装的操作系统和全面的软件套件,可以处理云文档、备份等各种任务。此外,它们支持Docker容器、硬件RAID,并且可以扩展到许多NVMe和SATA端口,满足高级用途。但请准备好支付高昂的价格以换取即插即用的便捷性。

    相比之下,DIY NAS涉及的步骤更多,不仅包括选择硬件,还包括设置软件。但优势也是显而易见的:DIY路线为你的预算提供更多的性能,具有更大的硬件和升级灵活性,而且你可以通过重新利用旧笔记本电脑、PC或树莓派来节省大量费用。我多年来一直在我的树莓派4上运行家庭服务器,直到最近才升级。

    选择适合建造廉价NAS的硬件

    要从零开始构建NAS有两种主要方法:一种是使用类似PC的专用外壳,另一种是使用带有直接附加存储(DAS)的迷你PC。前者是重新利用旧CPU的绝佳方式,可以提供大量的NVMe和SATA端口,以实现最佳性能和存储。然而,选择主板、内存、电源和机箱等部件相对复杂,如果没有零件在手,成本可能会迅速超过预制NAS的价格。

    如果你从零开始并且不需要特别复杂的配置,我建议选择迷你PC和DAS路线。它们价格便宜,设置简单,而且在需要额外处理能力或可扩展存储时仍然非常容易升级。唯一的缺点是与较大的主板相比,NVMe/SATA硬盘连接数有限。要获得外部存储的良好性能,你需要一个USB 3.0(5Gbps)端口或更高版本,但即使这样,如果打算在同一DAS中在多个SSD之间传输大量数据,这也可能成为瓶颈。你可以通过使用10Gbps USB 3.1 Gen 2端口、电缆和DAS来解决这个问题,但这些更昂贵。但对于存储照片、音乐和文件来说,5Gbps的USB速度已经足够了,特别是与旋转硬盘一起使用时。

    选择适用于DIY NAS的CPU/迷你PC

    选择合适的CPU/迷你PC是关键决策。由于NAS始终处于开启状态,低待机功耗是一个很大的优点,但这需要与提供的最大性能进行权衡。基本的NAS用例,如文件共享,需要非常少的功率,但如果你想进行AI图像识别或HDR视频转码,需求会迅速增加。

    例如,1W的基于Arm架构的Raspberry Pi 3可以用于Plex媒体服务器,但只支持直接播放。而4W的树莓派4型号勉强可以运行低比特率的1080p x265软件转码。但要实现4K转码,通常需要Intel Core i5或i7处理器,伴随着大约60W的系统空闲功耗。幸运的是,现代移动芯片上的Intel Quick Sync或类似的硬件转码效果相当不错,可以大幅降低功耗。我编制了一个大致的硬件指南,以满足特定用例的需求,但不可能涵盖每一种硬件。

    芯片组 TDP范围 用例
    极低功耗 Raspberry Pi 3 1-3W 文件共享和备份、媒体服务器(仅直接播放)、基本的Minecraft服务器
    低功耗 Raspberry Pi 4B、Intel J、AMD Ryzen嵌入式(无GPU) 5-20W 文件共享和备份、媒体服务器、低用户数1080p视频转码、基本的图片机器学习、低玩家数量的Minecraft服务器、家庭助手
    平衡功耗 Intel N、AMD Ryzen嵌入式(带GPU) 10-30W 文件共享和备份、媒体服务器、多用户4K视频转码、图片机

    器学习、Minecraft服务器、家庭助手
    高级 | Intel Core i3、i5、i7、AMD Ryzen 3、5、7 | 45-200W | 文件共享和备份、媒体服务器、高质量多用户视频转码、图片机器学习、Minecraft服务器、家庭助手

    在我的最新构建中,我选择了一台新的搭载Intel N100处理器的Trigkey G5迷你PC(来自亚马逊,售价200美元),配备了过剩的16GB LPDDR5内存、双2.5Gbps LAN以及一块性价比较高的500GB NMVe操作系统固态硬盘。这款迷你PC在空闲状态下的功耗仅略低于6W(几乎与树莓派4相当),但却配备了四个3.4GHz的Alder Lake E核心和硬件转码功能。在峰值时可以达到30W的功耗,足以处理广泛的应用程序和我测试过的四个4K HDR HVEC到1080p的转码流。这远远超过了中端NAS市场上充斥着的Intel Celeron J和AMD Ryzen V1000芯片所提供的性能。

    5W和60W待机功耗之间的差距可能会带来每年100美元的差异。

    搭配一台4盘位的Terramaster DAS(来自亚马逊,售价170美元),可以获得高达80TB的存储容量,这个配置比高端的Synology DS923+(售价600美元)还要强大,成本不到其三分之二。尽管没有硬件RAID支持(我不需要),但你可以为你的DAS添加这个功能,成本相对较低。

    这只是高端DIY选项的一个例子。你可以选择一台搭载Intel N5095、8GB内存的迷你PC(来自亚马逊,售价149美元)和一个双盘位外壳(来自亚马逊,售价80美元),价格大致与入门级的Synology DS223相当。但同样,这款芯片的性能显著更强,足以处理数个4K转码流,并从庞大的库中创建图片缩略图。廉价DIY NAS配置的另一个好处是,迷你PC可以自带一个2.5英寸硬盘或两个,如果这正是你所需要的,你可以廉价地将一个2.5英寸硬盘连接到USB硬盘上,或者选择适合你的存储需求并根据需要进行升级的多种两盘、四盘甚至更多盘位的DAS选项。

    安装DIY NAS软件的技巧

    到目前为止,一切都很容易,但安装软件是为了省钱而进行的努力所需要付出的时间。虽然我不能在这里涵盖所有可能的配置选项,但我可以提供一些初学者友好的简短提示,帮助你入门。

    为你的NAS选择操作系统

    尽管坚持使用熟悉的操作系统如Windows可能很诱人,但NAS更适合没有显示器的操作系统,比如众多的Linux发行版之一。此外,我们还可以享受到Docker的好处。然而,对于未经培训的人来说,安装和使用Linux命令行可能会感到困难。幸运的是,OpenMediaVault提供了可启动的ISO媒体,使安装过程非常简单,所以我不需要在这里重复步骤。只需将一个USB驱动器刻录成可启动盘,在你的PC上引导它,然后按照步骤在全新硬盘上安装OMV即可。TrueNAS Scale也是一个不错的选择,因为它提供了可启动的ISO媒体,但本文重点介绍了OMV。

    但值得注意的是,我的最新设置无法检测到我的迷你PC的LAN硬件,在使用新硬件时可能会出现问题。因此,我安装了最新版本的Debian(包括最新的Linux内核),并确保在安装过程中启用了SSH,以便我可以在启动时访问命令行。如果需要命令行访问,你需要找到你的NAS本地IP地址,并使用像Putty这样的服务进行隧道连接。

    然后,我使用了这个非常有帮助的脚本来在其上安装OMV——这与在树莓派上安装OMV的过程相同。一旦安装完成,你需要从路由器的设置中找到NAS/PC的本地IP地址(例如192.168.1.10),然后通过Web浏览器登录到OMV。就是这样,你将不再需要触及命令行。

    添加应用程序和服务

    OMV默认提供了管理硬盘驱动器、设置网络文件共享、同步备份和监视系统所需的一切。但我们还需要安装一些应用程序来更充分地利用我们的设置。这就是Docker派上用场的地方。首先,你需要在System > omv_extras > Docker-repo下启用Docker,然后在System > Plugins中安装Compose插件(如果尚未安装omv_extras,你也可以在这里找到它)。

    现在,你应该能够看到Service > Compose菜单。进入Files开始添加应用程序。OMV提供了

    一些示例,你可以添加它们,其中包括Deluge、Plex、Pihole、Syncthing等流行的应用程序。但在保存和启动服务之前,我们需要了解一些关于docker-compose文件的基础知识,特别是volumes参数。

    Docker可能令人生畏,但一旦你掌握了它,就能够访问广阔的自托管软件世界。选择太多,因此我列出了一个非穷尽的列表,以便你入门。

    媒体服务器

    • Jellyfin — 开源媒体服务器,支持良好的客户端。
    • Plex — 闭源媒体服务器,支持广泛的客户端。
    • Navidrome — 开源音乐服务器。

    图片查看器

    • Photoprism — 具有机器学习功能的照片库。
    • Lychee — 开源画廊管理工具。
    • Immich — 早期开发的Google照片替代方案。

    办公/文件

    • Nextcloud — 开源的自托管云存储。
    • Owncloud — 半开源的自托管云存储。

    有用的工具

    • Home Assistant — 在一个地方管理你的智能家居设备。
    • Nginx反向代理管理器 — 通过你自己的子域名将服务暴露在网上。
    • Pihole — 通过将流量路由通过你的服务器来阻止广告。

    从简单的备份到自托管的替代品,以替代昂贵的云服务,构建一个廉价的DIY NAS可以割断与日俱增的昂贵云服务的联系。现成的NAS硬件是入门的好方法,尤其是如果你时间有限。但希望这篇指南能够说服你,自己构建PC或Mini-PC/DAS设置是掌控自己设置的好方法。而且成本要低得多,硬件要多得多,比Synology或QNAP多得多。

    如果你对自己的DIY NAS有更多的需求和野心,那么自己动手搭建一个NAS可能是个不错的选择。不仅可以根据自己的需求定制硬件,还可以掌控整个系统,提供更多的性能和灵活性。当然,这需要更多的时间和精力,但最终的结果可能会更加令人满意。

    最后,不要忘记备份你的数据,因为DIY NAS虽然强大,但也有风险。无论你选择哪种方式,都要确保你的数据安全,这样你就可以享受到自己构建的NAS带来的自由和性能优势。

  • 如何快速检索上亿数据

    如何快速检索上亿数据

    在现代信息时代,我们每天都生成和处理着海量的数据。无论是互联网公司、金融机构还是科学研究,都需要处理大规模的数据集。在这个背景下,如何快速、高效地检索上亿条数据成了一个重要的问题。假设你正在开发一个应用程序,需要根据一个或两个字段进行模糊查询,那么应该选择什么样的中间件或搜索方法呢?本文将为你提供一些解决方案和建议。

    1. Elasticsearch

    Elasticsearch是一个强大的全文搜索引擎,广泛用于处理大规模数据集的检索和分析。它具有出色的性能和可伸缩性,特别适用于全文搜索和模糊查询。Elasticsearch可以轻松地处理上亿条数据,并提供高效的检索功能。它还支持分布式部署,可以根据需求扩展集群规模,确保性能和可用性。

    2. ClickHouse

    ClickHouse是一个用于分析和查询大数据集的列式数据库管理系统。它在处理大规模数据时表现出色,特别适用于快速的聚合和分析操作。如果你的搜索结果通常是返回少量数据,ClickHouse可以在毫秒级别内提供响应,确保出色的用户体验。

    3. MeiliSearch

    MeiliSearch是一个开源的全文搜索引擎,专注于提供简单而快速的搜索解决方案。它可以轻松应对上亿条数据的模糊查询,并具有高度可配置性。MeiliSearch支持多种编程语言,因此可以与PHP、Java等常见的编程语言轻松集成。

    4. Manticore Search

    Manticore Search是一个开源的全文搜索引擎,具有强大的文本检索和分析功能。它支持多种查询类型,包括全文搜索、模糊查询和范围查询。Manticore Search可以处理大规模数据集,并提供出色的性能。

    5. N-gram索引

    如果你使用Elasticsearch或其他搜索引擎的模糊查询功能,但性能不如预期,可以考虑使用N-gram索引。N-gram索引将文本分成连续的N个字符,并将它们存储在索引中。这种方法可以提高模糊查询的性能,尤其是在处理大规模数据时。

    6. 硬件优化

    无论你选择哪种搜索方法,硬件优化都是至关重要的。确保你的服务器具有足够的内存、处理器和存储容量,以应对大规模数据的检索需求。此外,使用SSD硬盘可以提高数据访问速度,进一步提升性能。

    总结

    在处理上亿条数据的模糊查询时,选择合适的搜索方法和中间件至关重要。Elasticsearch、ClickHouse、MeiliSearch和Manticore Search都是强大的工具,可以根据你的具体需求选择合适的解决方案。此外,使用N-gram索引和硬件优化可以进一步提高性能,确保你的应用程序能够高效地处理大规模数据。

  • 探索SmartKnob:开源虚拟刻度旋钮的未来

    探索SmartKnob:开源虚拟刻度旋钮的未来

    想象一下,你坐在办公桌前,试图调整电脑屏幕的亮度。你手中握着一个旋钮,不同寻常的是,它不只是冷冰冰的金属,而是有着柔软质感的材料。当你旋转它时,感觉到一种微妙的阻力,仿佛是在探索一个真实的世界。屏幕的亮度随着旋钮的转动而逐渐改变,仿佛与你亲手操作有关。这不再是普通的旋钮,这是SmartKnob,数字时代的旋钮。

    SmartKnob是什么?

    SmartKnob是一款开源的输入设备,它与众不同之处在于,它具备软件可配置的终点和虚拟刻度。SmartKnob采用了磁性编码器和无刷云台电机,实现了闭环扭矩反馈控制。这意味着用户可以感受到真实的点击和弹性,使得调整变得更加精确和令人愉悦。

    这个项目的灵感源自Jesse Schoch的视频”haptic textures and virtual detents“,以及在SimpleFOC社区中的相关讨论。SmartKnob的目标是将这种虚拟刻度的触感带入我们的数字生活中,使用户能够更加自由和精确地进行各种调整。

    项目背后的创作者

    这个激动人心的项目的创造者是Scott Bezek,他是一位热衷于开源硬件和软件的电子爱好者。他将自己的技术和创意投入到SmartKnob中,旨在为用户提供一种全新的、令人愉悦的控制体验。

    SmartKnob的特点

    SmartKnob拥有一系列引人注目的特点,使其成为一个备受期待的项目。

    闭环扭矩反馈

    SmartKnob采用磁性编码器和无刷云台电机,实现了闭环扭矩反馈控制。这一技术使用户可以感受到真实的点击和弹性,使调整更加精确和令人愉悦。无论你是在调整音响音量还是控制车辆的空调温度,SmartKnob都能提供与实体旋钮一样的触感。

    软件可配置

    SmartKnob的终点和虚拟刻度是软件可配置的。这意味着用户可以根据自己的需求动态地调整旋钮的触感,使其适应不同的应用场景。无论是需要快速调整还是进行精确的微调,SmartKnob都能满足你的需求。这种灵活性是传统旋钮无法比拟的。

    开源项目

    SmartKnob是一个开源项目,这意味着任何人都可以查看和修改其设计和代码。这鼓励了创新和社区参与,使项目不断发展和改进。如果你有自己的创意或改进建议,你可以积极参与到SmartKnob的发展中,为用户提供更好的体验。

    SmartKnob View

    SmartKnob View:更直观的控制体验

    SmartKnob项目中的一个令人兴奋的亮点是SmartKnob View,它提供了一种高级的SmartKnob体验。该版本具有一个集成的显示屏,使用户能够更直观地控制各种参数。它正在积极开发中,为用户提供了更多功能和便利性。

    令人振奋的特性

    SmartKnob View具有一系列令人振奋的特性,包括:

    • 240×240圆形LCD,由39.5mm的表玻璃保护。
    • 带有中空轴的BLDC云台电机,用于机械和电气连接LCD。
    • 由ESP32-PICO-V3-02(Lilygo TMicro32 Plus模块)供电。
    • PCB弯曲和SMD电阻用作压力检测的应变计(通过电机提供刚性和动态的角度变化)。

    SmartKnob View的目标是为用户提供更直观的控制体验,让他们能够更轻松地进行各种调整和设置。无论是在音乐制作中需要精确的音量控制,还是在设计工

    程中需要精确的参数调整,SmartKnob View都能胜任。

    结语

    SmartKnob是一个令人兴奋的开源项目,它将虚拟刻度的触感引入了数字世界,为用户提供了更加自由和精确的控制体验。创作者Scott Bezek的激情和创意使这个项目成为可能,而SmartKnob View的推出将进一步提升用户的体验。

    如果你对SmartKnob项目感兴趣,可以在GitHub上查看其代码库。这个项目还在不断发展,你可以通过参与社区来贡献你的想法和技能。

    未来,我们可以期待更多类似的创新项目,将物理世界的触感带入数字领域,为用户提供更出色的交互体验。SmartKnob只是众多可能性中的一个,它为我们打开了一扇通向未来的大门。

  • 如何使用tiktoken计算文本中的标记数

    如何使用tiktoken计算文本中的标记数

    你是否曾经想知道一个文本字符串包含多少个标记?标记在GPT模型中是很重要的,因为它们决定了文本的长度和模型处理的成本。本教程将向你介绍如何使用OpenAI的开源工具tiktoken来轻松计算文本中的标记数。

    引子

    在开始之前,让我们来谈谈为什么需要计算标记数。标记是文本的最小单位,可以是一个字符,也可以是一个单词。GPT模型处理文本时以标记为基本单位,因此知道一个文本字符串包含多少标记对于以下两个方面非常重要:

    1. 文本长度限制:有时,你可能需要将文本输入到一个模型中,但模型对文本长度有限制。如果你的文本超过了模型的最大标记数限制,你需要截断或缩短它,以确保模型可以正确处理。

    2. 计算成本:使用OpenAI的API调用GPT模型是需要付费的,而费用是按照标记数计算的。因此,了解文本中有多少标记可以帮助你估算API调用的成本。

    使用不同的编码

    在使用tiktoken之前,你需要了解文本是如何被转换成标记的。不同的模型使用不同的编码方式。tiktoken支持三种OpenAI模型使用的编码:

    • cl100k_base:用于gpt-4、gpt-3.5-turbo、text-embedding-ada-002等模型。
    • p50k_base:用于Codex模型、text-davinci-002、text-davinci-003等模型。
    • r50k_base(或称为gpt2):用于GPT-3模型,如davinci。

    你可以使用以下方式获取特定模型的编码:

    import tiktoken
    
    # 获取gpt-3.5-turbo模型的编码
    encoding = tiktoken.encoding_for_model('gpt-3.5-turbo')

    请注意,p50k_base与r50k_base在非代码应用中有很大的重叠,在这种情况下,它们通常会产生相同的标记。

    使用tiktoken计算标记数

    现在,让我们看看如何使用tiktoken计算文本中的标记数。首先,你需要安装tiktoken库:

    pip install --upgrade tiktoken

    安装完成后,你可以按照以下方式计算标记数:

    import tiktoken
    
    def num_tokens_from_string(string: str, encoding_name: str) -> int:
        """返回文本字符串中的标记数。"""
        encoding = tiktoken.get_encoding(encoding_name)
        num_tokens = len(encoding.encode(string))
        return num_tokens
    
    # 示例:计算标记数
    text = "tiktoken is great!"
    encoding_name = "cl100k_base"
    num_tokens = num_tokens_from_string(text, encoding_name)
    print(f"文本中的标记数:{num_tokens}")

    上述代码将输出文本中的标记数。在这个示例中,文本 “tiktoken is great!” 有6个标记。

    将标记转换为文本

    如果你想将标记转换回文本,你可以使用以下方法:

    import tiktoken
    
    def tokens_to_text(tokens, encoding_name: str) -> str:
        """将标记列表转换为文本字符串。"""
        encoding = tiktoken.get_encoding(encoding_name)
        text = encoding.decode(tokens)
        return text
    
    # 示例:将标记转换为文本
    tokens = [83, 1609, 5963, 374, 2294, 0]
    encoding_name = "cl100k_base"
    text = tokens_to_text(tokens, encoding_name)
    print(f"标记转换为文本:{text}")

    在上面的示例中,标记列表 [83, 1609, 5963, 374, 2294, 0] 被转换回了文本 “tiktoken is great!”。

    比较不同的编码

    不同的编码方式可能在如何分割单词、处理空格以及处理非英文字符方面有所不同。使用上述方法,我们可以比较不同编码在几个示例文本上的表现:

    import tiktoken
    
    def compare_encodings(example_string: str) -> None:
        """比较三种字符串编码的表现。"""
        # 打印示例字符串
        print(f'\n示例字符串: "{example_string}"')
        # 对于每种编码,打印标记数、标记整数和标记字节
        for encoding_name in ["r50k_base", "p50k_base", "cl100k_base"]:
            encoding = tiktoken.get_encoding(encoding_name)
            token_integers = encoding.encode(example_string)
            num_tokens = len(token_integers)
            token_bytes = [encoding.decode_single_token_bytes(token) for token in token_integers]
            print()
            print(f"{encoding_name}: {num_tokens} 个标记")
            print(f"标记整数: {token_integers}")
            print(f"标记字节: {token_bytes}")
    
    # 示例:比较编码
    compare_encodings("antidisestablishmentarianism")
    compare_encodings("2 + 2 = 4")
    compare_encodings("お誕生日おめでとう")

    通过上述代码,你可以比较不同编码在示例文本上的表现。这将有助于你选择最适合你的应用程序的编码方式。

    在聊天完成API调用中计算标记数

    对于ChatGPT模型,如gpt-3.5-turbo和gpt-4,它们使用的标记方式与旧的完成模型相同,但由于它们的消息格式,更难计算会话中将使用多少标记。

    以下是一个用于计算传递给gpt-3.5-turbo或gpt-

    4的消息中标记数的示例Python代码:

    import tiktoken
    
    def num_tokens_in_chat(messages: list, encoding_name: str) -> int:
        """计算聊天消息中的标记数。"""
        encoding = tiktoken.get_encoding(encoding_name)
        total_tokens = 0
        for message in messages:
            role = message["role"]
            content = message["content"]
            if role == "system":
                # 系统消息不包含标记
                continue
            elif role == "user" or role == "assistant":
                # 用户和助手消息包含标记
                tokens = encoding.encode(content)
                total_tokens += len(tokens)
        return total_tokens
    
    # 示例:计算聊天消息中的标记数
    chat_messages = [
        {"role": "user", "content": "tell me a joke"},
        {"role": "assistant", "content": "why did the chicken cross the road"},
        {"role": "user", "content": "I don't know, why did the chicken cross the road"},
    ]
    encoding_name = "cl100k_base"
    num_tokens = num_tokens_in_chat(chat_messages, encoding_name)
    print(f"聊天消息中的标记数:{num_tokens}")

    在上面的示例中,我们计算了一个包含用户和助手消息的聊天中的标记数。你可以根据自己的聊天数据和所选的编码来计算标记数。

    这就是如何使用tiktoken计算文本中的标记数,无论是用于一般文本处理还是用于聊天API调用,这个工具都可以帮助你更好地管理标记。希望这个教程对你有所帮助!如果你有任何问题或需要进一步的协助,请随时提问。

  • 深度操作系统(deepin):迎来智能化升级,开启AI未来

    深度操作系统(deepin):迎来智能化升级,开启AI未来

    在数字化时代,操作系统扮演着关键角色,为各种计算机软件提供了运行和支持的平台。而如今,深度操作系统(deepin)通过引入大型AI模型,正迈向智能化未来,释放了AI的无限潜力。本文将为你介绍深度操作系统的智能化升级,以及其对用户体验和应用领域的积极影响。

    开篇故事:深度操作系统的AI之梦

    在一个富有科技感的办公室里,小明打开了他的电脑。深度操作系统(deepin)的最新版本已经正式发布,而他迫不及待地想要体验这个智能化的新系统。在不久的将来,他可以通过语音、图像等多种方式与电脑互动,享受更便捷、智能化的操作体验。

    这只是一个普通用户的愿景,但它正变为现实。深度操作系统在2023年宣布实现了大型AI模型的能力接入,为用户带来了更智能、更便捷的操作体验。让我们一起深入了解这个令人振奋的新发展。

    深度操作系统迎来智能化升级

    深度操作系统一直以来都积极参与国内外开源建设,不断消化吸收国内外先进技术,加速提升创新能力。而今,深度操作系统的智能化升级意味着更多可能性的开启。

    大模型能力接入

    深度操作系统实现了国内外主流大型AI模型的能力接入,并将其封装成深度操作系统的AI底层公共能力。这一举措的意义重大,因为大型AI模型具有强大的语言理解和处理能力,使操作系统能够更好地理解用户行为,从而提升用户体验。

    操作系统中的AI助理

    未来,每位用户都将拥有一个专属的AI助理,它将运行在操作系统之上。这个AI助理将为用户提供全新的交互模式,使用户可以通过自然的对话与计算机进行交流,获取更个性化的服务。

    AI作为操作系统的基础能力

    AI将成为操作系统的基础能力之一,合作伙伴可以直接调用操作系统提供的AI能力,从而释放平台的更多潜力。这意味着未来的应用将更加智能化,用户可以享受到更多便利和个性化的服务。

    智能化应用体验

    为了让用户尽早享受到智能化的便利,深度操作系统选择了三大常用应用进行AI能力的落地,它们分别是智能全局搜索、邮件应用和浏览器。

    智能全局搜索

    智能全局搜索支持自然语言搜索、图片内容搜索和文档内容搜索,用户可以轻松实现“一键搜索,一键直达”的便捷体验。不管是查找文件名还是文件内容,都可以得到智能的搜索结果,大大提高了搜索效率。

    邮件应用的新体验

    邮件应用在日常办公中非常常见,但往往需要大量时间用于书写、排版等工作。通过深度操作系统的AI能力,用户可以更加高效地处理邮件,包括邮件内容的生成、主题的提炼、邮件内容的润色等功能,极大提升了工作效率。

    浏览器的新玩法

    深度操作系统的浏览器应用也得到了智能化升级。用户可以通过提问代替搜索来获取信息,浏览器提供了聊天问答、快捷浮窗、自定义提示词等功能,使浏览变得更加智能和便捷。

    深度操作系统的AI未来

    深度操作系统一直致力于打造最易上手的Linux操作系统,为用户提供无与伦比的体验。AI的引入将使操作系统变得更加智能,用户可以通过语音识别、图像识别等技术更加便捷地进行操作,提高了日常使用的便利性。

    未来,深度操作系统将继续探索更多的AI应用模式,随着技术的不断进步,它将成为更加优秀的开源操作系统,为全球用户带来更好的体验。同时,深度操作系统也期待更多的开发者和企业能够参与到这一创新过程中,共同推动开源操作系统和大型AI模型的深度融合,为构建更美好的未来科技世界贡献力量。

    深度操作系统的智能化升级是一个令人振奋的里程碑,它将为用户带来更加智能和便捷的操作体验,也为AI技术的发展开辟了新的道路。

    结语

    深度操作系统的智能化升级代表了AI技术在操作系统领域的深入应用,它为用户带来了更多便利和
    个性化的体验。随着未来的不断发展,我们可以期待更多智能化的应用将进入我们的生活,让我们的数字化世界变得更加智能、更加便捷。

  • 如何使用Gradio构建机器学习Web应用

    如何使用Gradio构建机器学习Web应用

    你好,亲爱的读者们!今天,我将向你们介绍一个强大的Python库,它可以让你在几分钟内构建出令人印象深刻的机器学习Web应用。无需深厚的编程知识,Gradio将成为你的得力助手,助你将机器学习模型和数据科学工作流变成令人愉悦的应用程序。

    开篇故事

    你是否曾经想要将你的机器学习模型展示给他人,但却发现这个过程充满了繁琐的工作和技术挑战?或者你是否希望快速部署你的模型,并让用户通过浏览器与之互动?如果是的话,那么Gradio正是你需要的工具。

    什么是Gradio?

    Gradio是一个开源的Python库,用于构建机器学习和数据科学演示和Web应用程序。通过Gradio,你可以快速创建一个漂亮的用户界面,围绕你的机器学习模型或数据科学工作流,并允许人们通过浏览器拖放他们自己的图像、粘贴文本、录制自己的声音,并与你的演示互动。

    Gradio的用途广泛,包括:

    • 演示 你的机器学习模型,供客户、合作伙伴、用户或学生使用。
    • 快速部署 模型,生成可分享的链接,并获得模型性能的反馈。
    • 在开发过程中交互式地调试 你的模型,使用内置的操作和解释工具。

    快速入门

    先决条件:Gradio需要Python 3.8或更高版本,仅此而已!

    Gradio的功能

    与他人分享你的机器学习模型、API或数据科学工作流的最佳方式之一是创建一个允许用户或同事在其浏览器中尝试演示的交互式应用程序。

    Gradio允许你在Python中构建演示并分享它们,通常只需几行代码!那么,让我们开始吧。

    Hello,世界

    要使用一个简单的“Hello,World”示例运行Gradio,请按照以下三个步骤进行操作:

    1. 使用pip安装Gradio:

    pip install gradio

    2. 将以下代码保存为Python脚本并运行,或在Jupyter Notebook(或Google Colab)中运行:

    import gradio as gr
    
    def greet(name):
        return "Hello " + name + "!"
    
    demo = gr.Interface(fn=greet, inputs="text", outputs="text")
    
    demo.launch()

    我们将导入的名称缩短为gr,以提高Gradio代码的可读性。这是一种被广泛采用的约定,你应该遵循,以便任何与你的代码一起工作的人都能轻松理解。

    3. 在Jupyter Notebook中,演示将自动显示,或者如果在脚本中运行,则会在浏览器中弹出,并在http://localhost:7860上运行:

    在本地开发时,如果希望将代码作为Python脚本运行,可以使用Gradio CLI以重新加载模式启动应用程序,这将提供无缝快速的开发。了解有关重新加载的更多信息,请参阅自动重新加载指南。

    gradio app.py

    注意:也可以使用python app.py,但它不会提供自动重新加载机制。

    Interface 类

    你会注意到,为了创建演示,我们创建了一个gr.Interface。这个Interface类可以将用户界面包装在任何Python函数周围。在上面的示例中,我们看到了一个简单的基于文本的函数,但该函数可以是任何东西,从音乐生成器到税收计算器再到预训练机器学习模型的预测函数。

    核心的Interface类初始化时需要三个必需参数:

    • fn:要在其周围包装UI的函数
    • inputs:用于输入的组件(例如 "text"、"image" 或 "audio")
    • outputs:用于输出的组件(例如 "text"、"image" 或 "label")

    让我们更详细地看看这些用于提供输入和输出的组件。

    组件属性

    我们在前面的示例中看到了一些简单的Textbox组件,但如果你想更改UI组件的外观或行为,该怎么办?

    假设你想要自定义输入文本字段 – 例如,你希望它更大,并且有一个文本占位符。如果我们使用Textbox的实际类而不是使用字符串快捷方式,你可以通过组件属性获得更多的自定义能力。

    import gradio as gr
    
    def greet(name
    
    ):
        return "Hello " + name + "!"
    
    demo = gr.Interface(
        fn=greet,
        inputs=gr.Textbox(lines=2, placeholder="在这里输入姓名..."),
        outputs="text",
    )
    demo.launch()

    多个输入和输出组件

    假设你有一个更复杂的函数,带有多个输入和输出。在下面的示例中,我们定义了一个函数,该函数接受一个字符串、一个布尔值和一个数字,并返回一个字符串和一个数字。请看如何传递输入和输出组件的列表。

    import gradio as gr
    
    def greet(name, is_morning, temperature):
        salutation = "早上好" if is_morning else "晚上好"
        greeting = f"{salutation} {name}。今天气温是{temperature}度"
        celsius = (temperature - 32) * 5 / 9
        return greeting, round(celsius, 2)
    
    demo = gr.Interface(
        fn=greet,
        inputs=["text", "checkbox", gr.Slider(0, 100)],
        outputs=["text", "number"],
    )
    demo.launch()

    你只需将组件包装在列表中。inputs列表中的每个组件与函数的参数对应,按顺序排列。outputs列表中的每个组件与函数返回的值对应,同样也按顺序排列。

    图像示例

    Gradio支持许多类型的组件,例如 Image、DataFrame、Video 或 Label。让我们尝试一个图像到图像的函数,以了解这些组件的感觉!

    import numpy as np
    import gradio as gr
    
    def sepia(input_img):
        sepia_filter = np.array([
            [0.393, 0.769, 0.189], 
            [0.349, 0.686, 0.168], 
            [0.272, 0.534, 0.131]
        ])
        sepia_img = input_img.dot(sepia_filter.T)
        sepia_img /= sepia_img.max()
        return sepia_img
    
    demo = gr.Interface(sepia, gr.Image(shape=(200, 200)), "image")
    demo.launch()

    当使用Image组件作为输入时,你的函数将收到一个形状为(height, width, 3)的NumPy数组,其中最后一个维度表示RGB值。我们也会返回一个图像,以NumPy数组的形式。

    你还可以使用type=关键字参数设置组件使用的数据类型。例如,如果你希望你的函数接受图像文件的文件路径而不是NumPy数组,那么输入的Image组件可以这样写:

    gr.Image(type="filepath", shape=...)

    还要注意,我们的输入Image组件附带了一个编辑按钮,允许裁剪和缩放图像。通过这种方式操作图像可以帮助揭示机器学习模型中的偏见或隐藏缺陷!

    你可以在Gradio文档中阅读更多关于许多组件以及如何使用它们的信息。

    聊天机器人

    Gradio包括一个高级类gr.ChatInterface,它类似于gr.Interface,但专门设计用于聊天机器人的UI。gr.ChatInterface类也包装一个函数,但这个函数必须具有特定的签名。函数应该接受两个参数:message和history(参数名可以是任何名字,但必须按照这个顺序)

    • message:表示用户输入的str
    • history:表示到目前为止的会话的list的list。每个内部列表包含两个str,表示一对:[用户输入,机器人回复]。

    除此之外,gr.ChatInterface没有必需的参数(尽管有几个用于自定义UI的参数可用)。

    以下是一个玩具示例:

    import random
    import gradio as gr
    
    def random_response(message, history):
        return random.choice(["是的", "不是"])
    
    demo = gr.ChatInterface(random_response)
    
    demo.launch()

    你可以在这里阅读更多关于gr.ChatInterface的信息。

    Blocks:更灵活和可控

    Gradio提供了两种构建应用程序的方法:

    1. Interface 和 ChatInterface,为创建演示提供了高级抽象,这是我们到目前为止讨论的内容。

    2. Blocks,这是一种低级API,用于设计具有更灵活布局和数据流的Web应用程序。Blocks允许你做一些事情,比如展示多个数据流和演示、控制组件出现在页面的位置、处理复杂的数据流(例如,输出可以作为其他函数的输入),以及根据用户交互更新组件的属性/可见性 – 仍然都是在Python中。如果你需要这种自定义能力,可以尝试使用Blocks!

    Hello,Blocks

    让我们看一个简单示例。请注意,此处的API与Interface不同。

    import gradio as gr
    
    def greet(name):
        return "Hello " + name + "!"
    
    with gr.Blocks() as demo:
        name = gr.Textbox(label="姓名")
        output = gr.Textbox(label="输出框")
        greet_btn = gr.Button("问候")
        greet_btn.click(fn=greet, inputs=name, outputs=output, api_name="greet")
    
    demo.launch()

    需要注意的事项:

    • 使用with子句制作Blocks,此子句中创建的任何组件都会自动添加到应用程序中。
    • 组件按垂直顺序出现在应用程序中,按照创建的顺序排列。(稍后我们将介绍如何自定义布局!)
    • 创建了一个Button,然后为该按钮添加了一个click事件侦听器。这个API看起来应该很熟悉!像Interface一样,click方法接受Python函数、输入组件和输出组件。

    更复杂的示例

    以下是一个应用程序,让你感受一下使用Blocks可以实现的可能性:

    import numpy as np
    import gradio as gr
    
    def flip_text(x):
        return x[::-1]
    
    def flip_image(x):
        return np.fliplr(x)
    
    with gr.Blocks() as demo:
        gr.Markdown("使用此演示翻转文本或图像文件。")
        with gr.Tab("翻转文本"):
            text_input = gr.Textbox()
            text_output = gr.Textbox()
            text_button = gr.Button("翻转")
        with gr.Tab("翻转图像"):
            with gr.Row():
                image_input = gr.Image()
                image_output = gr.Image()
            image_button = gr.Button("翻转")
    
        with gr.Accordion("展开查看更多!"):
            gr.Markdown("看看我...")
    
        text_button.click(flip_text, inputs=text_input, outputs=text_output)
        image_button.click(flip_image, inputs=image_input, outputs=image_output)
    
    demo.launch()

    这里有更多的东西!我们将在使用Blocks构建部分介绍如何创建像这样的复杂Blocks应用程序。

    恭喜,你现在已经熟悉了Gradio的基础知识! ? 转到我们的下一个指南了解更多关于Gradio的关键特性。

    许可证

    Gradio根据位于此存储库根目录的LICENSE文件中的Apache许可证2.0获得许可。

    引用

    还请阅读我们的论文Gradio:在野外轻松共享和测试ML模型,ICML HILL 2019,如果您在您的工作中使用了Gradio,请引用它。

    @article{abid2019gradio,
      title = {Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild},
      author = {Abid, Abubakar and Abdalla, Ali and Abid, Ali and Khan, Dawood and Alfozan, Abdulrahman and Zou, James},
      journal = {arXiv preprint arXiv:1906.02569},
      year = {2019},
    }
  • 制作漂亮的二维码:QRBTF网站和React组件

    制作漂亮的二维码:QRBTF网站和React组件

    在数字化时代,二维码已经成为了不可或缺的一部分,用于快速传递信息。然而,通常情况下,二维码看起来都很相似,缺乏个性和创意。如果你想要制作一个独特且漂亮的二维码,QRBTF是一个值得一试的工具。本文将介绍QRBTF网站和其对应的React组件,让你可以轻松地制作漂亮的二维码。

    什么是QRBTF?

    QRBTF是一个简单的Web应用程序,旨在美化你的二维码。如果你曾经对传统的黑白二维码感到厌倦,那么QRBTF将为你提供一些全新的可能性。它的特点包括:

    1. 各种艺术风格的二维码

    QRBTF提供了多种不同的艺术风格,让你可以选择一个适合你需求和品味的样式。无论是想要一个简单的二维码还是一个充满创意的艺术品,QRBTF都能满足你的要求。

    2. 参数化设计

    除了选择风格之外,你还可以调整二维码的各种参数,包括大小、透明度、颜色等等。这意味着你可以根据自己的喜好定制二维码,使其更符合你的品牌或个性。

    3. 无需后端支持

    QRBTF是一个纯前端应用程序,不需要后端服务器支持。这意味着你可以轻松地在任何Web浏览器中使用它,无需安装复杂的软件或依赖。

    4. 支持SVG下载

    除了普通的JPG格式,QRBTF还支持将二维码保存为可缩放矢量图(SVG)。这意味着你可以根据需要放大或缩小二维码,而不会损失图像质量。

    如何使用QRBTF?

    QRBTF的使用非常简单,无需编程或复杂的步骤。以下是使用QRBTF的基本步骤:

    1. 打开QRBTF网站

    首先,打开QRBTF的官方网站 qrbtf.com。这将带你进入QRBTF的主界面。

    2. 输入URL或文本

    在网站上找到一个文本框,你可以在这里输入要包含在二维码中的URL或文本。这可以是你的网站链接、联系信息、产品信息,或任何你想要分享的内容。

    3. 选择风格

    QRBTF提供了各种不同的二维码风格供你选择。浏览并选择一个你喜欢的风格,或者根据你的需求选择一个适合的风格。

    4. 调整参数

    QRBTF允许你调整二维码的各种参数。你可以改变二维码的大小、透明度、颜色等等。这些参数可以让你个性化定制二维码,以满足你的需求。

    5. 下载JPG或SVG

    一旦你满意了二维码的外观,你可以选择将其下载为JPG或SVG格式。JPG格式适用于常规用途,而SVG格式适用于需要可缩放性的情况。

    使用React组件

    如果你是React开发者,你还可以使用QRBTF的React组件来轻松集成QRBTF功能到你的应用程序中。React组件名为react-qrbtf,你可以通过npm来安装它。

    npm install react-qrbtf --save

    然后,你可以在你的React应用程序中包含这个组件,并使用它来生成漂亮的二维码。以下是一个简单的示例:

    import React from 'react'
    import { QRNormal } from 'react-qrbtf'
    
    class Component extends React.Component {
    
        render() {
            return (
                <QRNormal
                    value="react-qrbtf"
                    className="my-qrcode"
                    styles={{ svg: {width: "200px"} }}
                    type="round"
                    size={50}
                    opacity={80}
                    posType="planet"
                    otherColor="#33CCCC"
                    posColor="#009999"
                />
            )
        }
    }

    第三方项目

    除了QRBTF本身,还有一些第三方项目与之相关。例如,gexin1/beautify-qrcode 是一个用于美化二维码的库,可以帮助你实现更多定制化的效果。

    作者

    QRBTF项目由两位开发者共同维护,分别是 ciaochaos 和 CPunisher。如果你喜欢他们的工作,你可以考虑通过Paypal或支付宝向他们捐赠,以支持项目的继续发展。

    依赖库

    QRBTF依赖于一些开源库,包括 davidshimjs/qrcode 和 cozmo/jsQR。这些库为QRBTF提供了二维码生成和解析的基础功能。

    结语

    QRBTF是一个强大而创新的工具,可以让你制作漂亮的二维码。无论是作为个人用户还是开发者,你都可以从QRBTF中受益,为你的二维码增添独特的风采。现在,你可以尝试使用QRBTF创建自己的艺术二维码,让你的信息传递更有趣和个性化。

  • 如何使用原神自动钓鱼AI

    如何使用原神自动钓鱼AI

    你是否曾在《原神》中沐浴在美丽的风景中,准备一场宁静的垂钓之旅,却因为频繁点击鼠标疲惫不已?有没有想过是否能有一种方式,让你的角色自动完成这项任务,而你可以专注于享受游戏中的风景和故事?

    现在,有一个好消息!我们为你带来了原神自动钓鱼AI。这个项目结合了YOLOX和DQN两个强大的模型,使用迁移学习和半监督学习进行训练,以实现自动钓鱼的目标。在这篇文章中,我们将教你如何安装和使用这个令人兴奋的工具。

    安装和配置

    1. 安装Python环境

    首先,你需要安装Python运行环境,我们推荐使用Anaconda。请前往Anaconda官网,下载并安装适用于你操作系统的版本。

    2. 创建Python环境

    打开Anaconda Prompt(命令行界面),创建一个新的Python环境并激活它。我们建议使用Python 3.8或更低版本,因此在创建环境时,请明确指定Python版本。

    conda create -n ysfish python=3.8
    conda activate ysfish

    3. 下载项目代码

    使用Git克隆项目代码,或者在GitHub网页上下载并解压项目文件。

    git clone https://github.com/7eu7d7/genshin_auto_fish.git

    4. 安装依赖库

    切换到项目代码所在的目录,并运行以下命令来安装所需的依赖库:

    cd genshin_auto_fish
    python -m pip install -U pip
    python requirements.py

    如果你想使用显卡进行加速,请安装CUDA和cuDNN。安装完毕后,可以使用以下命令来安装GPU版本的依赖库:

    pip install -U pip
    python requirements.py --cuda [cuda版本]

    5. 安装YOLOX

    切换到项目代码所在的目录,运行以下命令以安装YOLOX:

    python setup.py develop

    6. 下载预训练权重

    前往预训练权重下载权重文件(.pth文件),并将其放在项目目录下的weights文件夹中。

    运行原神自动钓鱼AI

    在运行原神自动钓鱼AI之前,请确保你的原神游戏窗口分辨率设置为1080×1920,并且使用全屏模式运行游戏。

    使用显卡进行加速

    python fishing.py image -f yolox/exp/yolox_tiny_fish.py -c weights/best_tiny3.pth --conf 0.25 --nms 0.45 --tsize 640 --device gpu

    使用CPU运行

    python fishing.py image -f yolox/exp/yolox_tiny_fish.py -c weights/best_tiny3.pth --conf 0.25 --nms 0.45 --tsize 640 --device cpu

    运行后,当你看到屏幕上显示”init ok”时,按下键盘上的”r”键即可开始自动钓鱼。请记住,为了保持性能,检测框不会实时显示,所有处理都在后台进行。

    YOLOX训练工作流程

    如果你有兴趣进一步了解YOLOX的训练工作流程,可以参考以下步骤。请注意,这些步骤主要用于模型训练,对于使用者来说,不需要进行训练,可以直接使用预训练权重。

    YOLOX部分使用半监督学习,首先标注少量样本,然后训练模型生成其余样本的伪标签,最后由人工修正,不断迭代提高精度。为了提高效率,使用了迁移学习,利用COCO预训练的模型进行fine-tuning。

    DQN训练工作流程

    控制力度的部分使用强化学习模型DQN进行训练。模型通过与环境的交互学习如何控制力度,以使鱼线落在最佳区域内。为了加速训练,首先在仿真环境中进行预训练,然后将模型迁移到原神游戏中进行域间迁移。

    结语

    现在,你已经学会了如何安装、配置和使用原神自动钓鱼AI。无需再忍受繁重的点击操作,你可以更轻松地享受《原神》中的美丽世界。希望这个工具能为你带来更愉快的游戏体验!