在本文中,我们将深入探讨如何使用QT C++和FFmpeg库来调用USB摄像头,实现实时显示视频流,并进行H264编码的视频录制。FFmpeg是一个强大的开源多媒体处理框架,支持多种编码、解码、转换和流化功能。QT C++则是一个流行的跨平台应用程序开发框架,提供了丰富的图形用户界面(GUI)工具和系统访问接口。 确保你的开发环境中已经安装了QT和FFmpeg库。对于FFmpeg,你需要下载源代码并按照官方文档编译安装,确保配置时包含了所需的编解码器和库,例如libavformat、libavcodec、libavutil和libavdevice,这些是与设备输入输出和编码解码相关的组件。 在QT项目中,你需要引入FFmpeg的头文件和链接库。这可以通过在.pro文件中添加以下行实现: ```cpp INCLUDEPATH += /path/to/ffmpeg/include LIBS += -L/path/to/ffmpeg/lib -lavformat -lavcodec -lavutil -lavdevice ``` 接下来,创建一个QT窗口,用于显示来自摄像头的视频流。可以使用QVideoWidget或QOpenGLWidget作为显示视图。创建一个QThread子类来处理视频捕获和编码任务,以避免阻塞主线程。在该线程中,你可以使用FFmpeg的`avdevice_open_input()`函数打开USB摄像头,然后使用`avformat_find_stream_info()`获取流信息。 ```cpp AVFormatContext *fmtCtx = nullptr; if (avformat_open_input(&fmtCtx, "video://0", nullptr, nullptr) != 0) { // 错误处理 } if (avformat_find_stream_info(fmtCtx, nullptr) < 0) { // 错误处理 } ``` 找到摄像头的视频流后,你需要创建一个AVCodecContext来配置编码参数。H264编码可以通过查找名为"libx264"的编码器来实现。之后,使用`avcodec_open2()`打开编码器。 ```cpp AVCodec *codec = avcodec_find_encoder(AV_CODEC_ID_H264); AVCodecContext *encCtx = avcodec_alloc_context3(codec); // 配置编码参数... if (avcodec_open2(encCtx, codec, nullptr) < 0) { // 错误处理 } ``` 为了实时显示视频流,创建一个QImage从AVFrame中解析像素数据,然后更新QVideoWidget或QOpenGLWidget。同时,你还需要创建一个输出文件,使用`avio_open()`打开,`avformat_write_header()`写入文件头,然后在每一帧编码后使用`av_interleaved_write_frame()`将编码后的数据写入文件。 ```cpp AVOutputFormat *outFmt = av_guess_format("mp4", "output.mp4", nullptr); AVFormatContext *outFmtCtx = nullptr; avformat_alloc_output_context2(&outFmtCtx, outFmt, nullptr, "output.mp4"); if (avio_open(&outFmtCtx->pb, "output.mp4", AVIO_FLAG_WRITE) < 0) { // 错误处理 } avformat_write_header(outFmtCtx, nullptr); while (捕获视频帧) { // 编码和显示帧... AVPacket pkt; av_init_packet(&pkt); pkt.data = nullptr; pkt.size = 0; avcodec_encode_video2(encCtx, &pkt, frame, &gotPacket); if (gotPacket) { pkt.stream_index = videoStreamIndex; av_interleaved_write_frame(outFmtCtx, &pkt); } } av_write_trailer(outFmtCtx); ``` 别忘了在完成后释放所有资源,关闭输入和输出文件上下文,以及关闭编码器和解码器上下文。 通过以上步骤,你就能在QT C++环境中利用FFmpeg调用USB摄像头,显示视频流,并以H264编码保存为MP4格式的视频文件。这个过程涉及了多媒体处理、多线程编程、文件I/O和编码解码等多个方面的知识,对于深入理解QT和FFmpeg的使用非常有帮助。在实际开发中,可能还需要考虑性能优化、错误处理和用户交互等方面的问题,以提供更好的用户体验。
2025-05-04 17:06:09 111.06MB ffmpeg
1
随着互联网技术的飞速发展,API(应用程序编程接口)在软件开发和数据交互中扮演着越来越重要的角色。为了便于开发者测试API,Postman成为了一个非常流行的API开发和测试工具。Postman工具的出现极大地简化了API的调用、测试和文档化工作,让开发者能够更高效地编写和调试API请求。 老版本的Postman,例如标题中提到的“无需注册登录账户的老版本Postman”,特别受到一些用户的青睐。这一版本的Postman允许用户直接下载安装程序(如Postman-win64-7.1.1-Setup.exe),安装完成后即可使用,无需通过网络注册登录账户,减少了个人隐私泄露的风险。这种类型的软件非常适合需要在隔离网络环境中进行开发测试的用户。 Postman工具的核心功能涵盖了创建、发送和管理HTTP请求,支持多种请求类型,包括GET、POST、PUT、DELETE等,同时也支持自定义请求头和请求体。用户可以组织和保存自己的请求到不同的集合中,便于管理和复用。此外,Postman还提供了环境变量的功能,使得在不同的开发阶段或测试环境中切换变得异常简单。 使用老版本的Postman还有一个好处是稳定性高,更新频率不如新版本频繁,因此对于习惯于特定操作界面和流程的用户而言,可以减少因频繁更新而导致的适应成本。另外,老版本的Postman也通常意味着软件更加轻量级,运行速度更快,对老旧计算机的兼容性更好。 尽管老版本的Postman为用户提供了许多便利,但是新版本的Postman也在不断地改进和增加新功能,例如与Postman云的集成、环境变量的可视化管理、内置的测试脚本编写功能等,这些都是老版本所不具备的。因此,用户在选择使用哪个版本的Postman时,应该根据自己的实际需求和工作流程来决定。 对于希望使用老版本Postman的用户来说,Postman-win64-7.1.1-Setup.exe文件提供了直接的下载安装途径,用户可以在官方网站或者第三方软件仓库中找到相应的安装包。下载后,只需双击安装程序,按照指示完成安装即可开始使用,无需复杂的注册和配置过程,即刻体验到高效的API测试工作流程。 无论是在学习API开发的过程中,还是在进行日常的API测试和维护工作,Postman工具都是一款不可或缺的辅助软件。它不仅简化了API的工作流程,还提高了工作的效率和准确性。特别是在使用无需注册登录账户的老版本时,用户可以享受到更加轻量级和快速的使用体验,这对于那些对个人隐私和数据安全有特殊要求的用户来说尤为重要。 另外,值得一提的是,老版本的Postman在社区中的支持度可能不如新版本高,因此在遇到问题时可能需要用户自行解决或者寻求较旧的社区帮助。但考虑到它的稳定性与简单性,这通常不会成为太大的问题。老版本的Postman是一款适合于追求稳定和简洁操作体验的开发者的优秀工具。
2025-05-01 09:13:30 68.64MB postman 接口调用
1
Labview多列表框操作库:封装常用功能,便捷开发列表框操作解决方案,Labview多列表框操作库:封装常用功能,便捷开发列表框操作解决方案,Labview多列表框操作库 常用的功能均已封装直接调用即可 方便快捷开发Labview实现列表框操作 ,Labview;多列表框操作库;功能封装;直接调用;开发便捷性,Labview高效列表框操作库:一键调用,快捷开发 LabVIEW是一种图形化编程语言,广泛应用于数据采集、仪器控制以及工业自动化等领域。在LabVIEW开发环境中,多列表框是一种常用的用户界面元素,用于显示和管理多个数据项。LabVIEW多列表框操作库是一个封装了多种功能的软件包,旨在提供一套完整的解决方案,以简化在LabVIEW中对多列表框进行操作的开发过程。 该操作库包含了丰富的功能,比如添加、删除、修改列表项,以及搜索和排序等功能,这些功能通常在进行列表框操作时经常被用到。开发者可以直接调用这些封装好的功能,无需重新编写代码,大大提高了编程效率,同时也确保了代码的可读性和可维护性。 多列表框操作库的设计原则是便捷性和高效性。它不仅仅是一个功能集合,更是一种设计理念的体现,即通过模块化和封装来简化LabVIEW应用程序的开发。这使得开发者可以专注于应用程序逻辑的开发,而不是底层的细节实现。 从文件名称列表可以看出,该库还提供了相关的文档和教程,如“引言”、“高效开发流程解析”、“深入技术分析”、“应用与优化分析”等,这些文档将帮助开发者更好地理解和使用该操作库。此外,还包含了图像文件,可能是库使用示例或界面设计的参考,以及文本文件,可能包含了具体操作方法和案例分析,这些都是学习和掌握多列表框操作库的宝贵资料。 在LabVIEW多列表框操作库的使用过程中,开发者会发现,通过简单的调用,就能实现复杂的列表管理功能,这不仅提升了开发的速度,也降低了开发的难度。这种封装和功能复用的理念,正是现代软件开发追求的目标之一,即提高开发效率、缩短开发周期,以及提升最终产品的质量和可靠性。 此外,通过使用LabVIEW多列表框操作库,开发者可以更容易地维护和升级他们的应用程序。因为所有的列表操作功能都已经被集中管理和封装,所以当需要修改或升级某些功能时,开发者只需要关注库中相应的部分即可,而不需要深入到整个应用程序中去查找和修改代码,这大大提高了软件的可维护性。 LabVIEW多列表框操作库是一个强大的工具,它通过封装常用的功能,极大地提高了LabVIEW开发者在处理列表框时的效率和便捷性。无论是在学习、研究还是实际的工业自动化项目中,该操作库都能成为开发者手中的利器,帮助他们快速实现复杂的用户界面交互和数据管理功能。
2025-04-29 15:27:59 2.3MB csrf
1
在当前的医疗信息化进程中,国家医保刷脸设备的使用已经成为提升服务效率和保障安全的重要工具。这个名为"国家医保刷脸设备调用(带动态库插件)"的项目,显然是一个针对医保支付流程中人脸识别技术的应用实例。下面将详细阐述相关知识点。 我们要理解“动态库插件”的概念。在计算机编程中,动态库(Dynamic Link Library, DLL)是一种共享代码的方式,程序运行时才会加载这些库,可以节省内存并方便代码的更新和维护。插件则是为特定软件或系统提供额外功能的模块,通常可以独立于主程序开发和升级。在本案例中,动态库插件可能是用于实现人脸识别算法,它与国家医保系统接口相结合,为医保刷脸支付提供技术支持。 国家医保刷脸终端是集成人脸识别技术的硬件设备,用于识别参保人的身份。这种设备通常包括高清晰度摄像头、强大的处理器和专用的人脸识别算法,能快速准确地识别人脸特征并与数据库中的信息比对,确保医保支付的安全性。 在实际应用中,国家医保刷脸设备调用涉及以下几个关键步骤: 1. **用户识别**:用户站在设备前,摄像头捕获人脸图像。 2. **人脸检测**:利用图像处理技术找出图片中的人脸区域,排除背景和其他非人脸元素。 3. **特征提取**:通过算法分析人脸的关键特征,如眼睛、鼻子和嘴巴的位置,以及面部轮廓等。 4. **特征匹配**:将提取的特征与医保数据库中预存的用户人脸信息进行比对。 5. **身份验证**:如果特征匹配成功,系统确认用户身份,完成医保支付授权。 动态库插件在这里的作用是提供高效的人脸识别算法,可能包括深度学习模型,比如卷积神经网络(CNN),以提高识别准确率。同时,为了保障数据安全,通常会采用加密技术,对传输的数据进行加密处理,防止信息泄露。 在实际部署中,"NationEccodeClient"可能是该设备的客户端应用程序,负责与终端硬件交互,调用动态库插件进行人脸识别,并与国家医保服务器通信,完成整个交易过程。 国家医保刷脸设备调用技术结合了硬件设备、人脸识别算法、动态库插件和医保信息系统,实现了安全便捷的身份验证,大大提升了医保服务的体验。随着技术的进步,未来这类设备的应用场景将会更加广泛,为医疗服务提供更为智能化的解决方案。
2025-04-28 22:03:48 20.11MB
1
### Python跨.py文件调用自定义函数说明 在Python编程中,经常需要将代码分割成多个文件以便于管理和复用。这种情况下,了解如何在不同的`.py`文件之间调用自定义函数是非常重要的。本文将详细介绍如何实现这一点,并提供一些实际应用场景的例子。 #### 一、相同文件夹下的调用 当两个`.py`文件位于同一个文件夹中时,可以通过简单的导入语句来调用另一个文件中的自定义函数。 ##### 示例: 假设我们有两个文件:`exe101.py` 和 `FileWriteAbout.py`。 - **`FileWriteAbout.py`** 文件包含了一个名为 `writeList()` 的函数。 - **`exe101.py`** 文件希望调用这个函数。 **步骤:** 1. 在 `exe101.py` 中使用 `import` 语句导入 `FileWriteAbout` 模块。 2. 使用 `FileWriteAbout.writeList()` 来调用 `writeList()` 函数。 ```python # exe101.py import FileWriteAbout FileWriteAbout.writeList() ``` 另外,也可以使用 `from ... import *` 的方式来导入所有内容,但这可能导致函数名称冲突的问题。 ```python # exe101.py from FileWriteAbout import * writeList() ``` 如果只需要调用一个特定的函数,建议直接导入这个函数以减少命名冲突的风险。 ```python # exe101.py from FileWriteAbout import writeList writeList() ``` #### 二、不同文件夹下的调用 当目标文件位于其他文件夹时,情况会稍微复杂一些。此时,我们需要将目标文件所在的路径添加到Python的搜索路径中。 ##### 1. 使用 `sys.path.append()` 可以使用 `sys.path.append()` 方法将目标文件所在的路径添加到搜索路径列表中。 **示例:** ```python import sys sys.path.append(r"D:\MathElectric\python\exercises") import FileWriteAbout FileWriteAbout.writeList() ``` ##### 2. 使用 `imp` 包 `imp` 包允许动态地加载模块。 **示例:** ```python import imp MM = imp.load_source('MM', r'D:\MathElectric\python\exercises\FileWriteAbout.py') MM.writeList() ``` #### 三、使用相对路径与环境配置 在使用IDE(如Spyder)时,正确设置工作路径对于文件读取至关重要。如果数据文件与代码文件不在同一目录下,则需要确保IDE的工作目录设置正确。 **设置工作路径示例:** ```python import os os.chdir(r"D:/project/UCIpowerPre") ``` 通过上述方法,可以确保程序能够正确读取相对路径下的文件。 #### 四、Python模块的导入机制 需要注意的是,仅仅导入一个模块并不意味着可以直接使用该模块中的所有函数。如果尝试直接调用未导入的函数,将会遇到 `NameError` 错误。 **示例:** ```python import recognizer recognizer.predict() ``` 如果想要频繁使用模块中的某一个或几个函数,可以考虑将这些函数赋值给本地变量,以简化调用过程。 ```python predict = recognizer.predict clean_captcha = recognizer.clean_captcha get_captcha = recognizer.get_captcha ``` ### 总结 本文详细介绍了如何在Python的不同`.py`文件之间调用自定义函数,包括在同一文件夹以及不同文件夹下的调用方式。通过这些方法,可以更加灵活地组织和管理代码结构,提高代码的可维护性和可读性。希望这些知识点能够帮助大家更好地理解和应用Python的模块化编程技巧。
2025-04-26 12:52:09 151KB Python py文件 自定义函数
1
V8 引擎简介 Google V8 引擎使用 C++ 代码编写,实现了 ECMAScript 规范的第五版,可以运行在所有的主流操作系统中,甚至可以运行在移动终端 ( 基于 ARM 的处理器,如 HTC G7 等 )。V8 最早被开发用以嵌入到 Google 的开源浏览器 Chrome 中,但是 V8 是一个可以独立的模块,完全可以嵌入您自己的应用,著名的 Node.js( 一个异步的服务器框架,可以在服务端使用 JavaScript 写出高效的网络服务器 ) 就是基于 V8 引擎的。 和其他 JavaScript 引擎一样,V8 会编译 / 执行 JavaScript 代码,管理内存,负责垃圾回收,与宿主语言的交互等。V8 的垃圾回收器采用了众多技术,使得其运行效率大大提高。通过暴露宿主对象 ( 变量,函数等 ) 到 JavaScript,JavaScript 可以访问宿主环境中的对象,并在脚本中完成对宿主对象的操作。 吐槽:V8的各种奇淫技巧简直能折磨死很多人 我用C++封装了V8的基本功能(执行并编译JavaScript代码)供易语言调用(压缩后1.34 MB),感觉性能还不错,现在分享给大家使用 【在易语言编译版测试中,执行10万次JSON.stringify([1,2,3])用时1.3秒,执行一次TEA加密用时16毫秒】 注意:每个V8对象都是线程安全的,你可以在多线程环境下放心的使用
2025-04-25 18:28:08 1.34MB 易语言例程
1
西门子1200伺服步进FB块程序西门子程序模板 程序内含两个FB,一个是scl写的,一个是梯形图,可以多轴多次调用,中文注释详细。 真实可用,经过在专用设备真实调试运行,可以直接应用到实际项目中,提供,包成功 此FB块适合PTO脉冲和PN网口模式,适合西门子伺服和第三方伺服,以及步进电机 已经成功应用的有西门子伺服s120,v90, 雷赛步进,三菱私服,附文档说明。 西门子1200系列PLC是西门子公司生产的高性价比产品,广泛应用于各种自动化领域。其中,伺服步进控制是工业自动化中的重要技术,它可以实现对电机精确定位和速度控制。在给定的压缩包文件中,包含了专门针对西门子1200系列伺服步进控制的FB(功能块)程序模板。该模板具有两个主要的FB,一个使用SCL(Structured Control Language)编写,另一个使用梯形图表示。SCL是一种高级编程语言,适用于复杂算法的实现,而梯形图则更直观,适合快速开发和故障排查。这两种方式的FB可以实现多轴多次调用,满足了实际生产中对多轴同步控制的需求。 该程序模板最大的特点是有详细的中文注释,这降低了编程人员理解和应用的难度,使得工程师即使不具备深入的西门子PLC编程背景,也能通过阅读注释来快速掌握程序的使用方法和逻辑。此外,该模板在特定设备上经过实际调试,证明了其可靠性,可以直接应用到实际项目中,减少了从调试到应用的时间成本。 该FB块程序模板适用于多种操作模式,包括PTO(脉冲输出)模式和PN网口模式,这意味着它不仅能够控制西门子自家的伺服电机,比如s120和v90系列,也能够兼容第三方伺服电机和步进电机,如雷赛步进电机和三菱伺服电机。这种兼容性大大拓宽了其应用范围,使其成为一个非常实用的工具。 在文件压缩包中,除了程序本身,还包含了多个文档,这些文档提供了对FB块程序的分析与应用案例。例如,“西门子伺服步进块程序分析与应用案例.txt”和“西门子伺服步进块程序分析与应用案例随着工业.txt”这两篇文档,可能详细介绍了西门子伺服步进控制的应用场景和案例分析。另外,“标题西门子伺服步进块程序西门子程序模板摘要本文介.txt”和“西门子伺服步进块程序技术分析随着科技的飞速发.txt”文档则可能包含了对FB块程序的概要介绍和技术分析,帮助工程师了解其技术背景和发展趋势。 通过对这些文档内容的阅读,工程师可以掌握西门子1200伺服步进控制的深入知识,了解如何在实际项目中应用该程序模板,以及如何处理可能出现的问题。这些文档的存在,不但增强了程序的可用性,也为工程师提供了一个学习和参考的平台。 这个西门子1200伺服步进FB块程序模板是一个功能全面、易于理解和应用的工具,它能够帮助工程师在工业自动化领域中实现精确的电机控制,提高生产效率和产品质量。由于其广泛的适用性和经过验证的实用性,这个模板对于从事自动化项目开发的工程师来说,是一个非常有价值的资源。
2025-04-25 15:10:15 75KB
1
LabVIEW是一种流行的图形化编程语言,广泛应用于自动化测试、仪器控制等领域,其调用外部模块的能力非常强大。在这个应用场景中,我们关注的是如何通过LabVIEW调用图莫斯模块来实现CAN(Controller Area Network)、LIN(Local Interconnect Network)和PWM(Pulse Width Modulation)通讯控制。 CAN、LIN和PWM是三种不同的通讯和信号控制技术。CAN是一种高效的串行通讯协议,广泛应用于汽车和工业自动化领域。LIN则是一种低成本的串行通讯协议,在汽车领域中多用于对通讯速度要求不是特别高的场合。PWM则是一种通过脉冲宽度的调制来控制电机速度和方向、调节灯光亮度等的技术。 要实现这三种通讯控制,LabVIEW提供了与外部硬件设备交互的接口,其中包括调用图莫斯模块。图莫斯模块可能是一种专门设计的硬件接口模块,用于实现与目标设备的物理层通讯。在LabVIEW中使用这类模块,通常需要对应模块的驱动程序或框架支持。因此,文档中提到的安装SMO框架是因为图莫斯模块依赖于SMO(Smart Measurement and Operation)框架来实现其功能。 在LabVIEW的开发环境中,工程师可以通过调用相应模块的VI(Virtual Instrument)来编写控制代码。这些VI封装了底层复杂的通讯协议细节,允许开发者以图形化的方式快速实现CAN、LIN和PWM通讯控制。例如,通过配置CAN通讯模块的VI,可以设定通讯速率、过滤器和接收数据的处理方式。同样,对于LIN通讯,可以设置波特率、ID和数据处理逻辑。PWM的控制则涉及到信号频率、占空比等参数的设定。 此外,LabVIEW的模块化设计也意味着用户可以将这些通讯控制功能集成到更大的应用程序中,实现系统级的监控和控制。这对于测试台架、嵌入式系统和自动化生产线等应用场景尤其有用。通过LabVIEW强大的数据处理能力和直观的图形化编程方式,可以简化开发流程,加快产品上市时间。 由于LabVIEW本质上是一种图形化编程语言,因此在实现这类复杂的硬件控制任务时,它能够提供比传统文本编程语言更直观和高效的开发体验。这种优势尤其体现在需要实时监控和控制的场合,比如实时数据采集和工业控制。通过LabVIEW,开发者可以直观地看到数据流动和处理过程,这对于调试和优化系统性能是极大的帮助。 通过LabVIEW调用图莫斯模块实现CAN、LIN和PWM通讯控制,涉及到硬件接口模块、通讯协议的配置和集成、以及LabVIEW图形化编程的优势。这使得即使是复杂的通讯控制任务,也能够通过简单直观的方式快速实现,大大缩短了产品的开发周期,降低了研发成本。
2025-04-24 23:28:58 1.96MB labview CAN
1
标题 "DWM绘制全系统C++源码带调用" 提及的核心知识点是关于DWM(Desktop Window Manager)的编程,以及如何在C++中实现系统级别的绘制和调用。DWM是Windows操作系统中的一个组件,负责窗口的渲染、特效和 Aero Glass 效果。学习这个主题将涉及到以下几个关键领域: 1. **DWM API**:DWM 提供了一组API接口,允许开发者直接与桌面窗口管理器进行交互,如自定义窗口边框、改变窗口透明度、实现毛玻璃效果等。这些API通常通过Windows SDK提供,包括但不限于`DwmExtendFrameIntoClientArea`、`DwmSetWindowAttribute`等函数。 2. **C++编程**:本项目是用C++编写的,所以需要对C++有深入理解,包括面向对象编程、内存管理、STL库的使用、异常处理等。此外,C++与Windows API的结合使用,需要掌握Win32 API,这是一组用于开发Windows应用程序的函数库。 3. **Windows消息循环**:在C++中编写Windows程序时,需要设置消息循环来处理来自操作系统的事件,如键盘输入、鼠标点击等。这通常通过`GetMessage`、`TranslateMessage`和`DispatchMessage`函数实现。 4. **多线程编程**:DWM可能涉及多线程环境下的操作,特别是当涉及到系统级别的调用时,需要了解如何正确地同步和通信以避免竞态条件。 5. **易语言与C++调用**:描述中提到的"易语言与C++调用写法"表明,项目可能包含了两种语言的互操作性。易语言是一种相对简单的编程语言,而C++是更底层的语言,它们之间的互调用需要了解DLL导出、函数指针、extern "C"等概念。 6. **文件名分析**:"dwm隐藏调用写法1.e"可能是DWM调用的特定实现,而"注意事项.txt"可能包含了代码使用或编译过程中的注意事项和建议。"【龙马谷论坛】.url"和"【龙马谷官网】.url"可能是开发者交流的社区链接,对于查找更多相关资料或寻求帮助可能会有帮助。 在研究这个项目时,开发者需要阅读和理解源码,同时参考Windows SDK文档来了解DWM API的具体使用。对于初学者来说,可能还需要学习如何调试和分析C++程序,以及如何在Windows环境下构建和运行程序。通过这个项目,可以深入理解Windows系统的底层机制,并提升C++编程能力。
2025-04-23 12:17:00 3.51MB
1
dy六神X-Argus、X-Gorgon、X-Khronos、X-Ladon、X-Helios、X-Medusa几个参数dy六神算法,uncoin底层写法开发的。然后你可以用flask开api调用使用
2025-04-23 06:24:21 52.98MB
1