新闻详情

新闻详情

首页 / 资讯中心 / 详情

基于Qt与QListWidget的天气预报系统开发:从界面布局到异步网络请求全解析

发布时间:2026/8/31 5:28:24来源:尧图网络
基于Qt与QListWidget的天气预报系统开发:从界面布局到异步网络请求全解析
简介本资源是一套基于C与Qt框架开发的高分毕业设计项目——天气预报系统源码及配套文档面向计算机、通信、人工智能、自动化等专业的本科生及教师适用于毕业设计、课程大作业或期末实训。系统采用QListWidget实现城市天气列表展示集成天气数据解析、UI界面切换、图标资源管理与本地化显示功能代码经完整调试可直接编译运行含已打包exe。压缩包共74个文件包含50张UI资源图png/jpg、6个头文件.h、5个实现文件.cpp、4个界面设计文件.ui、2份Markdown说明文档含README与Qt要点整理、1个工程配置文件.pro、1个资源描述文件.qrc等整体大小21.31MB。已有126人下载学习提供完整项目结构、清晰模块划分如天气数据类weatherData.h、城市温度管理citywithtemp.cpp、多区域界面worldlistwea.ui/asiawea.ui、以及可复用的Qt信号槽逻辑与资源加载方案具备扎实的学习参考价值与二次开发基础。 每年一到毕设季总会有人拿着同一个题目来问我老师基于C和Qt的天气预报系统怎么做这个题目在Qt毕业设计里几乎算是“常青树”了。它并不简单但恰好踩中了Qt开发最常用的一整条知识链——窗口布局、控件交互、网络请求、JSON解析、异步刷新。整套做下来该练的技术点基本都练到了。这篇内容就用我实际带学生搭项目的过程为例把基于Qt和QListWidget的天气预报系统从功能设计、代码实现到文档组织完整过一遍。想拿高分的同学重点看后面的避坑和文档部分。1. 项目整体拆解与设计思路1.1 为什么是Qt QListWidget先回答一个问题Qt里能展示城市列表的控件那么多为什么要单拎QListWidget出来答案其实很现实——天气预报系统的核心交互是“选中某个城市看对应的天气信息”它本质上是一个典型的“主列表 详情页”结构而QListWidget恰好是这一类场景里上限够用、学习成本最低的选择。有人会想用QTreeWidget行不行用QTableView行不行都可以但要注意毕业设计答辩时老师看的不是工具用得越冷门越好而是“你选的方案和你的项目规模是否匹配”。QListWidget的优势在于它自带Item概念底层数据来一个就add一个选中变化直接有信号槽通知根本不需要你去继承模型或者重写数据接口。换句话说你把精力省下来放在网络请求、数据解析和界面美化上最后展示效果反而更好。另外QListWidget对“列表项本身携带数据”这件事也支持得很自然。我们可以把城市编码、经纬度、当前温度这些字段绑到每个item的Qt::UserRole上用户点击某个城市时直接从这个角色数据里把关联信息取出来。相比用一个全局变量记录“当前选了哪个城市”这种方式清爽太多也避免了数据错乱。1.2 核心功能模块与功能边界一个能拿高分、又不至于把自己写崩的天气预报系统模块划分应该是清晰的。我在带学生时习惯把项目拆成下面几个部分城市管理模块负责城市列表的添加、删除、保存、加载。这是QListWidget的主场。天气数据请求模块基于QNetworkAccessManager向天气API发起请求拿到JSON原始数据。数据解析模块把JSON转成结构体或类对象统一整理成界面可用的模型数据。界面展示模块当前天气信息、未来几天的预报卡片、天气图标和背景切换。配置持久化模块把用户选过的城市、最后查看的城市保存到本地文件。先别急着加功能。很多同学一上来就想做“未来7天”“气压湿度紫外线”“地图选点”最后全卡在半路。我的建议是第一版先锁定三个核心动作添加城市、切换城市、展示天气。这三个跑通了再考虑扩展。1.3 一份可以抄的界面布局方案界面布局方案我这几年带学生用过很多版最稳的还是“左右分栏 右侧详情”的结构。左侧用QListWidget展示城市列表宽度固定到260到300像素右侧是一个垂直布局的QWidget从上到下依次放城市名、温度、天气现象、湿度风向再往下放未来几天预报的水平小卡片。在Qt里实现这种布局不需要花里胡哨的代码。顶层的QMainWindow中央组件放一个QSplitter把左侧QListWidget和右侧详情页加进去。QSplitter的好处是用户可以拖拽调整分栏宽度展示时显得专业。右侧详情页内部用QVBoxLayout从上到下排布每一个信息块再用QHBoxLayout包一层最后整体交给主窗口布局。我第一次做类似项目的时候犯过一个经典错误把所有控件一次性new出来全部塞进布局结果界面拥挤不堪间距也没调显得特别业余。后来学乖了用“占位 分组”的思路——先给大区块留好位置再往里填小组件整个界面看起来立刻舒服了很多。2. 技术选型与环境搭建2.1 Qt版本、编译套件与开发环境打开搜索引擎搜“Qt下载”你可能会被一堆版本绕晕。作为毕设来说我的建议是优先选Qt 5.15 LTS或者Qt 6.5以上版本。前者老牌稳定网上资料多遇到问题一搜一大把后者更现代但如果你的代码是参考老教程写的偶尔会碰上QRegExp被移除、Qt6模块合并这些小坑。编译套件这里要特别注意。Windows下Qt一般配两套编译器MinGW和MSVC。MinGW配起来快不用装Visual Studio代码里不涉及Windows专属API的话基本够用。MSVC配合Visual Studio使用调试体验更好很多Qt插件和第三方库也优先适配MSVC。如果你平时就装好了VS2019或VS2022那就选MSVC如果VS还没装、也不想折腾直接MinGW起步对毕设项目完全没影响。至于网上有些旧教程提“Qt 5.12配置VS2015编译环境”那个年代已经过去了不必强求。2.2 需要准备的Qt模块天气预报系统会用到两个额外的Qt模块Network和Core。是的Core不用你手动加默认就有但Network必须加。打开项目里的.pro文件把这一行加上QT core gui network如果你用的Qt 5及以上版本gui也在。如果你新建的是QWidget Application项目Qt Creator默认会帮你写好QT core gui你只需要手动补上一个network。需要注意如果你用Qt 6有些情况下还要考虑QT widgets。在Qt 6里Widgets模块从gui中分离得更明显新建项目时通常会自动带上但万一编译报错说找不到QApplication、QWidget这些头文件第一反应就去看.pro文件里是不是漏了widgets。2.3 天气数据API的选型与返回结构天气预报系统的核心数据靠天气API提供。国内毕设最常用的是和风天气和高德开放平台两者都需要注册账号、创建应用拿一个免费的API Key用起来都不复杂。如果不想注册也能用Open-Meteo这类完全免费的接口但它的城市搜索不如国内平台方便对中文城市名的支持也弱一些。综合来看我建议用高德或和风原因很简单它们直接支持中文城市名/城市编码查询返回JSON的结构也清晰。以高德天气为例请求一个城市天气的URL大致长这样https://restapi.amap.com/v3/weather/weatherInfo?city%E5%8C%97%E4%BA%ACkey你的Key返回的JSON是一大段嵌套结构我们关心的核心字段是{ status: 1, count: 1, lives: [ { province: 北京, city: 北京, weather: 晴, temperature: 31, humidity: 28, winddirection: 东南, windpower: 3, reporttime: 2024-05-20 16:00:00 } ] }不同API返回字段略有差别但套路一样。我的建议是动手写代码之前先用浏览器直接访问一次这个URL把返回的JSON原样存下来之后解析字段时对着看效率会高很多。不要一边写代码一边猜字段名那是在给自己挖坑。3. QListWidget城市列表核心实现3.1 城市列表的动态添加与选中响应这部分是整个项目里QListWidget发挥重头戏的地方。我们要做的第一步是让用户输入城市名并添加到左侧列表里。在界面上放一个QLineEdit和一个“添加”按钮按钮点击后取出输入框里的文本把它包装成QListWidgetItem然后加入QListWidget。void MainWindow::onAddCityClicked() { QString cityName ui-lineEditCity-text().trimmed(); if (cityName.isEmpty()) { return; } // 简单去一下重避免同一个城市被加多次 for (int i 0; i ui-listWidgetCity-count(); i) { if (ui-listWidgetCity-item(i)-text() cityName) { return; } } auto *item new QListWidgetItem(cityName); item-setData(Qt::UserRole, cityName); ui-listWidgetCity-addItem(item); }第一版功能到这里就够了。把城市名存进Qt::UserRole是为了后面扩展数据结构时不动外面这些代码。接下来最关键的一步是监听用户点了哪个城市。在Qt里这通过QListWidget的currentItemChanged信号来完成connect(ui-listWidgetCity, QListWidget::currentItemChanged, this, MainWindow::onCurrentCityChanged); void MainWindow::onCurrentCityChanged(QListWidgetItem *current, QListWidgetItem *previous) { if (current nullptr) { return; } QString cityName current-data(Qt::UserRole).toString(); refreshWeather(cityName); }这里有个小细节信号里会带一个previous参数。如果当前项和上一项是同一个这个信号也会触发一次。比如你删除当前选中的城市时列表会自动跳到另一个item此时previous恰好指向被删的那个空指针。如果不做空判断程序就容易崩。所以if (current nullptr) return;这行看起来很随意其实是保命用的。3.2 让城市列表看起来更专业默认的QListWidgetItem只有一行白底黑字放在毕设里确实有点素。提升观感有两个方向一个是用setItemWidget塞进一个自定义的QWidget另一个是直接用样式表美化。样式表对新手更友好也更容易控制。我最常推荐的组合是把QListWidget整体配置成圆角卡片风格再加选中高亮QListWidget { background-color: #f5f7fa; border: none; border-radius: 8px; padding: 6px; outline: none; } QListWidget::item { height: 42px; padding-left: 12px; border-radius: 6px; color: #333333; margin: 2px 4px; } QListWidget::item:hover { background-color: #e8edf2; } QListWidget::item:selected { background-color: #3b82f6; color: white; }样式表写完之后整套程序的气质立刻就不一样了。做毕设时“功能完整 界面干净”这两条同时达到分数都不会差。如果你的城市列表还想显示“当前温度”这种次级信息那就得换思路了。比如给item设置两个角色主文本用城市名附加文本用另一个角色存储再通过自定义QStyledItemDelegate绘制。但这里我必须说实话对毕设而言这个复杂度是略高的。更务实的做法是只显示城市名把温度信息放到右侧详情页。毕竟QListWidget在那里承担的只是一个导航列表的角色不是仪表盘。3.3 城市数据的保存与重新加载如果每次打开程序城市列表都归零、得一个个重新添加演示效果会打折答辩也容易被问“你的数据持久化在哪里”。所以城市列表的保存是标配功能。最省事的方案就是用QSettings写注册表或者配置文件也可以在程序目录下存一个city_list.txt。用QSettings的写法很简洁void MainWindow::saveCityList() { QStringList cityNames; for (int i 0; i ui-listWidgetCity-count(); i) { cityNames ui-listWidgetCity-item(i)-text(); } QSettings settings(MyDesktopApp, WeatherDemo); settings.setValue(cities, cityNames); } void MainWindow::loadCityList() { QSettings settings(MyDesktopApp, WeatherDemo); QStringList cityNames settings.value(cities).toStringList(); for (const QString name : cityNames) { auto *item new QListWidgetItem(name); item-setData(Qt::UserRole, name); ui-listWidgetCity-addItem(item); } if (ui-listWidgetCity-count() 0) { ui-listWidgetCity-setCurrentRow(0); } }这里有个经验之谈加载完城市列表后尽量自动选到第一项触发一次天气查询。启动程序就能看到天气数据演示效果会好非常多。如果列表为空再提示用户添加城市整体体验也顺理成章。4. 天气数据请求、解析与界面刷新4.1 异步网络请求的正确打开方式Qt的网络请求默认是异步的理解这一点特别关键。所谓异步就是manager-get(request)发出去之后代码不会停在原地等服务器返回而是立刻往下执行。服务器返回数据时会触发QNetworkReply的finished信号你在槽函数里才能拿到数据。很多新手在这里犯的一个错误是发完请求立刻就去取数据结果取到的是空值。因为网络数据还没回来。正确的做法是把操作拆成两步void MainWindow::sendWeatherRequest(const QString cityCode) { QUrl url(https://restapi.amap.com/v3/weather/weatherInfo); QUrlQuery query; query.addQueryItem(city, cityCode); query.addQueryItem(key, 你的Key); url.setQuery(query); QNetworkRequest request(url); request.setHeader(QNetworkRequest::UserAgentHeader, QtWeatherDemo/1.0); QNetworkReply *reply networkManager-get(request); connect(reply, QNetworkReply::finished, this, [this, reply]() { reply-deleteLater(); handleWeatherReply(reply); }); }注意到我把reply-deleteLater()放在槽函数开头执行。这是为了避免内存泄漏的常用做法。每个请求都会生成一个新的QNetworkReply对象你不delete堆上就会越堆越多。deleteLater的意思是在事件循环合适的时机安全销毁比直接delete更保险因为它不会把正在处理的信号打断。4.2 JSON解析与容错处理拿到reply之后第一件事是判断有没有网络错误再考虑解析。用QJsonDocument解析JSON是非常顺手的一件事void MainWindow::handleWeatherReply(QNetworkReply *reply) { if (reply-error() ! QNetworkReply::NoError) { statusBar()-showMessage(QString(请求失败: %1).arg(reply-errorString())); return; } QByteArray rawData reply-readAll(); QJsonDocument doc QJsonDocument::fromJson(rawData); if (doc.isNull() || !doc.isObject()) { statusBar()-showMessage(JSON 解析失败); return; } QJsonObject root doc.object(); QString status root.value(status).toString(); if (status ! 1) { statusBar()-showMessage(接口返回异常 root.value(info).toString()); return; } QJsonArray lives root.value(lives).toArray(); if (lives.isEmpty()) { statusBar()-showMessage(未查询到天气信息); return; } QJsonObject live lives.at(0).toObject(); QString temperature live.value(temperature).toString(); QString weatherText live.value(weather).toString(); QString humidity live.value(humidity).toString(); QString windDir live.value(winddirection).toString(); QString windPower live.value(windpower).toString(); QString reportTime live.value(reporttime).toString(); }这里面的容错层层递进先判断网络错误再判断JSON是否可解析再判断业务状态码最后判断数据是否为空。每一步都挡一道后面展示数据时才不会因为缺字段而崩溃。这种“防御式解析”的习惯在真实开发里是大加分项。解析完后把字段更新到对应的QLabel上即可ui-labelCityName-setText(cityName); ui-labelTemperature-setText(temperature °C); ui-labelWeather-setText(weatherText); ui-labelHumidity-setText(湿度 humidity %); ui-labelWind-setText(windDir windPower 级); ui-labelUpdateTime-setText(更新时间 reportTime);页面上的文字会随接口返回自动变化一个完整的闭环就跑通了。4.3 天气图标与背景的动态切换天气现象通常是一个字符串比如“晴”“多云”“小雨”。如果我们想给不同天气配不同的图标最直接的做法是维护一个QMap把天气关键字映射到图标文件路径。你可以在界面工程目录下放一堆png图然后根据关键字动态更新QLabel的pixmapQString getIconPath(const QString weather) { if (weather.contains(晴)) return :/icons/weather_clear.png; if (weather.contains(云)) return :/icons/weather_cloudy.png; if (weather.contains(雨)) return :/icons/weather_rain.png; if (weather.contains(雪)) return :/icons/weather_snow.png; return :/icons/weather_default.png; }判断顺序要注意先判断更具体的词再判断宽泛的词。比如“小雨转多云”如果先判断“云”可能会匹配错所以先判断“雨”再判断“云”更合理。这里只是通过contains做简单关键词匹配足以应付绝大多数天气文案。背景切换同理可以在天气请求完成后根据天气情况把右侧详情页的背景色或背景图换掉。晴天用一个鲜明的渐变雨天用灰蓝色调。实现方式也很简单给详情页QWidget设置setStyleSheet动态替换背景。5. 常见问题与排查技巧实录5.1 网络请求一直失败但单独在浏览器里能访问这是出现频率最高的问题。多数原因是协议或权限设置不对比如你用的是Qt 5.15或旧版本访问HTTPS接口时缺了SSL依赖库。Qt打包发布时不会自动把OpenSSL的dll带过去导致程序在开发机上跑得好好的换一台电脑就请求失败。解决方法是把libcrypto-1_1-x64.dll和libssl-1_1-x64.dllQt5对应版本复制到exe同级目录。Qt6用的是OpenSSL3对应的dll文件名是libcrypto-3-x64.dll和libssl-3-x64.dll。如果不想深究就在请求时设置request.setSslConfiguration(QSslConfiguration::defaultConfiguration())再配合正确的dll基本能解决。5.2 中文城市名在请求时变成乱码使用QUrlQuery添加中文参数时一般Qt会自动做URL编码不需要手动转。但如果你的请求URL是用字符串拼接的像下面这样QString url https://restapi.amap.com/v3/weather/weatherInfo?city cityName key...;这里的cityName如果是中文就会出现编码问题。正确做法还是用QUrlQueryQUrl url; url.setUrl(baseUrl); QUrlQuery query; query.addQueryItem(city, cityName); query.addQueryItem(key, apiKey); url.setQuery(query);如果坚持用字符串拼接方式则必须做一次QUrl::toPercentEncoding(cityName)否则经纬度、中文名都会成为隐患。5.3 点击城市列表项却没有触发天气刷新大概率是信号连接写得太早或者槽函数被delete掉了。我用Qt Creator做项目时习惯在MainWindow构造函数里把所有connect写完确保这些连接在窗口显示前已经生效。另一个容易踩的坑是如果你在某个地方对同一个对象重复connect在旧版Qt里可能会触发多次槽函数导致请求发送多次。虽然新版Qt默认会自动去重但为了保险最好别在循环里connect。还有同学会在槽函数里判断currentItem是否为空时忘记返回值结果后面继续访问空指针程序直接崩溃。建议在任何可能在删除场景下触发的槽函数第一行都做空指针检查。5.4 编译报错、链接失败的几种速查常见错误这样查file not found检查头文件路径和大小写undefined reference to vtable检查是否漏了Q_OBJECT宏或者改了信号槽定义却没重新qmakecannot find -lXXX检查.pro文件是否漏了对应的模块或库LNK2019/LNK2001这类MSVC链接错误也基本都指向忘加模块、函数只声明没实现这几类原因。有一个很容易被忽视的点头文件里加了Q_OBJECT宏的类改了信号槽之后必须重新构建最好让qmake重新跑一遍。否则会出现“改了信号槽不生效”的诡异现象。用Qt Creator里的“构建 - 重新构建项目”基本都能解决。5.5 常见问题速查表现象可能原因快速处理请求失败、无返回缺SSL库 / 网络不通补充OpenSSL dll到exe目录JSON解析失败返回非JSON / API Key失效先浏览器直接访问URL验证中文显示乱码编码转换问题统一用QString和QUrlQuery列表选中没反应信号槽未连接检查connect和空指针判断数据显示上一次的值请求与点击不同步在请求开始时清空或置灰旧数据编译报错找不到头文件模块缺失检查.pro里是否缺network/widgets6. 从源码到高分文档的打磨建议6.1 源码规范与注释技巧“高分项目”和“能跑项目”之间隔着一层代码规范。很多时候代码能跑但答辩老师把源码点开一看函数大而全、变量名随意、没有注释印象分瞬间就下来了。反过来如果你的代码结构清爽类职责分明每个函数三五行加上恰到好处的注释老师一眼就能看出这项目是真做出来的。我的建议是给每个类写一个顶层注释说明这个类负责什么模块每个公开的槽函数加一两行注释讲清楚它响应用户的什么操作。不用注释得像教科书那么死板但至少让不熟悉代码的人能顺着注释看明白逻辑链路。另外工程结构也要讲究一点。头文件、源文件、界面文件分开目录图片资源统一丢到resources目录里。这个习惯在Qt Creator里天然就能保持但很多同学为了省事会在一个目录下堆满文件。整理目录也是一种专业度的体现。6.2 文档说明书的组织结构很多学校的毕业设计文档都有固定模板但无论模板长什么样这四块必须写扎实需求分析、总体设计、详细设计、测试。需求分析里要讲清楚这个系统解决什么问题有哪些用户角色有哪些核心功能总体设计里放系统模块划分、界面结构图、关键流程说明详细设计是重头戏要写清楚每个类的职责、关键函数实现思路、主要的信号槽关系测试部分则要列测试用例和执行结果比如添加城市、选中切换、网络异常分别应该表现成什么样。这里的“文档说明”和“项目源码”是相辅相成的。文档里写“采用模块化设计”源码里就得真的划分出网络请求类、解析类、界面类文档里写“支持容错处理”源码里就得有对应的空判断与异常处理。前后对不上是最容易被答辩老师抓到的硬伤。6.3 答辩现场常见问题准备答辩老师问的问题其实很固定核心就那么几类。比如“为什么选QListWidget而不是QTableView”你只要回答“项目需求是简单的城市列表导航QListWidget原生支持item数据绑定和选中信号够用且代码简洁无需引入model/view复杂度”就够了再比如“网络请求是同步还是异步”这个问题必须答对——答案是异步且要解释为什么不能同步因为同步会阻塞UI线程导致窗口卡死。还有一个高频问题Key和敏感信息为什么要放进代码里会不会暴露最优做法是写成配置文件程序启动时读取。但毕设项目里API Key直接放在常量里也不是致命问题只要你能答出“这里为了演示方便写在代码里实际开发时应该放到远端服务器做代理”这种改进意识老师的印象分反而会更高。最后再分享几句实在话我带过的学生里凡是认认真真把天气系统做完再花两个晚上把文档和注释补齐的最后分数都差不了。这个项目最大的价值是它把C面向对象、Qt事件循环、网络异步编程、JSON数据处理这些知识点串成了一条完整的线。做完之后你脑子里对“一个桌面应用从界面到数据再到网络到底是怎么跑起来的”会有非常具象的认识。如果你做完基础版本还想继续往上走可以试着加入多城市对比、历史温度折线图、定时自动刷新这些扩展功能那又是另一个量级的提升了。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

一星如月GEO白皮书:第01章|为什么传统GEO(生成式引擎优化)定义不够 2026/8/31 6:13:28

一星如月GEO白皮书:第01章|为什么传统GEO(生成式引擎优化)定义不够

一、当GEO(生成式引擎优化)被简化成“让人工智能提到我” GEO(Generative Engine Optimization,生成式引擎优化)迅速进入企业市场语境后,人们常用几句话概括它:让内容被人工智能引用,让品牌被提及,让人工智能推荐企业,或者“做给人工智能看的SEO(Search Engine Opt…

阅读更多 →
keil5常见使用操作 2026/8/31 6:13:28

keil5常见使用操作

1、导入工程或者打开其他工程找到工程文件目录,找到目录里的工程名称的文件,后缀位.uvprojx的文件,使用keil打开就可以了。2、编译代码。再次编译3、烧录固件4、配置外接单片机、ST仿真等4.1、选择对应的芯片型号4.2、生成hex文件设置4.3、导…

阅读更多 →
AI生成人脸为何显假?用Python从三个维度检测AI脸 2026/8/31 6:13:28

AI生成人脸为何显假?用Python从三个维度检测AI脸

刷短视频时,你一定遇到过这样的画面:主播妆容无瑕,口型与声音完美对齐,笑容从开场保持到结束,连眨眼频率都精准得像上了发条。初看觉得精致,多看几秒却有一种说不出的别扭。评论区常常一语道破——这是个AI…

阅读更多 →
ai全栈软件开发day18 2026/8/31 6:13:28

ai全栈软件开发day18

今日学习内容今天是 Day 18,继续在第三阶段「AI 应用 Web 开发」中深度前进。昨天我们学了 MongoDB 文档数据库、Spring Data MongoDB 集成与 Docker 镜像构建,今天按照 Day 17 结尾的计划,重点攻克两个非常实用的工程化主题:Mave…

阅读更多 →
对于C语言的初始理解和困境(混沌期) 2026/8/31 6:13:28

对于C语言的初始理解和困境(混沌期)

示例 #include <stdio.h>int main() {printf("hello world\n");return 0; }这是我打出的第一个程序&#xff0c;也可以说每个初学者都会进行的最简单的代码&#xff0c;但要是只会跟着敲代码&#xff0c;是永远都学不会编程的&#xff0c;需要理解自己打的每个…

阅读更多 →
Open ASR新增印地语基准:本地多语言语音识别评测与WER对比实践 2026/8/31 6:08:28

Open ASR新增印地语基准:本地多语言语音识别评测与WER对比实践

多语言语音识别生态最近有一个值得关注的变化&#xff1a;Hugging Face 与 Voice Arena 一起为 Open ASR 评估体系新增了印地语基准。也就是说&#xff0c;在已有的开放语音识别评测基础上&#xff0c;现在又多了一个可以统一衡量模型“说印地语到底能不能用”的测试入口。对于…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞